v2rayN 路由规则怎么写:geosite 与 geoip 境内外分流配置实战

从 domainStrategy 选择讲到 direct、proxy、block 三类规则的排列顺序,手把手写出一套境内直连、境外走代理、广告拦截的分流方案。

本文速览

适合已经导入订阅、节点能够连接,但希望境内网站直连、境外网站走代理的 v2rayN 用户。先分清域名集与 IP 集,再选择域名解析策略,最后按顺序配置规则并用日志验证。本文特别说明“末尾全代理规则”为什么可能让 geoip 回退失效,示例是内核路由片段,不是可以直接导入客户端的完整配置。

一、geosite 与 geoip 分别匹配什么

v2rayN 是客户端界面,实际处理连接的是所选内核。订阅主要提供服务器地址、协议、认证与传输参数;路由决定进入本地内核的连接采用哪个出站。更新订阅不等于更新路由数据库,也不会自动纠正自定义规则的顺序。

geosite 根据域名集合匹配,geoip 根据 IP 地址集合匹配。两者都依赖相应的数据文件,不能只凭名称理解成实时定位服务。尤其是 geosite:cn,它表示数据库维护的域名分类,不是“所有以 .cn 结尾的网站”,更不是对服务器物理位置的保证。

条件匹配对象常见用途需要注意
geosite:cn目标域名数据库收录的境内站点直连分类取决于所用 geosite 数据
geosite:category-ads-all广告相关域名交给 block 出站数据文件须包含该分类
geoip:cn目标 IP中国 IP 范围直连域名连接可能需要先解析
geoip:private私有与本地地址集合内网设备访问以数据集定义为准,不等于所有局域网域名
full:example.com完整域名单个域名的例外规则不会同时匹配其子域名
domain:example.com域名及其子域名同一站点家族统一出站比完整域名规则覆盖更广

这里的 example.com 仅用于说明语法,不是实际应添加的业务规则。检查自己的站点时,应使用浏览器或内核日志中出现的真实主机名。同一个页面可能加载多个域名,首页直连成功,不代表登录接口、图片与视频也会命中相同规则。

二、domainStrategy 怎么选:先域名还是先 IP

routing.domainStrategy 决定路由匹配时是否解析目标域名。它不是 DNS 服务器地址,也不是 direct 出站内部的解析策略。设置名字相似,作用位置却不同:一个为“选择出站”提供 IP,另一个可能为“实际建立直连”解析地址。

IPIfNonMatch

推荐

先按现有目标信息匹配规则。域名阶段没有命中任何规则时,再解析域名并尝试 IP 条件。适合本文的“域名优先、IP 补漏”方案,但必须保留真正的未匹配状态,不能先被全流量规则接走。

适合:域名规则为主,geoip 补充,默认出站已明确的配置

AsIs

路由阶段不额外解析域名。以域名进入的连接主要依靠域名规则;以 IP 进入的连接仍可匹配 IP 规则。它并不意味着整个连接过程都不会使用 DNS。

适合:域名规则覆盖明确,希望避免路由阶段额外查询的配置

IPOnDemand

匹配过程中遇到需要 IP 的规则时解析域名。如果私有地址或国家 IP 规则位于前面,域名连接可能较早触发 DNS 查询。它能让末尾兜底前的 IP 规则参与匹配,但也更依赖解析结果。

适合:需要按目标 IP 判断,且已验证 DNS 行为的配置

最容易忽略的情况是:使用 IPIfNonMatch,同时在末尾添加 network: tcp,udp → proxy。这条规则在第一次匹配时就能接住连接,因此并不存在“完全未匹配”;域名解析回退可能不会触发,前面的 geoip:cn 也就无法为这次域名连接补漏。

三、direct、proxy、block 与规则顺序

内核按规则列表从上往下查找,第一条匹配的规则决定出站。这里的 direct、proxy、block 都是出站标签,不是随便写上就生效的关键字。完整配置必须存在同名出站;自定义配置若使用别的标签,需要同步修改路由引用。

直连与代理出站

直连标签
direct
直连实现
通常使用 freedom 出站
代理标签
proxy
代理目标
当前选中的可用节点
未匹配流量
本文要求第一个出站为 proxy

切换节点会改变代理连接目标,但不应改变这套规则的匹配顺序。

拦截与规则前提

拦截标签
block
拦截实现
通常使用 blackhole 出站
域名数据库
geosite.dat
IP 数据库
geoip.dat
匹配原则
从上到下,首条命中生效

数据文件缺失或分类不存在时,核心可能无法加载配置,应先处理启动日志里的错误。

建议的顺序是:必要的单站例外、广告拦截、内网地址直连、境内域名直连、境内 IP 直连,最后由默认出站代理。例外规则之所以放最前,是为了避免被更宽的分类覆盖;但它也会覆盖后面的广告规则,只应添加确实需要的域名。

优先级规则用途出站放置理由
1单个站点的人工例外direct 或 proxy覆盖后面的广泛分类
2广告域名集合block避免先命中境内直连分类
3私有 IP 与本地网段direct内网连接不应发往远端节点
4境内域名集合direct域名可直接判断时不必等待 IP 回退
5境内 IP 集合direct补充纯 IP 连接与未收录域名
默认没有规则命中的连接proxy使用生成配置中的第一个出站

四、在 v2rayN 中建立一套独立路由

以下菜单入口以 v2rayN 7.x 的 Windows WPF 界面为参照。桌面版及不同小版本的按钮名称可能有差异;找不到同名入口时,先在当前界面的设置菜单中确认路由编辑功能,不要把下面的核心 JSON 粘到节点地址栏或订阅地址栏。配置前,保留原来的路由方案,方便切回。

  1. 确认节点可用

    在主界面选中一个可用节点并设为活动服务器。先用原有路由验证网页能够访问;节点本身超时、认证失败或 TLS 握手失败,应先按故障排查处理,分流规则不能修复远端连接。

  2. 打开路由设置

    进入「设置」→「路由设置」,新建一套路由方案,命名为“境内直连测试”。如果该界面提供高级路由开关,确认高级规则已启用,并选择新建方案作为当前使用的路由。

  3. 选择域名策略

    在路由方案的域名策略项选择 IPIfNonMatch。随后检查是否存在“全部 TCP、UDP 走代理”的末尾规则;本文方案不保留这种规则,而是要求默认出站为 proxy。

  4. 分开添加条件

    依次添加广告域名、私有 IP、境内域名、境内 IP 四条规则。geosite: 写入域名条件,geoip: 写入 IP 条件。不要在同一条规则中同时填写域名条件和 IP 条件来表达“二者任选其一”。

  5. 保存并核对

    保存方案,让内核重新加载配置。核对生成配置中的规则顺序、出站标签与 outbounds 顺序;若默认出站不是 proxy,应按当前版本提供的默认出站设置调整,或者改用前文介绍的显式兜底方案。

  6. 逐项测试

    保持节点、浏览器和代理接入方式不变,分别测试境内域名、境外域名、内网 IP。每次调整后新建连接,避免浏览器沿用旧连接;只有日志出站与预期一致,才算规则生效。

一条 field 规则内,不同类型的条件通常需要同时满足;同一个条件数组中的多个值才表示任一值匹配。将 domain 和 ip 合进同一条规则,不能代替两条独立的直连规则。这是手写配置与图形界面编辑时都容易遇到的错误。

五、核心路由片段:域名优先,IP 补漏

下面只展示 routing 对象。它没有入站、节点凭据、DNS 或出站定义,不是完整配置,也不是 v2rayN 路由方案的导入格式。可以据此在界面中逐条填写;使用自定义核心配置时,则需要与已有配置结构合并,并确认三个出站标签都存在。

{
  "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"
      }
    ]
  }
}

如果有一个境内分类中的站点需要固定走代理,可在广告规则之前加入独立域名例外,并指向 proxy。如果只是某个子域名异常,优先使用 full: 精确匹配,不要立即放宽成整个主域名及其全部子域名。

六、怎么验证分流:检查接入、DNS 与出站

网页能打开只说明某条路径可用,不能证明采用了预期出站。测试时先固定一个节点,再确认应用使用的本地代理端口。v2rayN 常见的本地监听端口是 10808,但已有安装可能被修改,应以当前设置与内核启动日志为准,不要把它当成永远固定的端口。

测试对象预期结果核对内容
已确认在 cn 集中的域名direct日志中的目标域名、出站标签
未命中直连分类的境外域名proxy默认出站是否为代理
192.168.1.1 等实际内网地址direct连接是否进入内核、是否命中私有 IP 规则
日志中实际出现的广告域名block分类是否收录、是否先被例外规则匹配

需要明确保留域名交给 SOCKS 代理时,可使用下面的测试命令。socks5h 中的 h 表示由代理侧处理目标域名解析,避免本地先解析后只向内核提交 IP。命令要求本地端口提供 SOCKS 服务,系统也需要已经具备 curl 工具。

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 https://www.baidu.com/ --output /dev/null

上述输出目标适用于 Linux、macOS 终端;Windows 命令提示符中可将 /dev/null 改为 NUL,需要时使用 curl.exe 调用。这里的 10 秒连接超时和 20 秒总超时只是测试边界,不是实测延迟,也不是速度承诺。对该域名的直连预期仍应以自己的数据文件与日志为准。

七、常见问题:规则不生效与广告误拦截

写了 geoip:cn,境内网站为什么还是走代理?

进入「设置」→「路由设置」,先确认当前方案与域名策略。若使用 IPIfNonMatch,检查末尾是否有 tcp,udp 全代理规则;它可能使首次匹配直接结束。再确认日志中目标是域名还是 IP,以及实际解析地址是否属于当前 geoip 数据中的 cn 分类。

广告规则放最后,怎么一点效果也没有?

把 geosite:category-ads-all → block 移到境内直连和宽泛代理规则之前,保存后重新加载配置并新建浏览器连接。若仍未命中,检查该域名是否在当前分类中。不要仅凭页面还出现广告判断失败,共用内容域名的广告不一定适合域名拦截。

改完路由后核心启动失败,先查哪里?

先切回原来的路由方案恢复连接,再查看核心启动日志。重点找数据文件无法读取、分类不存在、出站标签引用错误与 JSON 语法错误。若提示无法加载 geosite.dat 或指定类别,应修复数据来源和文件位置,而不是继续追加规则。

内网管理页面打不开,要加什么规则?

先用设备的实际 IP 访问,并确认私有 IP 规则指向 direct。若使用自定义内网域名,还要确认本地 DNS 能正确解析该域名;可为实际域名添加精确直连例外。域名路由本身不会自动把一个不存在的 DNS 记录变成可访问地址。

这套规则能直接复制到安卓客户端吗?

v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核;基础路由概念相近,但界面字段、导入格式、数据分类和内核能力需要分别确认。可以迁移“规则条件与顺序”,不要直接把 v2rayN 的客户端备份当作通用配置。迁移后仍需检查默认出站与 DNS。

最后保留一份已经验证的路由方案。后续遇到单站异常时,一次只修改一个变量:先判断是域名分类、IP 分类、DNS 还是节点连接,再添加最小范围的例外。这样能看清变化的原因,也更容易在修改无效时恢复。

下载v2rayN