适合已经导入节点、能够通过代理访问网页,但需要细分直连与代理流量的用户。先用绕过大陆规则建立基线,再加入网站例外和广告拦截,最后通过出站标签检查结果。本文代码采用 Xray 路由语法;客户端界面中的规则应逐项填写,不能把整段 JSON 直接粘进域名输入框。
一、系统代理与路由分流的边界
系统代理解决“应用是否把连接交给 v2rayN”,路由分流解决“内核收到连接后选择哪个出站”。启用「自动配置系统代理」并不等于所有连接都走远端节点;只要规则命中 direct,连接仍会由本机直接发起。反过来,不读取系统代理的应用也不会因为切换路由模式就自动进入内核。
先在「设置」→「参数设置」确认本地监听端口,再查看主窗口底部的系统代理与路由选择。下方端口仅用于本文测试示例,不代表每个版本的默认值;如果本机显示其他端口,命令中的数字必须一起修改。测试期间先关闭 TUN,避免同时存在两种接入路径而干扰判断。
二、从绕过大陆规则建立可回退基线
在主窗口路由选择中启用名称含「绕过大陆」的预设;不同版本和导入规则的显示名称可能不同,应打开「设置」→「路由设置」查看实际内容,而不是只凭名称判断。先备份当前路由配置,再复制出一份测试配置,保留原预设用于回退。
- 选中一个已确认可连接的节点,保持测试过程中节点不变。
- 打开「设置」→「路由设置」,检查当前配置是否包含中国大陆域名、中国大陆 IP 和局域网直连规则。
- 确认代理兜底存在:未被前置规则命中的 TCP、UDP 连接应交给代理出站。
- 保存并切换到测试配置,让内核重新加载;观察日志是否出现配置加载错误,再开始访问测试。
直连规则基线
- 域名集合
geosite:cn- IP 集合
geoip:cn- 局域网 IP
geoip:private- 目标标签
direct
集合是否可用取决于当前加载的 geosite.dat 与 geoip.dat。
代理兜底基线
- 网络类型
tcp,udp- 目标标签
proxy- 规则位置
- 全部例外规则之后
- 代理节点
- 当前活动服务器
标签必须对应实际出站;仅填写标签不会创建代理服务器。
direct、proxy、block 是本文采用的标签名,不是内核自动识别的保留关键字。常见配置中,它们分别对应直连出站、节点出站和阻断出站;实际生成配置若使用其他标签,路由必须跟随调整。特别是阻断规则,必须存在对应的 blackhole 出站,不能只添加一条名为 block 的规则。
三、direct、proxy、block 的规则顺序
Xray 按规则从上到下匹配,首次命中后就选择对应出站,不会继续寻找“更精确”的下一条规则。把某网站强制代理的规则放在中国大陆 IP 直连之后,可能因解析结果先命中 IP 规则而失效。稳妥的做法是将明确的域名例外放在宽泛集合之前,兜底规则始终放在最后。
| 顺序 | 匹配内容 | 出站 | 目的 |
|---|---|---|---|
| 1 | 指定业务域名例外 | direct 或 proxy | 覆盖后面的通用规则 |
| 2 | 广告域名集合 | block | 阻断命中的广告连接 |
| 3 | 中国大陆域名集合 | direct | 优先按域名判断直连 |
| 4 | 局域网、中国大陆 IP | direct | 处理 IP 目标和解析结果 |
| 5 | 其余 TCP、UDP | proxy | 境外与未知目标代理兜底 |
下面是原生 Xray 配置中的 routing 片段示例,不是可独立启动的完整配置。它假定三个出站标签已经存在,且数据文件包含所引用的集合。在 v2rayN 的图形界面中,应把这些对象转成对应的规则项;只有使用完整自定义配置时,才将它合并到顶层配置。
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"domain": ["full:example.com"],
"outboundTag": "proxy"
},
{
"type": "field",
"domain": ["geosite:category-ads-all"],
"outboundTag": "block"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:private", "geoip:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
四、网站直连例外与广告拦截的具体写法
添加规则前先区分完整域名与后缀域名。只希望首页主机直连时使用 full:;希望同一域及其子域名一起处理时使用 domain:。页面可能同时加载登录、图片、接口等多个主机,所以“首页能开但登录失败”通常需要检查请求域名,而不是直接把整类流量改为直连。
full:www.qq.com:只匹配这个完整主机名,不包含其他子域。domain:qq.com:匹配qq.com及其子域,如www.qq.com。geosite:cn:引用数据文件中的中国大陆域名集合,不等同于所有以.cn结尾的域名。geoip:cn:按目标 IP 是否属于指定地址集合进行匹配,不依据网页内容或域名后缀判定。
例如要把腾讯相关域名明确设为直连,可以在通用集合之前加入下列规则。该规则只演示匹配范围,不意味着所有用户都需要添加;若原有集合已经覆盖,重复规则只会增加维护成本。
{
"type": "field",
"domain": ["domain:qq.com"],
"outboundTag": "direct"
}
广告阻断可使用 geosite:category-ads-all,但它只能处理经过内核且命中集合的连接,不能像网页元素过滤那样移除页面留白。若数据文件不含这个集合,内核可能直接报加载失败;应先检查日志和数据文件来源,再决定更新数据或移除该规则。
判断:误拦时先加精确例外
开启广告阻断后若支付或登录异常,先定位失败主机,用 full: 添加对应的 direct 或 proxy 例外并放到广告规则之前。不要立即放行整个主域;扩大匹配范围前,先验证一个完整业务流程。
五、用请求与日志验证出站结果
“网页打开了”只能说明存在可用路径,不能证明规则正确。验证时同时记录请求目标、实际接入端口与日志中的出站标签。客户端测速通常用于检测节点,不等于浏览器当前请求已经按预期分流。
- 先保存路由并重新加载内核,确认没有配置错误。必要时在「设置」→「参数设置」中临时提高日志详细程度。
- 使用明确指定代理的命令访问目标,避免浏览器缓存、后台连接和代理扩展干扰。
- 分别测试大陆域名、代理兜底域名,以及从当前广告集合中确认存在的测试域名。
- 按请求时间检查核心访问日志中的出站标签;若当前日志级别不输出访问记录,先调整日志配置再测试。
curl --proxy http://127.0.0.1:10809 --connect-timeout 10 -I https://www.qq.com/
curl --proxy http://127.0.0.1:10809 --connect-timeout 10 -I https://example.com/
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 -I https://example.com/
Windows 终端中若 curl 被解释为其他命令,可改用 curl.exe。HTTP 代理访问 HTTPS 时通常通过 CONNECT 提交目标主机;socks5h 也会把域名交给代理端处理。这样更容易测试域名规则,避免本机先解析成 IP 导致测试对象变化。命令返回 403 或 405 也不必然代表连接失败,应结合目标响应与出站日志判断。
| 测试对象 | 预期标签 | 异常时优先检查 |
|---|---|---|
| www.qq.com | direct | 域名集合、前置代理规则 |
| example.com | proxy | 本文示例的完整域名规则与代理出站 |
| 已确认在广告集合中的主机 | block | 集合内容、白名单与规则位置 |
上述表格是配置预期,不是本站测得的网络性能结果。浏览器复用旧连接时,改规则后可能暂时看不到新结果;应关闭旧连接或用新命令发起请求。测试完成后恢复日常日志级别,避免长期积累包含访问目标的详细记录。
六、DNS、IP 规则与常见分流故障
路由判断与 DNS 解析相互关联,但不是同一个设置。domainStrategy 控制路由匹配时何时需要解析域名,并不直接指定使用哪台 DNS 服务器,也不保证解析请求经由代理。尤其是启用 IP 按需匹配后,错误的解析结果可能把原本应代理的域名引向大陆 IP 直连规则。
选了绕过大陆,为什么国内网站还是走代理?
先看日志里的目标是域名还是 IP,再到「设置」→「路由设置」检查 geosite:cn 是否存在、是否被前面的代理规则覆盖。若只收到 IP,域名规则无法直接匹配,应检查 IP 规则及应用接入方式。
加了 geoip:cn,为什么没有对域名生效?
检查 domainStrategy。使用 AsIs 不会为路由主动解析;使用 IPIfNonMatch 时,前面的规则或末尾通用兜底可能已经命中。需要按 IP 判断时评估 IPOnDemand,同时检查 DNS 解析是否可靠。
添加广告规则后,内核直接启动失败怎么办?
查看日志是否指出集合不存在,或出站标签找不到。先撤回新增规则恢复连接,再检查 category-ads-all 是否在当前 geosite.dat 中,以及 block 是否对应实际阻断出站。
浏览器正常,其他应用却完全不按规则走?
先用指定 127.0.0.1:10809 的命令建立对照。若命令正常,说明路由链路可用,再检查该应用是否支持系统代理,或在应用内配置 SOCKS。不要为了接入问题反复修改路由顺序。
七、保存规则与后续维护
订阅节点与路由配置承担不同任务:节点提供远端连接参数,路由决定哪些连接使用这些参数。更新订阅不等于更新 geosite 与 geoip 数据,也不应被当作修复路由顺序的办法。更换内核后,还应重新确认规则语法、数据文件和出站标签,而不是假定旧配置可以原样使用。
- 保留一份可用的绕过大陆基线,每次只改一个目标域名或一条规则。
- 记录修改日期、匹配范围、出站标签和验证命令,便于复现与回退。
- 更新域名或 IP 数据后,复测直连、代理、阻断三个场景,防止集合变化影响原有例外。
- 需要更多背景时查看排查手册;初次设置本地代理可从使用指南开始。
最终应形成一条可解释的判断链:应用确实进入客户端,规则顺序符合预期,目标命中了明确标签,该出站具备可用连接。只有这四项都能对应到配置和日志,才能区分路由错误、DNS 异常与节点本身不可用。