机场 DNS 异常排查完全手册:DNS 污染、泄露检测与 Fake-IP 最佳配置
开启代理后为何网站依然打不开或报证书错误?本文深度拆解 DNS 污染的原理、如何使用在线工具检测 DNS 泄露,以及在 Clash Verge、Shadowrocket 与 sing-box 中配置防污染防泄露 DNS 的标准模板。
4 分钟阅读
问题解决
节点正常但网页打不开、网站跳转到错误地址、DNS 泄露检测显示国内运营商?本页说明 DNS 污染、DNS 泄露与解析失败三种症状的成因,解释客户端的 fake-ip 与 redir-host 模式,并给出七步排查流程与推荐的 DNS 设置。
更新于
fake-ip 模式,并把境外 DNS 走代理查询;sing-box 用对应的 FakeIP 策略。 DNS 把域名翻译成 IP 地址,是每一次访问的第一步。它出问题时表现往往很迷惑:节点延迟测试一切正常,浏览器却打不开网页,或者打开的是一个错误的页面。很多用户在这种情况下反复换节点,其实问题根本不在节点上。
本页覆盖机场用户最常遇到的三类 DNS 问题——污染、泄露、解析失败——并解释客户端里 fake-ip 与 redir-host 两种模式的区别。如果你从没改过客户端的 DNS 设置,先看“逐步排查”的前三步就能解决大部分问题;进阶的 DNS 与分流配置见高级配置。
三种问题的表现各不相同,判断起来并不难。先看浏览器给出的错误信息,再做一次泄露测试,就能确定属于哪一类。
ERR_CONNECTION_RESET、证书错误或跳到一个无关页面;在终端用 nslookup 查询该域名得到的 IP 与正常结果不符。污染发生在解析请求走了不可信的 DNS 服务器时。DNS_PROBE_FINISHED_NXDOMAIN 或“找不到服务器”,所有网站都打不开,但客户端里节点延迟正常。这是客户端或系统的 DNS 配置本身出了错,流量根本没有走到节点。下表列出了三类症状背后的具体原因。注意有两项与客户端无关:浏览器的“安全 DNS”和路由器的 DNS 设置,它们会绕过客户端直接发起解析,很容易被忽略。
| 原因 | 判断方法 | 处理 |
|---|---|---|
| 解析请求没有经过客户端,直接发给了国内 DNS | 泄露检测显示国内运营商;客户端 DNS 功能未启用 | 启用客户端 DNS,使用 fake-ip 模式,或开启 TUN 模式接管全部 DNS 请求 |
| 客户端 DNS 配置中的上游服务器不可达 | 所有网站解析失败,日志中出现 DNS 超时 | 把境外 DNS(如 DoH 地址)设置为通过代理查询,并保留一个国内 DNS 作为国内域名的上游 |
| 浏览器开启了“安全 DNS”且与客户端冲突 | 只有某个浏览器打不开,其他应用正常 | 在浏览器设置中关闭“使用安全 DNS”,交给客户端处理 |
| 系统或路由器指定了固定 DNS | 换了客户端设置但结果不变;路由器后台填写了特定 DNS | 把系统与路由器的 DNS 恢复为自动获取,由客户端接管 |
| fake-ip 模式下某些应用不兼容 | 游戏、局域网设备或特定软件连不上,网页正常 | 把这些域名加入 fake-ip-filter,或为该应用切换到 redir-host |
| DNS 缓存保留了错误结果 | 修改设置后仍然打开错误页面,隔一段时间自行恢复 | 清除系统与浏览器 DNS 缓存,重启客户端 |
| 所用规则集把域名判断为国内直连 | 某个海外网站不走代理,解析也走了国内 DNS | 检查分流规则,把该域名加入代理规则 |
先简要说明两种客户端 DNS 模式。redir-host:客户端先把域名解析成真实 IP,再决定走代理还是直连,缺点是解析过程本身可能被污染。fake-ip:客户端对需要代理的域名返回一个内部假 IP(通常在 198.18.0.0/16 段),把域名原样交给节点在远端解析,从根本上避开本地污染,也是目前多数客户端的推荐模式。
验证节点本身是否正常
在客户端里对节点做延迟测试。节点超时属于节点连接失败,不在本页范围;节点正常而网页打不开,继续往下。
用命令行验证解析结果
在终端执行 nslookup 目标域名。返回超时说明解析失败;返回的 IP 明显异常(如指向国内地址或保留地址)说明被污染;fake-ip 模式下返回 198.18.x.x 属于正常现象。
检查客户端 DNS 设置
Clash Verge、Stash 等客户端在设置或配置中确认 DNS 已启用、模式为 fake-ip、上游包含至少一个通过代理查询的境外 DoH 地址;sing-box 在 dns 配置块中使用对应的 fakeip 策略。使用机场默认配置时通常已经设好,但有的机场会关闭 DNS 模块。
清除系统与浏览器缓存
Windows 执行 ipconfig /flushdns,macOS 执行 sudo dscacheutil -flushcache 并重启 mDNSResponder;浏览器在 chrome://net-internals/#dns 一类页面清除缓存。改了设置不清缓存,旧结果会继续生效。
关闭浏览器的安全 DNS
Chrome、Edge、Firefox 的“安全 DNS / DoH”会绕过客户端直接向指定服务器发请求。关闭它,让解析统一经过客户端。
开启 TUN 模式
系统代理模式只能接管支持代理的应用,TUN 模式会接管全部流量包括 DNS 请求。打开 TUN 后泄露问题通常立即消失;TUN 需要管理员或系统扩展权限,授权问题见客户端异常。
检查路由器与系统 DNS
把路由器 WAN 口与系统网卡的 DNS 都恢复为自动获取。路由器层面指定的 DNS 会影响全部设备,是“怎么改客户端都没用”的常见原因。
七步之后仍然解析失败或持续泄露,剩下的可能性集中在两处:机场下发的配置里 DNS 部分写得有问题,或者你的网络环境对 DNS 流量做了劫持(部分运营商和校园网会把所有 53 端口的请求劫持到自己的服务器)。
围绕「DNS问题」的深入文章与教程。
开启代理后为何网站依然打不开或报证书错误?本文深度拆解 DNS 污染的原理、如何使用在线工具检测 DNS 泄露,以及在 Clash Verge、Shadowrocket 与 sing-box 中配置防污染防泄露 DNS 的标准模板。
4 分钟阅读