本文面向已经能够正常连接节点、准备调整路由策略的用户。最终配置会按“广告拦截、局域网直连、境内域名直连、境内 IP 直连、其余代理”的顺序处理流量,并通过核心日志、指定代理端口与域名解析结果逐项验证。
先确定分流目标与匹配链路
分流要点
路由分流不负责建立 VLESS、VMess 等代理连接,它只在请求进入核心后决定应使用哪个出站。节点的地址、端口、传输层与认证参数仍属于代理出站配置;路由规则只引用已经存在的出站标签。把这两层混在一起,是“节点能连接但规则不生效”最常见的原因之一。
分流要点
本例采用三个出站标签:proxy 对应当前代理节点,direct 对应 freedom 直连出站,block 对应 blackhole 拦截出站。标签区分大小写,规则中的 outboundTag 必须与出站里的 tag 完全一致。
分流要点
V2Ray 与 Xray 的路由规则按数组顺序检查。一个请求命中第一条符合条件的规则后便停止继续匹配,因此规则不是“越多越优先”,而是“越靠前越优先”。广告域名应放在境内域名之前,否则同时属于两个集合的域名可能先被直连规则接走。
广告拦截
- 匹配源
- geosite:category-ads-all
- 出站标签
- block
- 建议位置
- 第 1 条
先拦截,再判断地域,避免广告域名被境内规则提前直连。
局域网直连
- 匹配源
- geoip:private
- 出站标签
- direct
- 典型地址
- 192.168.0.0/16
保留路由器、文件服务与其他内网设备的本地访问路径。
境内资源直连
- 域名集合
- geosite:cn
- IP 集合
- geoip:cn
- 出站标签
- direct
域名与 IP 分成两条规则,便于从日志判断具体命中阶段。
剩余流量代理
- 匹配网络
- tcp,udp
- 出站标签
- proxy
- 建议位置
- 最后一条
兜底规则必须在末尾,提前放置会吞掉后续所有 TCP 与 UDP 规则。
geosite 与 geoip 分别匹配什么
分流要点
geosite 是域名集合。请求保留域名信息时,核心可以直接判断域名是否属于 geosite:cn 或 geosite:category-ads-all。集合中的条目可能是完整域名、子域规则或关键词规则,实际范围取决于客户端随附的数据文件版本。
分流要点
geoip 是 IP 网段集合。应用直接访问 IP、域名规则未命中后执行解析,或者流量入口已经只能看到目标 IP 时,核心才有机会用 geoip:cn 判断地域。它不能根据网站名称推断归属,只比较目标地址是否落在数据文件记录的网段内。
| 匹配方式 | 输入对象 | 示例 | 适合处理 |
|---|---|---|---|
| geosite | 域名 | geosite:cn |
按站点类别或地域维护的域名集合 |
| geoip | IPv4 或 IPv6 地址 | geoip:cn |
直连 IP 请求与解析后的地址判断 |
| domain | 明确域名规则 | domain:example.com |
少量需要固定覆盖的站点 |
| ip | 明确网段 | 192.168.0.0/16 |
内网、专用服务或自有网段 |
结论:优先保留域名,再用 IP 补充判断
只写 geoip:cn 会让域名请求依赖解析结果,既增加一次判断成本,也可能受到解析位置影响;先用 geosite:cn 处理明确域名,再让 geoip:cn 接住其余境内地址,规则更容易解释和排查。
完整路由配置与规则顺序
分流要点
下面的 JSON 展示路由和三个出站的最小组合,可作为高级配置的结构参考。实际使用时还需要保留原配置中的入站、DNS、日志以及代理服务器参数,不应直接用这段内容覆盖整份客户端配置。
分流要点
domainStrategy 设为 IPIfNonMatch:核心先检查域名规则;域名没有命中时,再解析目标域名并尝试 IP 规则。这样既能使用 geosite,也能让 geoip 作为第二层判断。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": [
"geosite:category-ads-all"
],
"outboundTag": "block"
},
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
},
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": []
}
},
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "block",
"protocol": "blackhole",
"settings": {}
}
]
}
分流要点
示例中的空 vnext 只表示代理节点参数应由现有订阅配置提供,不能作为可连接节点使用。在 v2rayN 中,订阅导入会生成完整代理出站;手动维护路由时应引用客户端生成的代理标签,而不是删除服务器信息后照抄空数组。
- 先放置需要明确拦截或覆盖的规则,例如广告域名与自定义域名。
- 再放置
geoip:private,确保 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 等私有地址保持直连。 - 随后依次放置
geosite:cn与geoip:cn,分别处理境内域名和境内地址。 - 最后用
network: tcp,udp发送到proxy,承担未命中请求的兜底。
在 v2rayN 中落地配置
分流要点
以 v2rayN 7.10.x 的界面组织为例,先在「设置」→「参数设置」中核对本地监听端口和日志级别。常见配置会使用 SOCKS 端口 10808、HTTP 端口 10809,但升级或迁移后的实际端口可能不同,验证命令必须使用当前界面显示的数值。
分流要点
路由入口通常位于「设置」→「路由设置」。新建规则集后,依次添加广告域名、私有 IP、境内域名、境内 IP 和最终代理规则,再将该规则集设为当前规则。不同 7.x 小版本的按钮位置可能调整,但规则名称、顺序和出站标签的核对方法不变。
分流要点
订阅更新可能重新生成节点,但通常不会替用户修正自定义路由。更新订阅后,应确认当前活动规则集没有切回默认方案,并检查所选节点仍对应可用的代理出站。修改完成后需要重启核心,仅保存规则而不重载核心不会改变正在运行的路由状态。
- 在服务器列表中选择可用节点,并执行一次真连接延迟测试。
- 打开系统代理,确认浏览器流量进入 v2rayN 的本地监听端口。
- 进入「设置」→「参数设置」,记录 HTTP、SOCKS 与局域网监听开关的实际值。
- 进入「设置」→「路由设置」,确认当前规则集和五条规则的排列顺序。
- 保存后重启核心,观察日志是否成功加载 geosite 与 geoip 数据。
验证境内外分流是否真正生效
分流要点
“网页能够打开”只能证明连接链路基本可用,不能证明流量走了预期出站。验证时要同时观察请求目标、核心日志中的规则命中结果和最终出站标签。建议先把日志级别临时调到 info,完成检查后再恢复原设置,避免长期积累大量记录。
分流要点
第一轮使用浏览器测试:分别访问一个明确属于境内域名集合的站点、一个需要代理的站点以及路由器管理地址。预期结果是境内站点命中 direct、其余站点命中 proxy、路由器地址通过 geoip:private 直连。
分流要点
第二轮绕开浏览器扩展和缓存,直接指定 v2rayN 的 HTTP 代理端口发起请求。若当前 HTTP 端口为 10809,可以在 Windows、macOS 或 Linux 的终端执行下列命令;测试地址应替换为自己能够查看访问日志的 HTTP 服务。
curl --proxy http://127.0.0.1:10809 https://your-test-endpoint.example/
curl --proxy http://127.0.0.1:10809 -I https://your-test-endpoint.example/
nslookup your-test-endpoint.example
分流要点
检查时不要只比较返回 IP。部分站点使用分布式节点,同一域名可能按解析位置返回不同地址。更可靠的证据是 v2rayN 核心日志中显示的目标域名、目标端口以及对应的 direct、proxy 或 block 出站。
境内站点仍然走代理怎么办?
分流要点
先确认 geosite:cn 位于最终代理规则之前,再检查日志里是否保留了目标域名。若入口只提供目标 IP,则继续核对 domainStrategy 和 geoip:cn 是否已经加载。
局域网地址突然打不开怎么办?
分流要点
检查 geoip:private 是否指向 direct,并确认它排在 network: tcp,udp 兜底规则之前。访问 192.168.1.1 时,日志不应显示 proxy。
广告规则导致页面组件缺失怎么办?
分流要点
先临时停用 category-ads-all 复测。确认是误拦截后,为必要域名增加一条更靠前的 direct 规则,不要把整个广告规则移到境内直连之后。
规则已保存但日志没有变化怎么办?
分流要点
确认启用的是刚编辑的规则集,然后重启核心。若 v2rayN 同时启用了预定义路由方案,检查当前方案是否覆盖了自定义规则。
UDP 请求没有按规则分流怎么办?
分流要点
确认兜底规则的 network 同时包含 tcp,udp,并检查当前代理节点的传输配置是否支持目标 UDP 流量。路由命中不代表对应出站一定能承载该请求。
常见偏差与维护策略
分流要点
分流结果会随着域名归属、服务部署和规则数据更新而变化。某个境内服务可能使用境外地址,某个境外品牌也可能在境内部署节点,因此 geosite 与 geoip 给出的是规则数据层面的分类,不是对业务归属的实时判断。对工作系统、自有服务等确定目标,显式域名规则通常比地域集合更稳定。
分流要点
自定义覆盖规则应少而明确。需要强制直连时,把具体域名规则放在广告和地域规则之前,并指向 direct;需要强制代理时,同样放在地域直连之前并指向 proxy。每增加一条覆盖规则,都应记录用途,避免数月后只剩下无法解释的例外列表。
- 核心或客户端升级后,重新检查 geosite 与 geoip 数据能否正常加载。
- 订阅更新后,确认活动节点和自定义路由方案没有被切换。
- 新增规则时先测试单个域名,再扩展为整个分类或网段。
- 出现访问异常时,从第一条规则开始检查,不要只盯着最终兜底规则。
- 保留一份可工作的旧配置,便于比较规则顺序与出站标签变化。
结论:分流故障先查顺序,再查标签,最后查数据
多数问题可以沿着三步定位:确认请求是否被前置规则提前截获,确认命中的 outboundTag 是否存在,确认 geosite 与 geoip 集合是否成功加载。只有三项都正常后,才需要继续检查 DNS 与节点传输层。