适合已经导入节点、能够连接,但希望调整国内直连与海外代理范围的用户。先区分流量接管和内核路由,再在 v2rayN 中建立独立路由方案。正文给出 V2Ray/Xray 风格的 JSON 片段、规则顺序及验证方法;示例不是完整客户端配置,应用前需要确认实际出站标签。
1. 系统代理与路由分流的边界
系统代理决定应用是否把连接交给 v2rayN 的本地入口;路由分流决定内核接到连接后,选择直连、代理还是拦截。两者不在同一层。仅开启系统代理,不代表所有应用都会使用它;终端、自带网络栈的程序或设置了代理例外的浏览器,可能绕过这个入口。
本文先以系统代理接管浏览器为验证环境,不同时调整 TUN。VMess、VLESS 等协议属于代理出站的连接方式,并不决定某个国内域名是否直连。订阅负责提供节点信息,也不能代替当前选中的本地路由方案。
10808 是下文命令使用的示例端口,不是对所有安装环境的默认值承诺。先在「设置」→「参数设置」中查看本地监听端口及入口类型;只有该端口实际接受 HTTP 代理请求时,才能直接使用文中的 HTTP 代理测试命令。
2. 在 v2rayN 中建立独立路由方案
先备份现有路由,再新增用于测试的方案。v2rayN 的界面会随版本及桌面界面类型变化,下面使用常见中文菜单名称;不要把路由规则 JSON 粘贴到订阅地址输入框,也不要直接覆盖正在运行的临时生成文件。
- 打开「设置」→「路由设置」,记录当前启用方案,并通过该界面提供的导出功能保存副本。若当前版本没有导出入口,先复制现有规则内容留存。
- 在路由设置中新建或复制一个方案,命名为“国内直连测试”。通过规则列表的添加、编辑和排序操作建立规则,不修改原方案。
- 核对
geoip.dat与geosite.dat是否可用。若日志提示加载失败或找不到标签,先处理规则文件,再测试路由。 - 保存后,在主窗口的路由选择项中切换到新方案,确认核心成功重启或配置重新加载。只编辑但没有选中方案,不会改变当前连接。
- 出现异常时切回原方案,并重新建立测试连接。不要在同一轮排查中同时更换节点、DNS 和接管方式。
3. domain、ip 与 outboundTag 的匹配方式
规则按列表顺序检查,首条命中的规则决定出站。相同字段内的多个候选通常是“或”关系;同一条规则里不同条件字段之间是“且”关系。例如同时填写 domain 和 port,必须域名符合且端口符合,才会命中。不要把域名与 IP 填在同一条规则里,误以为任意一个满足即可。
目标匹配字段
- domain
- 域名条件数组,例如 domain:example.com
- ip
- IP、CIDR 或 geoip 分类数组
- port
- 目标端口,例如 443 或 80,443
- network
- 网络类型,例如 tcp,udp
跨字段组合会缩小匹配范围;先用单一条件验证,再增加限制。
路由控制字段
- type
- 本文规则统一使用 field
- outboundTag
- 指向已存在出站的 tag
- domainStrategy
- 位于 routing 下,控制路由阶段域名解析
- rules
- 按优先级排列的规则数组
标签是配置中的标识符,不是协议名称;大小写和拼写必须与出站一致。
| 写法 | 匹配范围 | 注意点 |
|---|---|---|
full:example.com | 只匹配该完整域名 | 不包含 www.example.com |
domain:example.com | 该域名及其子域名 | 适合按站点维护例外 |
geosite:cn | 规则文件内的 cn 域名集合 | 不等于全部中文网站 |
geoip:cn | 规则文件内的中国 IP 网段集合 | 依赖目标 IP 或路由解析结果 |
geoip:private | 数据文件定义的私有及保留地址集合 | 用于局域网等地址,具体范围取决于数据源 |
192.168.1.0/24 | 指定 IPv4 子网 | 比整个私有地址集合更具体 |
不带前缀的普通域名字符串在这类规则中可能按子串匹配,容易扩大命中范围。需要准确控制网站范围时,优先明确写出 full: 或 domain:。此外,geosite:cn 与 geoip:cn 是两种数据分类,不是互相替代的同义条件。
4. 直连、代理、拦截的规则示例
下面的顺序是:指定拦截域名、私有地址直连、指定代理域名、国内域名直连、国内 IP 直连、其余 TCP/UDP 代理。示例中的 ads.example.com 和 remote.example.com 只用于说明写法,不代表实际广告库或可用测试服务。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["domain:ads.example.com"],
"outboundTag": "block"
},
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["domain:remote.example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
这是一个 routing 片段,不包含入口、DNS 和出站定义。完整配置必须已经存在 direct、proxy、block 三个标签。V2Ray/Xray 配置中,直连通常对应 freedom 出站,拦截通常对应 blackhole 出站;代理标签则指向所选节点的实际出站。不要为填满示例而新建不完整的节点对象。
- 窄规则放前:指定域名例外应位于大范围分类之前,否则请求先命中国内域名集合,后面的代理例外就不会执行。
- 兜底放最后:
network: tcp,udp覆盖范围很大,放到列表顶部会遮住后面的同类流量规则。 - 未命中不是自动直连:V2Ray/Xray 通常使用首个出站处理未匹配流量。显式兜底能减少对出站排列的隐含依赖。
- 拦截范围先收窄:先验证一个明确域名,再考虑分类列表。登录、验证或静态资源域名被误拦,可能让网页只显示空白。
结论:按域名与 IP 分类分流,指定服务应单独设规则
境外站点如果使用国内 CDN 地址,仍可能命中 geoip:cn 而直连。需要固定走代理的服务,应添加明确的域名规则,并放在国内分类之前,而不是依靠“海外网站”这个自然语言标签。
5. domainStrategy 与 DNS 的实际影响
域名规则要生效,内核首先需要拿到目标域名。应用若只交付一个 IP,geosite 无法凭空还原站点名称。嗅探可以在部分连接中补充域名信息,但并非所有协议和连接都能提供可识别的域名,不能把它当作绝对保证。
| 策略 | 路由行为 | 排查重点 |
|---|---|---|
AsIs | 不为路由匹配额外解析域名 | 域名目标通常不能靠 geoip 规则完成分类 |
IPIfNonMatch | 域名阶段未匹配时,再解析并尝试 IP 条件 | 宽泛兜底若已命中,通常不会触发这次解析 |
IPOnDemand | 匹配过程遇到需要 IP 的规则时尝试解析 | 较早的 IP 规则可能在域名例外之前决定出站 |
上一节保留了明确的代理兜底,因此在 IPIfNonMatch 下,一个尚未解析、也未命中国内域名集合的域名,可能直接命中末尾代理规则,而不会再按 geoip:cn 补判。该示例的国内 IP 规则主要覆盖已经以 IP 形式交给内核的目标。若业务要求对未分类域名也做 IP 地域判断,需要重新设计兜底和解析策略,不能只更改一个开关。
6. 用新连接和日志验证分流
网页能打开,只能证明某条访问路径可用,不能证明它走了预期出站。连接复用还可能保留修改前的路径。每次保存并应用方案后,关闭旧测试连接,再发起请求;必要时暂时将日志级别调整为 info,完成后恢复原值。
- 在 v2rayN 的日志区域确认核心启动成功。先排除规则文件缺失、JSON 语法错误和出站标签不存在等问题。
- 检查浏览器确实使用本地入口,并暂时停用会覆盖系统代理设置的扩展。不要同时用浏览器缓存页和其他接管方式判断规则。
- 分别测试国内域名、未分类域名和可访问的局域网地址。记录目标、时间和期望出站,再在相同时间段日志中查找路由结果。
- 若当前版本的常规日志不显示规则细节,可短时启用更详细日志;避免长时间保留含完整访问目标的日志,分享前先移除敏感信息。
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://www.baidu.com/
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
Windows PowerShell 中若 curl 被映射为其他命令,请使用 curl.exe。这两条命令只用于建立经过指定入口的新请求;HTTP 状态码、超时或响应头本身不能证明出站选择。部分服务不接受 HEAD 请求,也不应直接据此认定路由错误。
- 完全没有请求日志:先检查入口端口、代理类型和应用代理设置,不急着修改分流列表。
- 有连接但出站错误:检查当前启用方案、规则顺序、目标究竟是域名还是 IP,以及宽泛规则是否提前命中。
- 出站正确但连接失败:继续检查节点、目标服务、DNS 结果和 UDP 支持,不能用增加直连规则掩盖根因。
7. 自定义路由常见问题
国内网站还是走代理,先改哪一项?
先在主窗口确认选中了刚编辑的路由方案,再检查 geosite:cn 是否加载成功。对日志里看到的真实业务域名添加一条 domain: 直连规则,放在兜底之前。网站首页、登录和图片服务可能使用不同域名,应逐个验证。
加了代理域名,为什么仍然直连?
把指定域名规则移到宽泛国内分类之前,并确认请求携带域名。如果使用按需解析,较早的私有 IP 规则也可能先命中。重新建立连接后查看出站标签,不要只刷新仍在复用旧连接的标签页。
订阅更新后,自定义分流会被覆盖吗?
普通节点订阅更新与本地路由方案通常分开管理。更新后仍应检查当前路由选择;导入完整配置或恢复备份则可能改变路由内容。保留独立方案和导出副本,能更快确认变化发生在哪一层。
同一段 JSON 能直接粘贴到 Android 客户端吗?
不能把内核片段当作通用界面导入格式。v2rayNG 使用 Xray,v2flyNG 使用 v2fly,相关字段有共通基础,但界面规则编辑方式和内核版本各有差异。先用客户端提供的路由编辑功能建立等价规则,再核对数据文件、标签和实际生效结果。
稳定的分流配置不靠堆积规则。保留少量明确例外,让国内分类与末尾兜底各司其职;每次只调整一处,并记录可复现的测试目标。这样遇到“国内不直连”或“指定服务未走代理”时,可以沿着入口、目标类型、规则顺序和出站四个位置逐层定位。