V2Ray 分流规则实战:国内网站直连、海外流量走代理的路由配置

以 v2rayN 自定义路由为例,逐条拆解 domain、ip、outboundTag 字段,演示直连、代理、拦截三类规则的排序与常见写法。

本文速览

适合已经导入节点、能够连接,但希望调整国内直连与海外代理范围的用户。先区分流量接管和内核路由,再在 v2rayN 中建立独立路由方案。正文给出 V2Ray/Xray 风格的 JSON 片段、规则顺序及验证方法;示例不是完整客户端配置,应用前需要确认实际出站标签。

1. 系统代理与路由分流的边界

系统代理决定应用是否把连接交给 v2rayN 的本地入口;路由分流决定内核接到连接后,选择直连、代理还是拦截。两者不在同一层。仅开启系统代理,不代表所有应用都会使用它;终端、自带网络栈的程序或设置了代理例外的浏览器,可能绕过这个入口。

应用请求 本地入口 规则匹配 出站选择 目标服务

本文先以系统代理接管浏览器为验证环境,不同时调整 TUN。VMess、VLESS 等协议属于代理出站的连接方式,并不决定某个国内域名是否直连。订阅负责提供节点信息,也不能代替当前选中的本地路由方案。

10808
本文测试本地入口端口,需核对实际设置
3 类
直连、代理、拦截出站用途
1 条
首个匹配规则决定本次路由

10808 是下文命令使用的示例端口,不是对所有安装环境的默认值承诺。先在「设置」→「参数设置」中查看本地监听端口及入口类型;只有该端口实际接受 HTTP 代理请求时,才能直接使用文中的 HTTP 代理测试命令。

2. 在 v2rayN 中建立独立路由方案

先备份现有路由,再新增用于测试的方案。v2rayN 的界面会随版本及桌面界面类型变化,下面使用常见中文菜单名称;不要把路由规则 JSON 粘贴到订阅地址输入框,也不要直接覆盖正在运行的临时生成文件。

  1. 打开「设置」→「路由设置」,记录当前启用方案,并通过该界面提供的导出功能保存副本。若当前版本没有导出入口,先复制现有规则内容留存。
  2. 在路由设置中新建或复制一个方案,命名为“国内直连测试”。通过规则列表的添加、编辑和排序操作建立规则,不修改原方案。
  3. 核对 geoip.dat 与 geosite.dat 是否可用。若日志提示加载失败或找不到标签,先处理规则文件,再测试路由。
  4. 保存后,在主窗口的路由选择项中切换到新方案,确认核心成功重启或配置重新加载。只编辑但没有选中方案,不会改变当前连接。
  5. 出现异常时切回原方案,并重新建立测试连接。不要在同一轮排查中同时更换节点、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 出站;代理标签则指向所选节点的实际出站。不要为填满示例而新建不完整的节点对象。

结论:按域名与 IP 分类分流,指定服务应单独设规则

境外站点如果使用国内 CDN 地址,仍可能命中 geoip:cn 而直连。需要固定走代理的服务,应添加明确的域名规则,并放在国内分类之前,而不是依靠“海外网站”这个自然语言标签。

5. domainStrategy 与 DNS 的实际影响

域名规则要生效,内核首先需要拿到目标域名。应用若只交付一个 IP,geosite 无法凭空还原站点名称。嗅探可以在部分连接中补充域名信息,但并非所有协议和连接都能提供可识别的域名,不能把它当作绝对保证。

策略路由行为排查重点
AsIs不为路由匹配额外解析域名域名目标通常不能靠 geoip 规则完成分类
IPIfNonMatch域名阶段未匹配时,再解析并尝试 IP 条件宽泛兜底若已命中,通常不会触发这次解析
IPOnDemand匹配过程遇到需要 IP 的规则时尝试解析较早的 IP 规则可能在域名例外之前决定出站

上一节保留了明确的代理兜底,因此在 IPIfNonMatch 下,一个尚未解析、也未命中国内域名集合的域名,可能直接命中末尾代理规则,而不会再按 geoip:cn 补判。该示例的国内 IP 规则主要覆盖已经以 IP 形式交给内核的目标。若业务要求对未分类域名也做 IP 地域判断,需要重新设计兜底和解析策略,不能只更改一个开关。

6. 用新连接和日志验证分流

网页能打开,只能证明某条访问路径可用,不能证明它走了预期出站。连接复用还可能保留修改前的路径。每次保存并应用方案后,关闭旧测试连接,再发起请求;必要时暂时将日志级别调整为 info,完成后恢复原值。

  1. 在 v2rayN 的日志区域确认核心启动成功。先排除规则文件缺失、JSON 语法错误和出站标签不存在等问题。
  2. 检查浏览器确实使用本地入口,并暂时停用会覆盖系统代理设置的扩展。不要同时用浏览器缓存页和其他接管方式判断规则。
  3. 分别测试国内域名、未分类域名和可访问的局域网地址。记录目标、时间和期望出站,再在相同时间段日志中查找路由结果。
  4. 若当前版本的常规日志不显示规则细节,可短时启用更详细日志;避免长时间保留含完整访问目标的日志,分享前先移除敏感信息。
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 请求,也不应直接据此认定路由错误。

7. 自定义路由常见问题

国内网站还是走代理,先改哪一项?

先在主窗口确认选中了刚编辑的路由方案,再检查 geosite:cn 是否加载成功。对日志里看到的真实业务域名添加一条 domain: 直连规则,放在兜底之前。网站首页、登录和图片服务可能使用不同域名,应逐个验证。

加了代理域名,为什么仍然直连?

把指定域名规则移到宽泛国内分类之前,并确认请求携带域名。如果使用按需解析,较早的私有 IP 规则也可能先命中。重新建立连接后查看出站标签,不要只刷新仍在复用旧连接的标签页。

订阅更新后,自定义分流会被覆盖吗?

普通节点订阅更新与本地路由方案通常分开管理。更新后仍应检查当前路由选择;导入完整配置或恢复备份则可能改变路由内容。保留独立方案和导出副本,能更快确认变化发生在哪一层。

同一段 JSON 能直接粘贴到 Android 客户端吗?

不能把内核片段当作通用界面导入格式。v2rayNG 使用 Xray,v2flyNG 使用 v2fly,相关字段有共通基础,但界面规则编辑方式和内核版本各有差异。先用客户端提供的路由编辑功能建立等价规则,再核对数据文件、标签和实际生效结果。

稳定的分流配置不靠堆积规则。保留少量明确例外,让国内分类与末尾兜底各司其职;每次只调整一处,并记录可复现的测试目标。这样遇到“国内不直连”或“指定服务未走代理”时,可以沿着入口、目标类型、规则顺序和出站四个位置逐层定位。

下载v2rayN桌面与 Android 客户端