· 路由分流 · 约 10 分钟

V2Ray 路由规则配置实战:domain 与 ip 规则写法及国内外分流方案

拆解 v2rayN 路由设置中的域名规则、IP 规则与 geosite/geoip 用法,给出绕过大陆、全局代理与自定义直连三种分流场景的配置思路。

本文速览

适合已经导入订阅、节点能够连接,但需要调整国内外分流的用户。先确认流量进入客户端,再区分 domain 与 ip 的匹配对象,最后按“自定义例外、通用分类、默认出口”的顺序设置规则。本文提供 V2Ray/Xray 格式的路由片段、v2rayN 操作步骤和验证方法;代码中的出口标签必须与当前配置对应,不能直接当作完整客户端配置导入。

路由前提:流量必须先进入内核

路由规则负责选择出口,不负责让所有应用自动进入代理。浏览器遵循系统代理时,请求才会送到本地代理端口;忽略系统代理的程序通常需要单独配置代理,或使用 TUN 接管。开启 TUN 也不等于全局代理:流量进入内核以后,仍然可以根据路由规则直连。

v2rayN 是桌面客户端,路由最终由当前运行的内核执行。本文 JSON 采用 V2Ray/Xray 路由格式,适用于对应内核配置,不是所有内核通用的配置语法。Android 上的 v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核;两者的界面入口、内置规则和资源更新方式并不完全相同。

10808
本文测试用本地代理端口,须按实际监听值替换
53
传统 DNS 常用端口,不代表全部域名解析流量

domain 与 ip:匹配对象和写法

domain 匹配请求中的目标域名,ip 匹配目标 IP 或按策略解析得到的 IP。域名规则不是完整网址过滤器:不要把 https://、网页路径或查询参数填进去。访问同一域名的不同路径,通常不会因此走不同出口。

写法实际含义适用场景
full:example.com仅匹配 example.com 本身只为一个主机名设置例外
domain:example.com匹配根域名及其子域名让同一域名下的服务走相同出口
example普通字符串按关键词匹配域名范围较宽,容易误匹配,谨慎使用
geosite:cn引用域名资源中的 cn 分类按维护好的域名集合分流
192.168.0.0/16匹配指定 IPv4 网段局域网地址直连
geoip:cn引用 IP 资源中的 cn 分类按目标 IP 所属地址集合分流

例如 domain:example.com 可以匹配 api.example.com,但不会把 notexample.com 当成其子域名。需要精确控制时,优先使用 full: 或 domain:,不要用过短的关键词替代域名边界判断。

域名例外规则

规则字段
domain
匹配内容
domain:example.com
目标出口
direct
建议位置
通用分类之前

适合明确知道域名的业务;示例域名仅用于说明格式。

局域网 IP 规则

规则字段
ip
匹配内容
geoip:private
目标出口
direct
检查重点
IPv4 与 IPv6 地址范围

确认资源文件提供该分类;也可按实际网络填写明确的 CIDR 网段。

规则顺序:第一条命中即决定出口

规则按列表从上向下检查,命中后不会继续寻找“更精确”的后续规则。把范围很大的规则放在最前面,后面的自定义例外可能永远不会执行。同一个字段数组中的多个值通常是“或”的关系;同一条规则中同时填写 domain、ip、port 等不同条件,则需要满足这些条件的组合。

核心配置未命中任何规则时,一般使用 outbounds 数组中的第一个出站。下面通过末尾的 TCP/UDP 规则明确兜底到代理,避免把“未命中”误认为一定直连。此片段只有 routing 部分;direct、proxy 必须是当前完整配置里已经存在的出站标签。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "domain": ["domain:example.com"],
        "outboundTag": "direct"
      },
      {
        "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"
      }
    ]
  }
}

geosite、geoip 与 DNS 策略

geosite 是域名集合,geoip 是 IP 地址集合,两者不是实时查询服务。引用了不存在的分类,或者资源文件缺失、格式不兼容,可能导致内核加载失败。更新订阅只代表重新获取节点,并不保证路由资源也同步更新。

domainStrategy 决定路由阶段如何对待域名解析,不等于完整的 DNS 服务器设置。设置为 IPIfNonMatch 时,只有域名阶段没有匹配成功,才可能解析 IP 后再次匹配;如果最后一条通配规则已经命中,就不满足“未匹配”的条件。

策略路由行为使用提醒
AsIs路由阶段不主动为域名解析 IP域名请求主要依赖 domain 规则,IP 字段仍可匹配直接访问的 IP
IPIfNonMatch域名未匹配时尝试解析并重新匹配末尾通配规则会提前命中,不能指望此时再进入 IP 回退
IPOnDemand匹配过程遇到需要 IP 的规则时尝试解析规则顺序会影响何时触发解析,需同时检查 DNS 可用性

上节配置中的 geoip:cn 能处理直接以 IP 为目标的连接,但在末尾通配规则存在时,不能保证对所有未分类域名做 IP 回退。如果希望未命中的域名也按解析后的 IP 分类,可考虑使用 IPOnDemand,并将需要优先决定的域名规则放在 IP 规则前;另一种做法是移除通配兜底,并确认第一个出站确实是代理。

三种方案:绕过大陆、全局代理、自定义直连

“绕过大陆”通常指局域网及国内目标直连,其余目标通过代理;“全局代理”指进入内核的流量统一走代理出口。它们都不能保证应用流量已经被接管。公司内网、打印机和家庭存储等需求,应单独检查,避免切换方案后失去访问。

方案规则安排验证重点
绕过大陆自定义例外 → 局域网直连 → 国内域名/IP 直连 → 代理兜底国内业务走 direct,其他测试目标走 proxy
全局代理按需保留局域网例外,其余 TCP/UDP 指向 proxy是否仍有先命中的直连规则,以及应用是否进入内核
自定义直连把指定 full/domain 规则置顶,再保留原有分流主域名、登录域名和资源域名是否需要分别处理

要让一个业务站点直连,不一定只加一个主域名就够。登录、接口和静态文件可能属于不同域名。先从日志确认实际请求,再逐个添加必要域名,不要为省事把共享 CDN 的整个地址范围设为直连,那样可能影响其他无关网站。

  1. 保存当前方案

    先记录当前路由名称并备份规则。确认节点可用,保留一份未修改的配置,方便失败后恢复。

  2. 打开路由设置

    在提供此入口的 v2rayN 桌面界面中,进入「设置」→「路由设置」。不同界面可能把入口放在主界面的「路由」菜单,需以当前安装包显示名称为准。

  3. 编辑目标规则

    选中要使用的路由方案,打开规则编辑窗口。新增 domain 条目,例如 domain:example.com,出口选择直连;若界面将前缀和内容分成两栏,应分别选择类型与填写域名。

  4. 调整规则位置

    将例外规则移动到国内分类及兜底规则之前。域名规则和 IP 规则分开添加,保存后在主界面的「路由」选择器中启用该方案。

  5. 重建连接验证

    等待配置重新加载,必要时重启内核。关闭原有网页连接后重新访问,查看新连接日志中的目标和出口;不要用已经建立的长连接判断新规则是否生效。

验证分流:端口、日志和出口交叉检查

网页能打开只能说明某条路径可用,不能证明走了预期出口。建议选一个应直连的目标、一个应代理的目标,再加一个局域网地址分别测试。查看日志时关注目标域名或 IP、所选出站标签和错误信息;日志级别过低时,可以临时提高,测试结束后再恢复。

下面的命令强制请求进入本地 HTTP 代理,示例假设该 HTTP 或混合入站监听 127.0.0.1:10808。先在客户端确认实际协议和端口;若该端口只有 SOCKS 服务,不能照搬 HTTP 代理参数。命令仅演示请求方式,不代表目标网站必须采用某种分流策略。

curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/

路由规则常见问题

加了 domain 规则,为什么还是走代理?

先确认规则填的是域名,不含协议和路径;再把规则移动到通用规则之前,确认当前方案已启用。若日志只显示目标 IP,检查应用是否在进入内核前完成解析,以及当前入站能否提供目标域名。

geosite:cn 和 geoip:cn 必须同时添加吗?

不属于语法上的强制要求,但两者覆盖的输入不同:前者适合已知域名,后者适合目标 IP 或解析后的地址。需要联合覆盖时分成两条规则,并核对 domainStrategy,不能认为加上分类名就一定触发解析。

更新订阅后,自定义直连规则会消失吗?

节点订阅与客户端路由配置通常分开管理,但完整配置导入、恢复设置或覆盖路由方案可能改动规则。先备份自定义方案,并避免直接编辑运行时生成的临时配置文件。

Android 能直接复制桌面规则吗?

可以复用域名、CIDR 和规则优先级的思路,但不能直接复制整份桌面配置。v2rayNG 与 v2flyNG 的资源文件、出站标签和自定义规则入口需要分别核对;保存后重新建立连接,再按日志验证实际出口。

客户端下载按平台选择安装包