路由分流决定一条连接最终进入哪个出站。节点负责建立代理连接,路由规则则负责判断哪些请求交给代理、哪些请求直接访问、哪些请求立即阻断。两者是独立层次:更换 VMess 或 VLESS 节点不会自动修正分流规则,更新订阅通常也不会覆盖本地自定义路由。
本文适合已经能在 v2rayN 中连接节点、但需要配置国内直连与国外代理的用户。内容覆盖从上到下的匹配机制、v2rayN 菜单操作、domain 与 ip 写法、GeoSite 与 GeoIP 数据引用、广告域名阻断,以及通过日志定位误匹配的方法。
V2Ray 路由规则先理解匹配模型
V2Ray 与 Xray 的路由规则按配置数组中的顺序检查。连接命中第一条完整匹配的规则后就确定出站,后面的规则不再参与判断。因此,范围小、意图明确的规则应放在前面,范围大的兜底规则放在最后。广告阻断通常早于国内直连,国内直连又早于最终代理兜底。
规则中的 domain、ip、port、network 和 protocol 是匹配条件,outboundTag 是匹配后的去向。v2rayN 生成的配置常见出站标签为 proxy、direct 和 block,但实际标签应以当前客户端导出的配置为准,不能只凭名称猜测。
端口数值会随客户端设置变化,上述 10808 与 10809 只用于说明本地入口和远端目标端口不是同一概念。路由里的 port: 443 匹配的是访问目标的 443 端口,不是 v2rayN 本地监听端口。把两者混淆,会造成浏览器流量完全绕过预期规则。
- 域名请求:优先使用域名规则判断,例如
domain:example.com、full:example.com或geosite:cn。 - IP 请求:直接访问 IP 时可由
geoip:cn、geoip:private或 CIDR 网段匹配。 - 域名转 IP:是否为了匹配 IP 规则而解析域名,取决于
domainStrategy。 - 最终去向:没有规则命中时,连接进入路由配置之外定义的默认出站,结果受客户端生成方式影响。
在 v2rayN 中建立可回退的路由配置
以下操作以 v2rayN 7.15.x 的中文界面为参考。小版本可能调整菜单排列,但核心检查路径仍是参数设置、路由设置和当前路由模式。修改前先记录原模式,并确认至少有一个节点已经通过基础连通测试;否则节点故障与路由错误会在日志中呈现相似的超时结果。
-
确认内核
打开「设置」→「参数设置」→「Core 类型」,确认当前协议对应的内核。VLESS 节点通常由 Xray 内核处理,旧有 VMess 配置应按订阅实际字段加载。
-
记录端口
在「设置」→「参数设置」→「基础设置」查看本地 SOCKS 与 HTTP 监听端口,并记录局域网连接开关状态,避免测试工具连到错误端口。
-
复制规则
进入「设置」→「路由设置」,复制当前可用规则集后再编辑。不要直接覆盖唯一方案,保留原规则可用于一分钟内回退。
-
调整顺序
依次放置广告阻断、私有地址直连、国内域名直连、国内 IP 直连与最终代理规则,确认每一项的出站标签存在。
-
应用重启
保存后选择新路由方案,重启内核并重新开启系统代理。仅保存编辑内容而不切换当前方案,不会改变正在运行的配置。
系统代理只影响遵循系统代理设置的程序。某个程序自行发起直连、固定使用其他代理端口或缓存了旧连接时,修改 v2rayN 路由不会立即改变其流量。测试时应关闭并重新打开目标程序,同时确认系统代理已指向当前 v2rayN 监听端口。
国内直连、国外代理与广告阻断的组合
一套容易维护的规则应先处理确定性最高的流量。广告分类命中后进入阻断出站;局域网、回环地址与国内资源进入直连;剩余 TCP、UDP 流量进入代理。这样不需要列出所有国外域名,新增网站也会自然落入最后的代理兜底。
国内直连
- 域名集合
- geosite:cn
- IP 集合
- geoip:cn
- 私有网段
- geoip:private
- 出站标签
- direct
私有地址规则应置于代理兜底之前,避免路由器管理页和局域网设备进入远端节点。
阻断与代理
- 广告集合
- geosite:category-ads-all
- 阻断标签
- block
- 兜底网络
- tcp,udp
- 代理标签
- proxy
兜底项必须位于最后;放到顶部会吞掉后续国内直连规则。
对应的核心配置可以写成下列结构。此片段只展示 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"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}domainStrategy: IPIfNonMatch 表示域名没有被域名规则命中时,可以解析其 IP,再尝试 IP 规则。它不是“先查 IP 再查域名”,也不会把所有域名无条件提前解析。这个模式适合同时使用 geosite:cn 与 geoip:cn 的常规分流。
- 访问路由器管理地址或局域网服务,确认
geoip:private进入直连。 - 访问常用国内站点,查看日志中的目标域名与最终出站是否为
direct。 - 访问需要代理的目标,确认其没有被宽泛的自定义域名规则提前直连。
- 打开一个已知包含分类广告请求的测试页面,观察被阻断的域名,不用仅凭页面留白判断。
domain、ip、GeoSite 与 GeoIP 怎么排顺序
domain 规则适合表达网站归属和明确域名。full:api.example.com 只匹配完整主机名,domain:example.com 可匹配主域及其子域,regexp: 则用于确有必要的正则条件。正则开销和误匹配风险更高,能够用完整域名或后缀表达时,不应先选正则。
geosite:cn 是按域名分类整理的数据集合,geoip:cn 是按 IP 网段整理的数据集合。两者不是同一份数据的两种拼写。站点使用境外托管地址但服务归类为国内时,GeoSite 可能先将其直连;域名不在集合中但解析到国内 IP 时,IPIfNonMatch 可以继续让 GeoIP 规则接管。
推荐方案:域名优先,IP 补充,代理兜底
域名判断层
- 广告分类先进入 block
- 精确例外放在分类集合之前
- geosite:cn 进入 direct
- 未命中时保留原域名供日志查看
IP 与兜底层
- geoip:private 保护局域网访问
- geoip:cn 补充国内 IP 判断
- 最后的 tcp,udp 进入 proxy
- DNS 解析结果应与当前网络一致
规则顺序的核心不是“域名永远高于 IP”,而是先放置更明确的例外,再放分类集合,最后放覆盖全部连接的兜底条件。
自定义例外必须放在集合规则之前。例如某个国内分类域名在当前网络下直连失败,可以增加一条完整域名代理规则,并将其放在 geosite:cn 前面。反过来,如果某个境外服务只允许本地网络直连,也应把精确直连规则放到代理兜底之前。
{
"type": "field",
"domain": [
"full:api.example.com",
"domain:static.example.net"
],
"outboundTag": "proxy"
}三种分流写法的适用范围
分流方案没有脱离环境的固定最优项。日常桌面使用通常适合分类数据加兜底;需要严格控制单个业务域名时适合精确规则;短期诊断则可以暂时使用全局代理,确认问题是否来自分流层。诊断结束后应恢复可解释的规则集,而不是长期依赖全局模式掩盖误匹配。
分类数据加代理兜底
推荐使用 geosite:cn、geoip:cn 和私有地址直连,最后由 TCP、UDP 规则统一进入代理。规则数量少,更新地理数据后即可覆盖新增域名和网段。
适合:日常浏览、订阅节点切换、长期维护
精确域名白名单
按 full: 或 domain: 维护直连与代理目标,行为可预测,但域名变更时需要手动补充。业务包含多个接口域名时,应结合日志完整收集。
适合:固定办公服务、少量指定域名、严格例外控制
临时全局代理
让大部分受管连接进入代理,用于判断节点与目标服务是否连通。它不能验证国内直连规则,也可能让局域网或本地服务出现异常。
适合:短时排障、验证节点出口、对比分流结果
v2rayNG 使用 Xray 内核时,domain、GeoSite、GeoIP 与规则顺序的基本逻辑一致,但安卓端还会受到分应用代理、绕过局域网和系统网络切换的影响。v2flyNG 使用 v2fly 内核时,应以该内核实际支持的配置字段为准。不要直接把桌面端生成的完整配置当作移动端界面规则逐项照搬。
- 同一订阅只负责提供节点,不代表不同客户端会生成完全相同的路由配置。
- VMess 与 VLESS 描述的是节点连接方式,不决定某个目标域名应该直连还是代理。
- 切换节点后路由一般仍然生效,但出站标签被自定义修改时需要重新核对引用。
- 启用分应用代理后,未被选中的应用可能不进入内核,自然不会留下对应路由日志。
规则冲突与分流失准的排查顺序
排查应从“请求有没有进入内核”开始,再判断“命中了哪条规则”,最后检查“对应出站能否连接”。直接反复更换节点只能验证代理出站的一部分,无法发现系统代理端口错误、规则顺序错误、Geo 数据过期或 DNS 解析不一致。
建议在 v2rayN 主界面打开日志窗口,将日志等级临时调到可观察路由结果的级别,然后只访问一个目标域名。一次同时打开多个网页会产生大量后台请求,广告、图片和接口域名混在一起,难以确认哪一条连接对应正在测试的页面。
| 现象 | 优先检查 | 判断依据 | 处理动作 |
|---|---|---|---|
| 国内站点走代理 | 代理兜底是否位于顶部 | 日志先显示 proxy,后续 direct 规则没有机会执行 | 将 tcp,udp 兜底移到规则列表末尾 |
| 指定境外域名直连 | 是否被宽泛 domain 规则包含 | 目标子域命中上级域名后缀或 GeoSite 分类 | 添加 full 精确代理规则并前置 |
| 域名与 IP 测试结果不同 | domainStrategy 与 DNS | 域名未进入 IP 匹配,或解析结果来自不同网络 | 核对 IPIfNonMatch 和当前 DNS 配置 |
| 局域网地址打不开 | geoip:private 的位置 | 私有地址被最后代理规则提前截获 | 将私有网段直连放在代理兜底之前 |
| 修改后没有变化 | 当前路由方案与内核状态 | 编辑的是副本,但运行中仍选择旧方案 | 切换方案、重启内核并重建目标连接 |
| 部分新域名分流异常 | GeoSite 与 GeoIP 数据日期 | 分类文件较旧,目标域名或网段尚未收录 | 更新数据文件后重启内核复测 |
如果日志中完全看不到目标连接,先检查程序是否遵循系统代理,以及它是否复用了修改前建立的长连接。浏览器可关闭全部窗口后重开,命令行工具则应明确指定 v2rayN 的 HTTP 或 SOCKS 端口。若连接进入内核但直接超时,再检查命中的出站标签和节点状态。
- 固定测试对象:选择一个完整域名,不要用首页里不断变化的第三方资源作为唯一依据。
- 清理 DNS 缓存:规则依赖 IP 判断时,旧解析记录可能让前后测试落到不同网段。
- 核对首条命中:从规则顶部向下找第一条能够覆盖目标的条件,不要只检查自己期望命中的那一条。
- 单独验证出站:暂时让目标完整域名进入指定出站,确认代理或直连本身是否可用。
- 逐条恢复规则:从最小规则集开始添加分类项,每次只改变一个条件。
可长期维护的分流基线
稳定的规则集不需要堆叠大量重复域名。保留广告阻断、私有地址直连、国内域名直连、国内 IP 直连和最终代理五层,再为确有问题的站点增加少量精确例外,通常比导入多个来源不明、条件相互覆盖的规则列表更容易维护。
GeoSite 与 GeoIP 数据应定期更新,但更新后也要观察关键业务域名是否改变分类。分类数据提供批量判断,不等于针对当前网络环境的绝对结论。遇到稳定复现的误分类时,用 full: 规则建立本地例外,并在注释或规则名称中记录添加原因和日期。
- 规则名称写明用途,例如“广告阻断”“局域网直连”“国内域名直连”“最终代理”。
- 精确例外置于集合规则之前,宽泛的网络兜底只保留一条并放在最后。
- 每次修改后分别测试局域网、国内域名、境外域名和直接 IP 四类目标。
- 更新 v2rayN、v2rayNG 或 v2flyNG 后,核对当前内核、路由方案和本地端口是否保持原值。
- 订阅更新后若节点协议从 VMess 改为 VLESS,先验证节点连通,再继续判断路由结果。
最终判断标准不是页面是否“看起来能打开”,而是日志中的目标、命中规则和出站标签能相互对应。只要规则顺序明确、例外范围足够小、兜底位置固定,国内直连与国外代理的行为就能被重复验证,也能在客户端升级或订阅变化后快速定位偏差。