本文速览

适合已经导入节点、能够通过代理访问网页,但需要细分直连与代理流量的用户。先用绕过大陆规则建立基线,再加入网站例外和广告拦截,最后通过出站标签检查结果。本文代码采用 Xray 路由语法;客户端界面中的规则应逐项填写,不能把整段 JSON 直接粘进域名输入框。

一、系统代理与路由分流的边界

系统代理解决“应用是否把连接交给 v2rayN”,路由分流解决“内核收到连接后选择哪个出站”。启用「自动配置系统代理」并不等于所有连接都走远端节点;只要规则命中 direct,连接仍会由本机直接发起。反过来,不读取系统代理的应用也不会因为切换路由模式就自动进入内核。

应用请求 本地入站 规则匹配 选择出站 访问目标

先在「设置」→「参数设置」确认本地监听端口,再查看主窗口底部的系统代理与路由选择。下方端口仅用于本文测试示例,不代表每个版本的默认值;如果本机显示其他端口,命令中的数字必须一起修改。测试期间先关闭 TUN,避免同时存在两种接入路径而干扰判断。

10808
示例 SOCKS 入站端口
10809
示例 HTTP 入站端口
3 类
直连、代理、阻断出站

二、从绕过大陆规则建立可回退基线

在主窗口路由选择中启用名称含「绕过大陆」的预设;不同版本和导入规则的显示名称可能不同,应打开「设置」→「路由设置」查看实际内容,而不是只凭名称判断。先备份当前路由配置,再复制出一份测试配置,保留原预设用于回退。

  1. 选中一个已确认可连接的节点,保持测试过程中节点不变。
  2. 打开「设置」→「路由设置」,检查当前配置是否包含中国大陆域名、中国大陆 IP 和局域网直连规则。
  3. 确认代理兜底存在:未被前置规则命中的 TCP、UDP 连接应交给代理出站。
  4. 保存并切换到测试配置,让内核重新加载;观察日志是否出现配置加载错误,再开始访问测试。

直连规则基线

域名集合
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局域网、中国大陆 IPdirect处理 IP 目标和解析结果
5其余 TCP、UDPproxy境外与未知目标代理兜底

下面是原生 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:。页面可能同时加载登录、图片、接口等多个主机,所以“首页能开但登录失败”通常需要检查请求域名,而不是直接把整类流量改为直连。

例如要把腾讯相关域名明确设为直连,可以在通用集合之前加入下列规则。该规则只演示匹配范围,不意味着所有用户都需要添加;若原有集合已经覆盖,重复规则只会增加维护成本。

{
  "type": "field",
  "domain": ["domain:qq.com"],
  "outboundTag": "direct"
}

广告阻断可使用 geosite:category-ads-all,但它只能处理经过内核且命中集合的连接,不能像网页元素过滤那样移除页面留白。若数据文件不含这个集合,内核可能直接报加载失败;应先检查日志和数据文件来源,再决定更新数据或移除该规则。

判断:误拦时先加精确例外

开启广告阻断后若支付或登录异常,先定位失败主机,用 full: 添加对应的 direct 或 proxy 例外并放到广告规则之前。不要立即放行整个主域;扩大匹配范围前,先验证一个完整业务流程。

五、用请求与日志验证出站结果

“网页打开了”只能说明存在可用路径,不能证明规则正确。验证时同时记录请求目标、实际接入端口与日志中的出站标签。客户端测速通常用于检测节点,不等于浏览器当前请求已经按预期分流。

  1. 先保存路由并重新加载内核,确认没有配置错误。必要时在「设置」→「参数设置」中临时提高日志详细程度。
  2. 使用明确指定代理的命令访问目标,避免浏览器缓存、后台连接和代理扩展干扰。
  3. 分别测试大陆域名、代理兜底域名,以及从当前广告集合中确认存在的测试域名。
  4. 按请求时间检查核心访问日志中的出站标签;若当前日志级别不输出访问记录,先调整日志配置再测试。
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.comdirect域名集合、前置代理规则
example.comproxy本文示例的完整域名规则与代理出站
已确认在广告集合中的主机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 数据,也不应被当作修复路由顺序的办法。更换内核后,还应重新确认规则语法、数据文件和出站标签,而不是假定旧配置可以原样使用。

最终应形成一条可解释的判断链:应用确实进入客户端,规则顺序符合预期,目标命中了明确标签,该出站具备可用连接。只有这四项都能对应到配置和日志,才能区分路由错误、DNS 异常与节点本身不可用。