网络急诊室 问题排查
DNS 错误与 DNS 污染排查指南:解析失败、fake-ip 与安全 DNS 冲突
网络急诊室 DNS 专题:解释 DNS 污染、解析失败与 DNS 泄漏的成因,说明代理客户端的 fake-ip 机制、浏览器安全 DNS 冲突与 IPv6 影响,并给出 Windows 与 macOS 的分步排查方法。
- 作者
- 网络研究组
- 首次发布
- 最后更新
- 内容类型
- 问题排查
- 阅读时间
- 约 4 分钟
快速判断
代理环境下的 DNS 问题主要有三类:域名被污染解析到错误地址、解析请求绕开了代理客户端、本地缓存了错误结果。处理顺序是:确认客户端的 DNS 功能已开启并正确接管解析,关闭浏览器的安全 DNS 等绕行设置,清除系统与浏览器 DNS 缓存,必要时关闭 IPv6 做对照。
Key Takeaways · 要点速览
- DNS 问题的典型表现是部分网站打不开、报解析错误,而不是全部断网。
- 浏览器的安全 DNS 可能绕开代理客户端的 DNS 处理,是常见冲突来源。
- fake-ip 模式下看到 198.18 开头的地址属于正常现象,不是解析错误。
- TUN 模式需要同时启用 DNS 接管,否则可能解析失败或发生 DNS 泄漏。
- 修改 DNS 设置后要清除系统与浏览器缓存,否则会继续使用旧结果。
解决步骤
-
确认是否为 DNS 问题
使用 nslookup 查询出问题的域名。无法解析、解析到明显异常的地址,或浏览器报 DNS 相关错误,说明问题在 DNS 层。
-
检查客户端 DNS 设置
在代理客户端中确认 DNS 功能已启用;使用 TUN 模式时,确认 DNS 接管或 DNS 劫持选项已开启。
-
关闭浏览器安全 DNS
在浏览器设置中关闭「使用安全 DNS」或「DNS over HTTPS」,让解析交由系统与代理客户端处理。
-
清除 DNS 缓存
Windows 执行 ipconfig /flushdns;macOS 执行 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder;然后重启浏览器。
-
关闭 IPv6 做对照
在客户端中关闭 IPv6 相关选项,或暂时在系统网络设置中禁用 IPv6,观察问题是否消失。
-
检查 hosts 与安全软件
检查系统 hosts 文件是否存在该域名的旧记录,并暂时关闭可能接管 DNS 的安全软件或加速器进行对照。
症状:哪些表现指向 DNS
直接回答:代理环境下的 DNS 问题,通常不是「完全上不了网」,而是「部分网站打不开」或「浏览器提示找不到服务器地址」。它主要来自三个方面:解析结果被污染、解析请求绕开了代理客户端、本地缓存了错误结果。按照「确认是 DNS 问题、检查客户端 DNS、排除绕行、清缓存」的顺序处理,绝大多数情况都能解决。
常见症状:
- 浏览器报
DNS_PROBE_FINISHED_NXDOMAIN、ERR_NAME_NOT_RESOLVED等解析错误; - 某几个网站始终打不开,其他网站正常;
- 开启 TUN 模式后部分网站无法访问;
- 切换节点没有任何改善,但全局模式下偶尔能打开;
- 偶发连接到错误的地址,出现证书错误或 TLS 握手失败。
快速判断:是不是 DNS 的问题
在终端中查询出问题的域名:
nslookup example.com
| 结果 | 含义 |
|---|---|
| 返回无法解析、超时 | 解析请求失败,DNS 层存在问题 |
| 返回 198.18 开头的地址 | 代理客户端的 fake-ip 机制,属于正常现象 |
| 返回明显异常的地址(如保留地址、与网站无关的地址) | 可能遭遇 DNS 污染或 hosts 残留 |
| 返回正常的公网地址,但网站仍打不开 | 问题可能不在 DNS,回到 通用排查流程 |
原因:代理环境下 DNS 为什么容易出错
DNS 污染
域名解析请求在传输途中被干扰,返回错误的 IP 地址。如果需要代理的域名用本地 DNS 解析,就可能拿到被污染的结果,即使后续流量走了代理也会连接失败。
fake-ip 与 redir-host 两种处理方式
多数基于 Mihomo 内核的客户端支持两种 DNS 处理方式:
| 模式 | 原理 | 特点 |
|---|---|---|
| fake-ip | 先返回一个虚拟地址,真正的解析交给节点在远端完成 | 速度快,避免本地污染;部分需要真实 IP 的程序可能不兼容 |
| redir-host | 本地先完成真实解析,再按规则转发 | 兼容性好,但对本地 DNS 质量依赖更大 |
在 fake-ip 模式下,nslookup 看到虚拟地址是正常的,不要因此误判为污染。部分局域网设备、游戏或需要真实 IP 的软件,可以通过客户端的 fake-ip 过滤列表排除。
绕开客户端的解析
- 浏览器安全 DNS:浏览器直接用加密 DNS 解析,完全绕开代理客户端,规则匹配和 fake-ip 都可能失效;
- 安全软件或加速器:部分软件会接管系统 DNS;
- TUN 模式未开启 DNS 接管:程序直接向外部 DNS 服务器发起解析,既可能失败,也会造成 DNS 泄漏。
缓存与残留
系统、浏览器都会缓存解析结果。修改设置后不清缓存,会继续使用旧的错误结果。hosts 文件中的旧记录优先级很高,也会导致解析到错误地址。
IPv6
当网络同时支持 IPv4 与 IPv6,而客户端或节点对 IPv6 支持不完整时,程序可能优先尝试 IPv6 地址并失败,表现为部分网站时好时坏。
分步排查
第一步:检查客户端 DNS 设置
确认客户端的 DNS 功能处于启用状态。使用 TUN 模式时,务必同时开启 DNS 接管或 DNS 劫持相关选项,设置位置以客户端界面为准,可参考 Clash Verge Rev TUN 模式设置。
第二步:关闭浏览器安全 DNS
- Chrome / Edge:在「隐私和安全」设置中找到「使用安全 DNS」,关闭;
- Firefox:在网络设置中关闭 DNS over HTTPS。
如果需要加密 DNS,可以在代理客户端中配置,避免两套机制冲突。
第三步:清除缓存
Windows:
ipconfig /flushdns
macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
清除后重启浏览器,让浏览器内部的缓存也一并失效。
第四步:关闭 IPv6 对照
在客户端中关闭 IPv6 相关选项后重试。如果问题消失,说明与 IPv6 有关,可以保持关闭,或确认节点与客户端对 IPv6 的支持情况后再启用。
第五步:检查 hosts 与安全软件
- Windows hosts 文件位于
C:\Windows\System32\drivers\etc\hosts; - macOS 与 Linux 位于
/etc/hosts。
删除与问题域名相关的旧记录(修改前先备份)。暂时关闭安全软件或加速器做对照。
症状与处理对照表
| 症状 | 可能原因 | 处理方式 |
|---|---|---|
| 浏览器报 NXDOMAIN 或无法解析 | 解析请求失败或被绕开 | 开启客户端 DNS,关闭浏览器安全 DNS |
| 开 TUN 后部分网站打不开 | 未开启 DNS 接管 | 开启 DNS 劫持相关选项 |
| 解析到异常地址 | DNS 污染或 hosts 残留 | 让代理域名由客户端解析,清理 hosts |
| 网站时好时坏 | IPv6 不兼容或缓存过期 | 关闭 IPv6 对照,清除缓存 |
| 出现证书错误 | 连接到了错误地址 | 先处理 DNS,再看 TLS |
| 局域网设备或游戏异常 | fake-ip 不兼容 | 加入 fake-ip 过滤列表 |
仍未解决怎么办
- 切换到全局模式并清除缓存后再试,确认是否为规则与 DNS 的组合问题;
- 将客户端的 DNS 设置恢复为默认值,重新导入订阅,排除自定义配置错误;
- 在另一台设备上使用同一订阅访问,判断是本机环境还是订阅配置的问题;
- 记录报错原文与
nslookup结果,参考 DNS 错误怎么办 或联系服务商。
说明DNS 问题与 TLS 问题经常同时出现:解析到错误地址后,TLS 握手自然会失败。先解决 DNS,再看 TLS,顺序不要颠倒。
常见问题
什么是 DNS 污染?
DNS 污染是指域名解析请求在传输途中被干扰,返回了错误的 IP 地址,导致连接失败或连接到错误的服务器。使用代理时,应让需要代理的域名由代理客户端处理解析,避免被污染的结果影响连接。
nslookup 查到的地址是 198.18 开头,是不是被污染了?
通常不是。这是代理客户端 fake-ip 模式分配的虚拟地址,常见为 198.18.0.0/16 网段,以客户端配置为准。客户端会在内部把虚拟地址映射回真实域名,再交给节点处理。
关闭浏览器的安全 DNS 会降低安全性吗?
在使用代理客户端时,解析请求由客户端处理,客户端通常也支持加密 DNS。关闭浏览器自带的安全 DNS 是为了避免两套机制冲突,可以在客户端中配置加密 DNS 作为替代。
什么是 DNS 泄漏,需要担心吗?
DNS 泄漏是指本应通过代理处理的解析请求直接发给了本地运营商的 DNS。它可能导致解析到被污染的地址,也会暴露访问的域名。开启客户端的 DNS 接管并让代理域名由客户端解析,可以减少泄漏。