本文面向已经导入节点、希望配置按域名与 IP 分流的用户。先区分域名集合、地址集合和默认出站,再用一段路由配置说明规则顺序,最后在 v2rayN 中应用并用日志验证。示例采用 Xray/V2Fly 常见的 field 路由写法,不把订阅节点参数、客户端菜单和内核配置混成同一层设置。
一、geosite 与 geoip 分别匹配什么
路由分流不是修改节点协议,而是为每条进入内核的连接选择出站。VMess、VLESS 等决定代理连接如何建立;路由规则决定当前目标应该交给代理、直连还是其他已定义的出站。订阅里有一个可用节点,不代表已经具备合适的分流策略。
geosite:cn 引用域名数据文件中的 cn 分类,geoip:cn 引用 IP 数据文件中的中国地址集合。前者判断域名是否属于列表,后者判断目标 IP 是否落入地址段。这些规则只依据数据列表匹配,不分析页面使用的语种,也不保证每个境内服务、跨国站点和 CDN 地址都符合使用者预期。
域名规则
- 字段
domain- 集合示例
geosite:cn- 完整域名
full:example.com- 域名及子域
domain:example.com
需要内核拿到域名;连接只有目标 IP 时,不能直接依靠域名集合判断。
地址规则
- 字段
ip- 集合示例
geoip:cn- 私有地址
geoip:private- 网段示例
192.168.0.0/16
适合直接以 IP 发起的连接,或在路由阶段解析域名后进行地址判断。
写域名时建议明确使用 full: 或 domain:。普通字符串按子串匹配时,可能命中名字相似但并非同一组织的站点;而 domain:example.com 匹配该域及其子域,不会把 notexample.com 当作子域。本文出现的 example.com 仅供语法演示,不是连通性测试服务。
二、规则顺序:自定义例外放在集合前
常规 field 规则按数组顺序检查,先匹配的规则决定出站,不会自动挑选“看起来更具体”的一条。同一条规则中同时设置 domain 和 port,通常要求两个字段都满足;同一个 domain 数组内的多个项目则是任选其一命中。需要“某域名或某 IP”时,应拆成两条规则。
- 先放必要例外:例如必须经代理访问的业务域名,避免它被后面的直连集合提前接走。
- 再放域名集合:已识别的国内域名直接走直连,减少为路由额外解析的机会。
- 接着检查地址:把私有地址和国内 IP 送往直连出站,覆盖按 IP 访问的目标。
- 最后处理未命中连接:本例依赖第一个出站作为默认出口,而不是额外添加无条件规则。
另一个常见误解是“国内直连、海外代理”能准确识别每家公司的归属。实际策略只是列表判断和默认出口的组合:国内集合以外的连接默认代理,不等于这些目标都已经被证明位于境外。跨区域部署、企业内网域名和需要固定出口的服务,应通过明确的例外规则处理。
三、domainStrategy 三种取值怎么选
routing.domainStrategy 控制路由匹配时如何使用 DNS 解析结果,不负责直接决定浏览器使用哪个 DNS 服务,也不同于直连出站自身的域名解析策略。排查时必须先确认修改的是哪个配置对象,不能只凭字段名字相同就认为作用一致。
| 取值 | 路由阶段行为 | 选用条件 |
|---|---|---|
AsIs | 不为路由额外解析域名;目标本来就是 IP 时仍可匹配 IP 规则。 | 以域名规则为主,不需要解析域名补充地址判断。 |
IPIfNonMatch | 首次检查未找到匹配规则时,再尝试解析域名并进行路由判断。 | 先按域名分类,未命中时再用国内 IP 集合补充。 |
IPOnDemand | 检查到需要目标 IP 的规则时,按需尝试解析域名。 | 希望较早执行 IP 判断,并接受相应的 DNS 依赖。 |
本例选择 IPIfNonMatch。已经命中 geosite:cn 的域名直接选直连;未知域名首次未命中时,才有机会通过解析结果匹配 geoip:cn。如果 DNS 查询失败、返回的地址不属于目标集合,或一条更早的规则已经命中,结果都可能不同。
启用 IPOnDemand 时尤其要注意规则顺序:若前面的 IP 规则已根据解析结果命中,后面的域名例外就不会再被检查。把自定义域名例外置顶,通常比事后不断补地址段更容易维护。
四、路由配置示例:国内直连,其余默认代理
下面只展示顶层 routing 对象,不能作为完整客户端配置直接运行。它要求同一份完整配置的 outbounds 已经定义标签为 proxy 的代理出站与标签为 direct 的直连出站,并且第一个出站是 proxy。节点地址、认证信息和入站配置由现有客户端配置提供。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": [
"full:example.com",
"domain:example.net"
],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": [
"geosite:cn"
],
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"geoip:private",
"geoip:cn"
],
"outboundTag": "direct"
}
]
}
}
- 第 1 条:精确域名与域名后缀例外优先走代理;实际使用时应按业务需要删除或修改这些演示条目。
- 第 2 条:命中国内域名集合的连接走直连。
- 第 3 条:目标属于私有地址或国内 IP 集合时走直连。
- 默认出口:仍未命中规则的连接交给第一个出站,因此必须检查最终生成配置中的出站顺序。
使用这种传统数据格式时,内核还需要能读取对应的 geosite.dat 与 geoip.dat。文件缺失、路径不正确或分类名不存在,可能在加载配置时就报错。更新规则数据后要重新加载内核;更换数据来源之前,也要核对使用的分类是否仍然存在。
五、在 v2rayN 中应用并验证
v2rayN 的普通节点模式通常会生成内核配置,因此直接编辑临时生成的 JSON 可能在下次重启时被覆盖。优先通过路由设置维护规则;需要完整自定义配置时,再使用对应的自定义配置入口。不同桌面界面的按钮位置可能变化,下列步骤以包含「设置」→「路由设置」入口的界面为参照。
-
备份当前规则
打开「设置」→「路由设置」,保留现有规则副本,记录当前选中的路由方案。先不要删除原方案,以便测试失败后切回。
-
整理规则顺序
在路由设置中编辑测试方案,依次放入域名例外、国内域名与 IP 规则。界面规则编辑器应填写对应字段,不要把整段顶层 JSON 粘进单个域名输入框。
-
核对解析策略
将该方案的域名策略设为
IPIfNonMatch,核对规则的出站选择。若界面不暴露相关字段,检查生成配置,不要凭路由方案名称推断实际取值。 -
选中并重载
保存后选中刚编辑的路由方案,再重载内核。只在编辑窗口点击保存,并不一定会切换当前使用的方案;以实际加载的配置与日志为准。
-
逐项测出口
分别访问应直连、应代理和局域网目标,记录日志中的目标及出站标签。测试前关闭旧连接;已有长连接不会因为规则变化自动重新选择出站。
验证前还要证明流量确实进入了内核。若应用不读取系统代理,路由写得再完整也无法接管它。以下数字是测试配置示例,不代表所有安装的默认值;应先在当前客户端确认监听端口,再执行命令。
curl --proxy socks5h://127.0.0.1:10808 --head https://example.com/
这里的 socks5h 表示把目标域名交给代理端处理,有助于测试域名规则;改成由本地先解析的访问方式,内核可能只看到 IP,结果不能直接比较。该命令中的域名恰好命中本例第一条规则,应观察代理出站标签,而不是用页面能否打开代替分流验证。
六、系统代理与 TUN:按接管方式调整判断
同一套路由在不同接管方式下可能表现不同,关键不是节点变了,而是内核拿到的目标信息变了。系统代理下,应用可能直接提交域名;TUN 接管时,连接通常先表现为 IP 数据包,能否恢复域名还取决于 DNS 接管、嗅探等设置。
按目标信息选择验证方法
系统代理场景
- 确认浏览器或应用读取了代理设置。
- 用显式 SOCKS 代理测试,减少系统设置干扰。
- 先检查域名规则,再核对未命中的地址判断。
TUN 接管场景
- 确认实际负责接管的内核和配置格式。
- 查看日志记录的是域名还是纯 IP。
- 检查 DNS 接管与局域网访问,再调整规则。
先确认流量进入哪个内核,再选择对应规则格式;不能把本文 JSON 直接套到所有 TUN 配置上。
桌面端 v2rayN、安卓端 v2rayNG 与 v2flyNG 可以围绕相同的分流目标配置,但不能假定菜单、标签和导入格式完全一致。v2rayNG 侧重 Xray 内核,v2flyNG 使用 V2Fly 内核;迁移时应核对当前内核支持的字段与数据格式,节点订阅也不一定包含客户端的路由设置。
七、常见误配:按日志逐层缩小范围
加了 geosite:cn,国内网站怎么还走代理?
先看日志目标是否为域名,再检查该域名是否真的属于当前数据文件的 cn 分类。如果只有 IP,应核对 geoip:cn 与解析策略。业务域名不在集合中时,可添加明确的 domain: 直连规则,不要直接把所有未知目标改成直连。
设置 IPIfNonMatch 后,geoip 还是没有作用?
检查是否有 port: "0-65535" 等通配规则提前命中。去掉测试方案中的兜底规则,确认第一个出站为代理,再用一个未命中域名规则的目标测试。还应检查路由所用 DNS 是否能成功返回地址。
保存规则后所有连接都失败了怎么办?
先切回备份方案,随后查看内核启动日志。若提示读取数据文件失败,修正文件路径或更新对应数据;若提示出站标签相关错误,逐字核对 outboundTag。配置加载失败时,不应先更换订阅或节点。
同一个网站有时直连、有时代理,怎么定位?
分别记录主域名、静态资源域名及目标 IP,检查是否使用了不同地址族或 CDN 地址。关闭旧连接后复测;如果域名与 IP 入口得到不同结果,先统一测试入口,再判断是否需要补充域名例外。
排查时每次只改一个变量:先确认接管,再确认配置加载,然后确认规则命中,最后检查 DNS 与实际连接。临时提高日志详细程度有助于定位,但分享日志前应移除订阅地址、认证信息和其他敏感内容。详细配置字段可继续查阅配置大全,连接层问题则按疑难解答逐项处理。