V2Ray 路由规则实战:geosite 与 geoip 国内外分流配置示例

用 geosite、geoip 与域名规则搭一套国内直连、国外走代理的分流方案,解释规则匹配顺序,并给出可直接对照的配置片段。

本文速览

先区分域名集合、IP 地址集合与出站标签,再按“指定例外、国内域名、国内及私有地址、其余代理”的顺序组织规则。本文适合已经导入节点、希望调整 v2rayN 分流的用户;示例采用 V2Ray/Xray 的传统路由字段,并说明 DNS、规则库与客户端生成配置之间的边界。

区分 geosite、geoip 与代理出站

路由分流处理的是“这条连接交给哪个出站”,不是“应该使用哪一种节点协议”。VMess、VLESS 等协议属于代理出站的连接方式;geosite:cn 与 geoip:cn 则是匹配条件。即使订阅中的节点协议换了,只要实际出站标签保持一致,路由规则也不必跟着更换。

写法匹配对象不能据此推断的事
geosite:cn当前规则库中 cn 分类收录的域名不是所有中文网页,也不等于所有国内 IP
geoip:cn当前规则库中归入 CN 的 IP 网段不能据此确定网站运营方所在地或访问质量
geoip:private规则库定义的私有及特殊用途地址集合不是操作系统全部局域网路由的替代品
outboundTag现有出站的 tag 字符串写上 proxy 不会自动创建代理节点

传统配置通常从 geosite.dat 与 geoip.dat 读取集合。这里的“cn”是数据分类名,不是内核在线查询得到的地理结论。规则库来源、发布日期与分类维护方式都会影响结果;一个刚启用的域名没有进入集合时,应先加精确例外,再考虑更新数据。

按匹配顺序安排国内直连与代理兜底

路由规则一般按数组顺序从上到下检查,遇到第一个完整匹配的规则就选定出站,不会自动寻找“更精确”的下一条。单条规则同时填写 domain、ip、port 等不同条件时,通常要求这些字段共同满足;同一个 domain 列表内的多个条目则是任选其一匹配。

选择方案:国内直连,其余代理

域名优先层
  • 先写需要强制代理或直连的精确例外。
  • 再用 geosite:cn 匹配国内域名集合。
  • 已命中域名规则的连接不再检查后续 IP 规则。
IP 与兜底层
  • 通过 geoip:private 处理私有地址。
  • 通过 geoip:cn 处理国内 IP。
  • 最后将剩余 TCP、UDP 连接交给代理出站。

精确例外必须放在宽泛集合之前;代理兜底放在最后,并与域名解析策略配套。

例如,某个域名既在 cn 集合里,又需要走代理,应把它的代理规则放在 geosite:cn 前面。只在底部追加代理规则没有作用,因为前面的直连规则已经结束匹配。反过来,把“所有 TCP、UDP 都代理”放到第一条,也会让后面的国内分流失去机会。

对照 JSON 配置与 domainStrategy

下面是一个路由片段,不是包含节点、入站与 DNS 的完整配置。它假定已有标签为 proxy 的可用代理出站,以及标签为 direct、协议为 freedom 的直连出站。示例域名 example.com 仅用于演示精确例外;不需要这条例外时,删除第一条规则即可。

{
  "routing": {
    "domainStrategy": "IPOnDemand",
    "rules": [
      {
        "type": "field",
        "domain": ["full:example.com"],
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["geoip:private", "geoip:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

这里有意选用 IPOnDemand:域名没有命中前两条规则时,检查到 IP 规则便尝试解析域名,再用解析结果匹配国内或私有地址。已经命中 cn 域名集合的连接直接选定直连,不需要为了后续路由规则额外解析。若请求本来就是 IP 地址,则直接进入地址匹配。

本文配置

解析策略
IPOnDemand
国内域名
geosite:cn → direct
国内及私有 IP
geoip:cn / private → direct
最终兜底
tcp,udp → proxy

执行到 IP 条件时按需解析,适合本文的显式兜底结构;解析失败或结果不准确仍会影响判断。

另一种写法

解析策略
IPIfNonMatch
解析时机
域名未匹配任何规则后
宽泛兜底
避免提前匹配全部连接
未命中行为
通常交给配置中的第一个出站

需要同时检查出站顺序。不能只把本文策略名改掉,就认为行为仍然相同。

AsIs 则不为路由判断主动把域名解析成 IP。它适合主要依赖域名规则的设计,但不能期待一个只有域名的请求自动命中 geoip:cn。此外,路由用的 domainStrategy 与直连出站中的同名设置各司其职:前者决定如何匹配,后者影响连接目的地址的处理,不能相互替代。

在 v2rayN 中保存规则并验证生效

以下以提供“设置”与“路由设置”入口的 v2rayN 中文桌面界面为操作基准。不同版本的弹窗布局、规则编辑按钮文字可能不同;先确认当前启用的是哪套路由配置,再改规则内容。本文片段按 V2Ray/Xray 的 JSON 结构编写,不要粘贴到不接受 JSON 的单行域名输入框。

  1. 保留原配置

    打开「设置」→「路由设置」,记录当前启用的路由项,并保留原始内容。能够新增路由项时优先新建一份测试配置,避免覆盖已经可用的规则。

  2. 核对出站

    确认当前节点能够连接,并核对客户端规则所使用的直连、代理出站标识。示例中的 proxy、direct 必须对应实际生成配置的标签,不能用节点显示名称替代。

  3. 依次录入

    在「设置」→「路由设置」中编辑目标路由项,按示例顺序填写 domain、ip、network 与目标出站。将域名解析策略设为 IPOnDemand,不要把所有条件合并成一条规则。

  4. 应用并重连

    保存并启用该路由项,重新启动核心或按界面提示应用配置。确认当前不是强制全部代理或全部直连的覆盖模式,再新建连接测试;已有长连接不一定立即换路。

  5. 查看日志

    打开客户端日志,分别访问国内域名、其他域名和局域网地址。若访问日志可用,检查目的地址及选中的出站标签;出现规则库加载失败或找不到出站时,先修正配置再继续测试。

客户端往往会根据界面设置重新生成核心配置。直接修改临时生成文件,下一次切换节点或重启后可能被覆盖。因此,长期使用的规则应存放在客户端支持的路由配置入口;只有明确使用完整自定义配置时,才自行维护整份 JSON。

在 Android 端,v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核。不能因为规则字段相似,就假定两者的界面入口、内置规则库和自定义配置导入方式完全一致。迁移规则时,先对照当前核心与客户端提供的配置能力,订阅地址也不应被当作路由规则导入。

用端口、日志和 DNS 逐项检查分流

判断是否生效,应看连接是否进入核心、命中了哪个出站,而不是只比较网页打开速度。一次 DNS 缓存命中、复用连接或远端内容缓存,都可能让速度看起来变化很大,却不能证明路由选择正确。下面三个数字是测试输入,不是本站实测结果,也不是所有客户端的默认值。

10808
下方命令假定的本地 SOCKS 端口
443
HTTPS 测试目标端口
192.168.1.1
仅在实际网关相同时用于私网测试

先到「设置」→「参数设置」核对本地监听端口与 SOCKS 支持情况。若本地 SOCKS 确实监听 127.0.0.1:10808,可在终端执行下面的命令;Windows 可明确调用 curl.exe。socks5h 会把目标域名交给代理端处理,适合检查域名规则;socks5 通常在本地解析,送到核心的可能已经是 IP。

curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://www.baidu.com/
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://example.com/

如果应用只把 IP 交给核心,域名规则可能根本没有可匹配的域名。嗅探在某些协议和连接中可以补充域名信息,但并不保证识别全部流量,也可能改变匹配结果。排错时先记录实际目标形式,再决定是否调整嗅探,避免同时更改 DNS、嗅探与路由后无法定位原因。

处理国内网站走代理与规则不生效

加了 geosite:cn,国内网站还是走代理?

先在「设置」→「路由设置」确认该路由项已启用,再检查前面是否存在全部代理规则。若日志显示域名未被集合收录,可临时添加 domain: 例外并放在兜底之前;若收到的是 IP,则转查 geoip 与 DNS,而不是继续追加域名。

提示 geosite 或 geoip 加载失败怎么办?

检查错误中指向的规则库名称、分类名与路径。使用客户端提供的数据更新入口恢复相应文件,再重启核心;不要把其他格式的规则文件改名为 .dat。自定义数据源还应确认它确实提供 cn 与 private 等所需分类。

换了 IPIfNonMatch,国内 IP 规则反而不命中?

检查末尾是否还有 network: tcp,udp 这样的全覆盖规则。域名先命中它后,不会触发“未匹配再解析”。恢复本文的 IPOnDemand 结构,或重新设计不含提前兜底的规则并核对第一个出站。

局域网访问失败,是不是加 private 就够了?

先确认实际地址,例如网关是否确为 192.168.1.1。若请求已进入核心,检查私有地址是否命中 direct;若被 TUN 排除、操作系统路由或防火墙拦截,核心路由无法单独解决。直连也只代表选择本机出口,不代表目标一定可达。

更新订阅后,分流为什么没有跟着更新?

普通节点订阅主要更新节点连接参数,不等于同步路由规则库或本地路由配置。分别检查订阅更新、geo 数据更新与当前路由项三个位置。每次只改一项,并用同一组测试域名复查日志,才能判断变化来自哪里。

维护时保留一份简短的例外清单,写清域名、期望出站与添加原因。优先修正过宽规则和排序,再考虑堆叠更多分类。国内直连、其余代理是一套可解释的默认方案,不是所有网络环境下的唯一选择;最终应以实际访问需求、解析结果与核心日志共同确认。

下载 V2Ray 客户端