V2Ray 路由规则配置实战:用 geosite 与 geoip 做境内外分流

以常见分流需求为例演示路由规则写法:境内域名与 IP 直连、其余流量走代理、广告域名拦截,讲清规则匹配顺序与出站标签的对应关系,并给验证分流是否生效的方法。

本文速览

本文面向已经能够正常连接节点、准备调整路由策略的用户。最终配置会按“广告拦截、局域网直连、境内域名直连、境内 IP 直连、其余代理”的顺序处理流量,并通过核心日志、指定代理端口与域名解析结果逐项验证。

先确定分流目标与匹配链路

分流要点

路由分流不负责建立 VLESS、VMess 等代理连接,它只在请求进入核心后决定应使用哪个出站。节点的地址、端口、传输层与认证参数仍属于代理出站配置;路由规则只引用已经存在的出站标签。把这两层混在一起,是“节点能连接但规则不生效”最常见的原因之一。

分流要点

本例采用三个出站标签:proxy 对应当前代理节点,direct 对应 freedom 直连出站,block 对应 blackhole 拦截出站。标签区分大小写,规则中的 outboundTag 必须与出站里的 tag 完全一致。

应用发起请求本地入口接收域名规则匹配IP 规则匹配选择出站

分流要点

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:cngeosite: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 中,订阅导入会生成完整代理出站;手动维护路由时应引用客户端生成的代理标签,而不是删除服务器信息后照抄空数组。

  1. 先放置需要明确拦截或覆盖的规则,例如广告域名与自定义域名。
  2. 再放置 geoip:private,确保 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 等私有地址保持直连。
  3. 随后依次放置 geosite:cngeoip:cn,分别处理境内域名和境内地址。
  4. 最后用 network: tcp,udp 发送到 proxy,承担未命中请求的兜底。

在 v2rayN 中落地配置

分流要点

以 v2rayN 7.10.x 的界面组织为例,先在「设置」→「参数设置」中核对本地监听端口和日志级别。常见配置会使用 SOCKS 端口 10808、HTTP 端口 10809,但升级或迁移后的实际端口可能不同,验证命令必须使用当前界面显示的数值。

分流要点

路由入口通常位于「设置」→「路由设置」。新建规则集后,依次添加广告域名、私有 IP、境内域名、境内 IP 和最终代理规则,再将该规则集设为当前规则。不同 7.x 小版本的按钮位置可能调整,但规则名称、顺序和出站标签的核对方法不变。

分流要点

订阅更新可能重新生成节点,但通常不会替用户修正自定义路由。更新订阅后,应确认当前活动规则集没有切回默认方案,并检查所选节点仍对应可用的代理出站。修改完成后需要重启核心,仅保存规则而不重载核心不会改变正在运行的路由状态。

验证境内外分流是否真正生效

分流要点

“网页能够打开”只能证明连接链路基本可用,不能证明流量走了预期出站。验证时要同时观察请求目标、核心日志中的规则命中结果和最终出站标签。建议先把日志级别临时调到 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 核心日志中显示的目标域名、目标端口以及对应的 directproxyblock 出站。

境内站点仍然走代理怎么办?

分流要点

先确认 geosite:cn 位于最终代理规则之前,再检查日志里是否保留了目标域名。若入口只提供目标 IP,则继续核对 domainStrategygeoip: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。每增加一条覆盖规则,都应记录用途,避免数月后只剩下无法解释的例外列表。

结论:分流故障先查顺序,再查标签,最后查数据

多数问题可以沿着三步定位:确认请求是否被前置规则提前截获,确认命中的 outboundTag 是否存在,确认 geosite 与 geoip 集合是否成功加载。只有三项都正常后,才需要继续检查 DNS 与节点传输层。

获取 V2Ray 客户端 按 Windows、macOS、Android、Linux 选择