适合已经导入节点、代理连接可用,但还没有整理分流规则的用户。下面以桌面 v2rayN 的 Xray 内核为范围,建立三类出站、六条基础规则,分别检查系统代理入口、规则顺序和域名解析条件。最终配置采用国内分类直连、其他请求代理的保守策略;广告分类独立置顶,误拦截时可以单独停用。
一、先确认请求进入哪个入口
分流不是按照浏览器界面里的网址自动判断“国内外”,而是内核根据收到的目标域名、目标 IP、端口等信息匹配规则。请求没有进入 v2rayN 的本地入站,就不会执行本文的路由。系统代理通常只影响遵循系统代理设置的应用;自行直连的程序,需要单独配置代理,或另行使用 Tun 接管。
本文以 v2rayN 7.x 桌面界面的设置分组为参考,先使用系统代理验证,不同时开启 Tun。不同小版本的按钮位置可能调整,进入「设置」→「参数设置」确认本地监听端口,进入「设置」→「路由设置」管理规则集。若当前客户端启用了其他内核,应先切换到 Xray 并确认节点仍可连接,再应用下面的 Xray 规则示例。
- 选择一个已验证可用的服务器,设为活动服务器;先排除节点连接本身失败的问题。
- 记录本地 HTTP 或混合入站的实际端口,不把 SOCKS 专用端口当作 HTTP 代理端口。
- 在托盘菜单「系统代理」中选择「自动配置系统代理」,并确认浏览器没有扩展覆盖系统代理。
- 备份当前路由规则集,复制出一份测试规则。暂时关闭其他代理软件,避免入口被改写。
这里的 10808 是后文命令的演示值,不是要求修改成这个数字,也不代表每份安装的默认端口。只有当「参数设置」显示该端口接受 HTTP 或混合代理请求时,才可原样执行命令。
二、建立直连、代理、阻断三类出口
v2rayN 负责把活动服务器和界面设置组合成内核配置。通常可以在规则的出站选项中选择 direct、proxy、block。它们是生成配置中的标签,不是节点协议名;VMess 或 VLESS 节点都可以成为代理出站,路由不需要因此改写成另一套语法。
连接出口
- 直连标签
direct- 代理标签
proxy- 代理目标
- 当前活动服务器
- 使用范围
- 国内分类直连,其他请求代理
直连仍需经过本机网络访问目标;路由命中不等于目标一定可达。
阻断与兜底
- 阻断标签
block- 阻断分类
geosite:category-ads-all- 兜底出口
proxy- 兜底网络
tcp,udp
阻断只处理命中的请求,不能按网页画面识别所有广告内容。
在「设置」→「路由设置」中新建测试规则集,添加规则时分别填写域名、IP、网络和出站标签。保存后还要把该规则集设为当前使用项;只完成编辑、不切换活动规则集,访问结果不会随之改变。若界面显示的标签与本文不同,以当前生成配置中的 outbounds[].tag 为准,不能引用不存在的标签。
三、按六条顺序组合分流规则
Xray 路由采用从上到下、首个匹配生效的逻辑。同一条规则里同时填写域名和端口,表示这些字段需要同时满足;同一个域名列表中的多个条目则是任选一个命中。不要把所有域名、IP 和端口塞进同一条规则,否则很容易把原本的“或者”误写成“并且”。
| 顺序 | 匹配条件 | 出站 | 用途 |
|---|---|---|---|
| 1 | geosite:category-ads-all | block | 先拦截广告分类域名 |
| 2 | geoip:private | direct | 内网、回环等私有地址直连 |
| 3 | geosite:cn | direct | 国内域名分类直连 |
| 4 | geoip:cn | direct | 已知目标 IP 属于国内地址时直连 |
| 5 | full:example.com | proxy | 演示精确域名代理规则 |
| 6 | network: tcp,udp | proxy | 剩余请求统一代理 |
第 5 条使用文档示例域名,目的是便于验证精确匹配,日常运行可以删除。若要让某个已经被前面分类收录的网站强制走代理,必须把它的专用规则移到对应分类规则之前。规则越“具体”不会自动获得更高优先级,位置才决定先后。
下面是对应的 Xray routing 配置片段。它用于核对字段含义,不是可以直接启动的完整配置,也不是 v2rayN 图形界面规则导入格式。使用界面导入功能时,应先查看当前版本导出的规则结构,不能把这个片段当作完整规则文件导入。
{
"routing": {
"domainStrategy": "AsIs",
"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",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
geosite:cn 是域名分类,不是实时检测网站服务器地理位置;geoip:cn 是 IP 地址集合,也不能代表网站运营主体所在地。跨境 CDN、境外托管的国内网站都可能与直觉不同。发现个别网站路线不合适时,添加域名例外比反复修改整套分类更可控。
四、选择 AsIs,避免兜底规则掩盖解析条件
本例明确使用 AsIs:不为了路由匹配主动解析域名。请求携带域名时主要按域名规则判断;请求本来就携带 IP 时,IP 规则可以直接参与匹配。因此,上面第 4 条并不意味着所有未分类域名都会先解析,再按国内 IP 直连。
- AsIs:适合先建立稳定的域名分流基线。未命中国内域名分类的域名请求落到代理兜底,减少因本地解析结果而改变路径的情况。
- IPIfNonMatch:域名阶段没有规则命中时,才尝试解析并按 IP 重新匹配。不是每次遇到 IP 规则都会立即解析。
- IPOnDemand:匹配过程中需要 IP 信息时就可能触发解析。应同时评估 DNS 可达性、解析等待和 CDN 返回地址,再决定是否使用。
结论:保留全匹配兜底时,先用 AsIs
最后的 tcp,udp 规则在域名阶段也能命中,可能使 IPIfNonMatch 的“无匹配后解析”没有触发机会。需要依赖 IP 补充分流时,应重新设计兜底方式或评估 IPOnDemand,不能只更改一个策略名称就认定已经生效。
路由的域名策略与 DNS 查询走哪条出口是两个问题。选择 AsIs 不代表系统没有 DNS 查询,也不代表所有解析都通过代理完成。应用提前把域名解析成 IP、代理协议把域名交给远端、内核为直连目标解析,都会形成不同的解析路径。先确认请求进入内核时携带的是域名还是 IP,再讨论某条域名规则为什么没有命中。
五、逐类验证,不只看出口地址
保存规则集并启用后,先观察内核能否正常启动。出现找不到域名分类、读取 geo 数据失败等报错,应通过客户端提供的数据更新功能更新匹配当前内核的数据文件,随后重启内核。没有启动成功时,浏览器缓存或残留系统代理状态可能制造“部分可用”的假象。
- 验证代理:使用下面的命令请求示例域名,查看访问日志中是否出现代理出站标签。若端口不是 10808,先替换为界面里的实际 HTTP 或混合端口。
- 验证直连:选择一个确认包含在当前
geosite:cn数据中的域名,记录域名、时间和出站标签。网站能打开,只能说明请求成功,不能单独证明走了直连。 - 验证阻断:从当前广告分类中选一个已知条目,检查日志是否走
block。测试时可临时把full:example.com的独立规则移至顶部并改为阻断,以验证阻断机制,完成后恢复。 - 验证兜底:使用未被前面规则覆盖的目标,确认仍走代理。若 UDP 业务失败,还需确认节点和传输方式支持相关 UDP 转发。
curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
命令中的 10 秒是连接超时上限,20 秒是整次请求的总时限,并非实测延迟。返回 HTTP 状态表示请求有响应;连接被关闭也不一定就是阻断命中,需要结合日志判断。部分网站不支持 HEAD 请求,此时可以改用普通 GET,再比较路由结果。
- 如普通日志不包含访问记录,在「设置」→「参数设置」的日志相关选项中检查访问日志设置;短时提高日志详细度,验证后恢复。
- 每轮只改一条规则,记录“目标、预期出站、实际出站”三个字段,避免同时修改 DNS、节点和路由。
- 更改规则后重新发起连接;浏览器现有长连接可能仍沿用旧连接,必要时关闭相关标签页后重试。
六、常见分流问题与修正步骤
国内网站还是走代理,哪里没有设对?
先看当前启用的是否为刚编辑的规则集,再检查代理兜底有没有排到国内规则上方。若顺序正确,确认内核收到的是域名还是 IP,并检查当前 geosite 数据是否包含该域名。确有直连需求时,把 domain: 域名例外放在兜底之前,不要直接把所有未知请求改为直连。
开了广告阻断后,登录页面加载不完整怎么办?
先临时停用广告分类规则并重试,确认故障是否随之消失。若确属误拦截,从日志找出登录、验证码或静态资源域名,为它添加直连或代理例外,并移到广告阻断之前。不要仅凭页面空白就大范围放行整个域名后缀。
浏览器能分流,另一个程序却不生效?
检查该程序是否遵循系统代理。支持手动设置时,填入 127.0.0.1 和实际监听端口,并选择匹配的 HTTP 或 SOCKS 类型。只有需要接管不遵循代理设置的流量时,再单独验证 Tun;启用前先确认系统权限与内网访问需求。
订阅更新后,自己写的分流会被覆盖吗?
节点订阅与本地路由规则集是不同配置对象,普通节点更新通常不改写独立保存的路由。但导入整份客户端配置、更新远程路由规则集可能改变规则内容。把个人例外保存在可维护的本地规则集中,更新后重新检查活动规则集、顺序和出口标签。
一套可维护的分流配置应能解释每条规则的用途:需要阻断的先处理,内网和国内分类按条件直连,特殊域名单独覆盖,其余请求明确代理。先把这条基线验证完整,再增加游戏、下载或工作服务的专用规则,出现问题时才能定位到具体变更。