本页目录
代理连上了,出口显示香港,DNS 检测页却出现了中国大陆的解析器——这就是我想排查的现象。做法不是一上来换节点,而是顺着配置文件找:先检测 → 检查规则集中的 IP 匹配 → 给相关规则加 no-resolve → 复测 → 看看直连分流有没有被带偏。这里先看清 DNS 查询与网页连接可能走不同路径,再沿规则找提前解析的位置。
第一步:检测页上看到了什么
连接代理后打开 ipleak.net,对照两处信息:代理出口地址在哪里,DNS 链路上的解析器又在哪里。我的一次测试里,代理节点在香港,检测结果中却出现了中国大陆地址。这比只看“代理已连接”多了一条排查线索。
先保存当前配置和检测结果,后面用同一设备、浏览器和网络复测。单个网页的结果也不能替其他 App 下结论。
第二步:沿着规则顺序找提前解析的地方
我把 Surge 配置与另一份 Shadowrocket 配置放在一起看,两者采用相近的分流思路;下面只拆 Surge 这一份,不把它的语法硬套给其他工具。规则是按顺序匹配的:广告拦截放前面,匹配中就不必再往后走;常见的中国大陆域名规则集也放在较前的位置,交给“全球直连”策略组(在这份配置里默认选 DIRECT)。
问题藏在规则集内部。打开其中一份,能看到不少 DOMAIN-SUFFIX:它们按域名匹配,不需要为了判断这条规则先查目标 IP。继续搜索 IP,就能找到 IP 地址段规则;配置底部还有 GEOIP。后两类需要目标 IP,域名请求匹配到这里时,Surge 可能先做 DNS 查询。这正是要检查 no-resolve 的位置,而不是只扫一眼规则集名称就以为里面全是域名规则。
给相关的 IP 地址段与 GEOIP 规则加上 no-resolve:目标还是未解析域名时,跳过该条 IP 规则,不为匹配它提前发起 DNS 查询;若请求直接使用 IP,这条规则仍可匹配。Surge 官方规则说明也明确了这个行为。规则集里的 IP 条目和配置底部的 GEOIP 怎样查找,可对照规则定位演示。记得连同规则集一起检查匹配顺序:前面若有另一条未处理的 IP 规则,后面的参数管不到它。
第三步:回到检测页复测
调整后重新载入配置,再用同一台 iPad 刷新检测页:页面显示的出口 IP 在香港,下面列出的 DNS 链路也都是香港节点。这说明这次浏览器测试与调整前不同;别把一张结果图写成“所有设备、所有请求都不会泄露”。
广告
到这里先别收工。避免了提前解析,也意味着原先依赖 IP 判断的某些分流规则可能被跳过。下面这一步,才是这套改法真正需要想清楚的代价。
“绕过中国大陆 IP”不等于认得所有国内网站
配置把常见的中国大陆域名和 IP 规则放在前面,命中的请求走直连。但规则集不可能列出所有域名,no-resolve 又使未解析域名跳过部分 IP 判断。漏网的请求会落到 FINAL,然后交给“漏网之鱼”策略组;这个组当前选的是谁,直接决定出口。
用 aaa.com、bbb.com 作假设代号把问题说透;这里只讨论分流情境,不指实际同名网站:
| 请求 | 希望它怎么走 | 没命中前面规则时会怎样 |
|---|---|---|
aaa.com:假设是国内网站 | 直连 | 跳过 GEOIP 后落到 FINAL;若“漏网之鱼”选自动代理,它反而绕路 |
bbb.com:假设需要代理 | 代理 | 同样落到 FINAL;若手动把“漏网之鱼”切成 DIRECT,它又会直连 |
解决 aaa.com 这类漏网情况,不是撤掉所有 no-resolve,而是在规则前面补一条明确的域名规则,交给“全球直连”。bbb.com 若在当前默认的代理兜底下已经按预期走代理,就不用为了凑规则再加一条;只有想指定地区等特殊出口时,才单独写规则。这样“绕过中国大陆 IP”才有实际边界:常见域名优先直连,遗漏的域名靠检查和补规则,不靠猜。
换了代理工具,别直接照贴参数
这套例子用 Surge 讲清了“域名请求遇上 IP 规则为什么会先解析”,也展示了修复后 FINAL 会怎样影响分流。Shadowrocket 和其他代理工具可以借鉴排查顺序,但配置语法与处理方式要看各自的规则。回头检查时,除了看 DNS 链路有没有变化,也要重新测试原本该直连或代理的网站,确认没有被分流规则带偏。如果两项结果打架,欢迎在文章评论里说明设备、网络、规则命中与检测页现象,我们再一起找是哪一步提前解析。
广告

