HIYOO嗨游加速器

DNS污染怎么判断和解决?先用 DoH、dig 和 HTTPS 复核

更新于 2026-11-13 · mhiyoo.buzz

简答:先不要只看 ping 或单个 IP:DNS污染、DNS劫持、缓存异常、CDN变化、端口故障和证书错误都可能表现为网页打不开。最小可行流程是对比默认DNS、DoH或 TCP DNS,再用 HTTPS 请求和另一条网络复核。若开启 Mihomo 等客户端的 fake-ip,返回 198.18.x.x 可能是客户端映射地址,不应直接判定为污染。

定义:DNS污染是对域名解析结果受到异常干扰或返回异常数据的通俗说法,但单个 IP 不同、ping 失败或网页打不开,都不能单独证明发生了 DNS 污染。

先看速查卡:5分钟判断该查 DNS 还是查网页连接

假如你遇到网页打不开、连接超时、证书错误或换浏览器也无效,先按下面顺序记录结果。不要一开始就修改 hosts,也不要把所有异常 IP 都当作污染。

检查层可复制命令或动作结果判断
默认解析nslookup example.com 或 dig example.com记录实际使用的 DNS、状态、A/AAAA/CNAME 和 TTL。
绕开明文 UDPdig +tcp @1.1.1.1 example.comTCP 查询与默认 UDP 结果不同,说明需要继续检查 UDP 链路或递归 DNS;不能单独定性。
DoH 对照curl -sS -H "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=example.com&type=A"通过 HTTPS 查询 DNS,结果可与明文 DNS 对照;仍需考虑 DoH 服务本身、代理和网络策略。
HTTPS 复核curl -I --connect-timeout 8 https://example.com/解析正常但 HTTPS 失败时,转查端口、代理、TLS、CDN 或源站。
换网络切换手机热点或另一条已知正常网络只有某个网络持续异常时,才更值得检查该网络的 DNS、路由或接管组件。
客户端接管检查 Mihomo 的 DNS 模式、TUN、fake-ip 和本地监听端口返回 198.18.x.x 可能是 fake-ip 映射;先确认客户端配置和日志。

最小结论:至少完成“默认 DNS、DoH 或 TCP DNS、HTTPS、另一网络”四类检查,再决定是否修改 DNS。ping 只能测试 ICMP 是否有响应,不能证明网页可访问,也不能单独证明 DNS 污染。

curl 支持通过 --doh-url 使用 DNS-over-HTTPS;BIND 的 dig 支持 +tcp 和 +trace,可用于区分查询传输方式和观察委派链路。查看 curl 官方参数说明;查看 BIND 9 dig 文档。

DNS污染、DNS劫持和普通故障怎么区分

DNS污染或解析链路异常:同一域名、同一记录类型在某个网络中持续返回异常地址、错误状态或超时,而 DoH、TCP DNS、权威查询或另一条网络得到明显不同的结果。这里的“持续”和“多源不一致”比一次查询更重要。

DNS劫持:查询被路由器、公共网络、软件或其他中间环节改写,常见表现可能是广告页、登录引导、明显无关的 IP 或错误页面。仅凭不同 IP 不能定性,因为 CDN、负载均衡、IPv4/IPv6 和地域解析本来就可能返回多个正常地址。

本地缓存或配置问题:只有当前设备异常,刷新缓存、恢复自动 DNS、关闭浏览器安全 DNS 或停用本地代理后恢复,优先排查本机。

服务器、端口、证书或 CDN 问题:多个 DNS 查询结果一致,但 HTTPS 仍超时、握手失败或返回 4xx/5xx,应转查 TCP 443、代理、TLS 证书、CDN 回源、防火墙和源站状态。

看到的结果可能含义下一步
NXDOMAIN查询方认为域名不存在,或委派、权威配置、缓存存在问题对比 DoH、权威 DNS 和另一网络,并核对 NS 记录。
SERVFAIL递归 DNS 处理失败,可能涉及委派、DNSSEC 或上游异常查询权威 DNS,站长再检查 DS、DNSKEY、RRSIG 和 NS。
DNS 查询超时服务器未响应,也可能是 UDP/TCP 53 被阻断分别测试 TCP DNS、DoH 和另一网络。
多个正常 IP可能是 CDN、负载均衡、IPv4/IPv6 或地域解析核对 CNAME、证书和 HTTPS,不要只因 IP 不同定性。
返回 198.18.x.x可能是 Mihomo fake-ip 映射地址检查是否启用了 fake-ip,再用客户端日志或 real-ip 模式复核。
返回 127.0.0.1、0.0.0.0可能是本机拦截、广告过滤、hosts 或规则返回检查 hosts、过滤规则和本地 DNS 服务,不要直接认定为外部污染。
解析一致但网页打不开更像端口、TLS、代理、CDN 或源站问题执行 HTTPS 请求,再检查证书、代理和 443 端口。

Windows 的 nslookup 可以指定查询服务器,但它直接向 DNS 服务器发起查询,不能用来证明 Windows 本地缓存已经清除。Microsoft 文档说明,ipconfig /displaydns 查看 DNS 客户端缓存,ipconfig /flushdns 才是清理缓存。查看 Microsoft 的 ipconfig 说明。

Windows:分别验证 DNS 查询、系统缓存和浏览器缓存

  1. 先查默认 DNS:打开 Windows Terminal 或命令提示符,执行 nslookup example.com。记录 Server、Address、返回的 A/AAAA 记录和状态。若看到的是 198.18.x.x,先检查是否运行了 fake-ip 客户端。
  2. 做明文对照:执行 nslookup example.com 1.1.1.1。这个结果仍可能受到明文 DNS 链路影响,所以不要把它当作最终结论。
  3. 改用 TCP DNS:在安装了 BIND 工具的环境中执行 dig +tcp @1.1.1.1 example.com;Windows 没有 dig 时,可直接使用下面的 DoH 命令。TCP DNS 能绕开部分 UDP 查询差异,但它仍不是加密传输。
  4. 用 DoH 查询:执行 curl.exe -sS -H "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=example.com&type=A"。返回 JSON 后重点看 Status、Answer 和地址。DoH 结果也可能被浏览器、代理或本地安全软件影响,因此要记录执行环境。
  5. 验证 Windows 缓存:先执行 ipconfig /displaydns | findstr /i example.com,再执行 ipconfig /flushdns,最后再次执行 ipconfig /displaydns | findstr /i example.com。如果没有输出,不代表网页一定能打开,只表示缓存中未显示该域名。
  6. 验证实际解析:PowerShell 可执行 Resolve-DnsName example.com。它用于观察 Windows DNS 客户端路径,与直接指定服务器的 nslookup 不同。Microsoft 文档提供了 DNS 客户端缓存和解析相关 cmdlet 的说明。查看 Get-DnsClientCache 说明。
  7. 检查浏览器缓存:Chrome 可打开开发者工具,进入 Network 面板,右键请求列表并选择清除浏览器缓存;也可以完全退出浏览器后重开。不要把浏览器缓存问题与系统 DNS 缓存混为一谈。查看 Chrome DevTools 网络面板说明。
  8. 复核 HTTPS:执行 curl.exe -I --connect-timeout 8 https://example.com/。解析成功但这里超时或证书失败时,停止继续改 DNS,转查代理、TCP 443、TLS、CDN 和源站。

Mihomo 或代理客户端:先排除 fake-ip 误判

如果电脑或手机启用了 Mihomo、TUN、DNS 接管或 fake-ip,系统工具看到的地址可能不是目标站点的真实公网 IP。Mihomo 文档将 enhanced-mode 分为 fake-ip 和 redir-host,并把 fake-ip 默认示例范围写为 198.18.0.1/16;因此查询结果出现 198.18.x.x 时,第一反应应是检查客户端,而不是立即判定 DNS 污染。查看 Mihomo DNS 配置文档。

  1. 确认接管状态:打开客户端当前配置,查看 DNS 是否启用、是否设置 enhanced-mode: fake-ip、是否启用 TUN,以及 DNS 监听地址和端口。菜单名称和入口以当前客户端版本为准。
  2. 对比客户端外部查询:使用 DoH 命令查询同一域名,再与客户端日志或连接记录比较。如果 DoH 返回公网地址,而系统工具返回 198.18.x.x,更符合 fake-ip 映射现象。
  3. 临时切换模式复测:在保存原配置后,临时切换到 redir-host 或关闭 DNS 接管,再重复 nslookup、DoH 和 HTTPS 测试。不要同时修改 nameserver、fallback、TUN 和规则,否则无法判断是哪一项改变了结果。
  4. 检查本地监听:如果配置了本地 DNS 监听,例如 127.0.0.1:1053,应以配置文件实际端口为准。可用 nslookup example.com 127.0.0.1 指定查询,不能把默认系统 DNS 结果当成客户端 DNS 结果。
  5. 清理客户端缓存:如果客户端提供控制面板或 API,应使用其当前版本支持的 DNS 缓存清理入口;Mihomo API 文档列出了 DNS 缓存和 fake-ip 缓存清理接口,但是否启用 API、监听端口和认证方式取决于本地配置。查看 Mihomo API 文档。

常见误操作:把 198.18.x.x 写入 hosts、把 fake-ip 地址当成源站地址、同时开启多个 DNS 接管工具,都会让后续结果更难解释。先恢复单一解析路径,再做对照。

macOS 和 Linux:用 dig、DoH 与缓存清理分层验证

macOS:打开“终端”,执行 dig example.com,再执行 dig @1.1.1.1 example.com 和 dig +tcp @1.1.1.1 example.com。重点查看 status、ANSWER SECTION、TTL、A/AAAA/CNAME 记录和 SERVER 行。若需要观察委派链路,可执行 dig +trace example.com;它会逐级查询根、顶级域和权威服务器,受到网络策略影响时,一次失败不能直接定性。

修改 macOS DNS 的入口是“苹果菜单 → 系统设置 → 网络 → 当前网络服务 → 详细信息 → DNS”,可添加 IPv4 或 IPv6 DNS 地址。查看 Apple 的 Mac DNS 设置说明。清理本机缓存时,可执行:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

该命令是否适用于当前 macOS 版本和本地网络扩展,需要以系统表现为准;执行后仍应重新运行 dig 和 HTTPS 测试,而不是只看命令是否返回文字。

Linux:执行 dig example.com、dig +tcp @1.1.1.1 example.com 和 resolvectl status,查看当前接口实际使用的 DNS。使用 systemd-resolved 时,可执行 resolvectl flush-caches 清理缓存,再重新查询。不同发行版的网络管理服务可能不同,若没有 resolvectl,先检查系统是否使用 NetworkManager、dnsmasq 或其他本地解析服务。BIND 文档说明,dig @server name type 可指定服务器,+tcp 可改用 TCP,+trace 可观察委派路径。查看 BIND 9 dig 官方文档。

Android 和 iPhone:给出可照做的 DNS 设置路径

Android:不同厂商 ROM 的菜单可能叫“私人 DNS”“专用 DNS”或“加密 DNS”,路径通常是“设置 → 网络和互联网/连接 → 私人 DNS”,也可以在设置搜索框输入“私人 DNS”。选择“私人 DNS 提供商主机名”,再输入服务商提供的主机名,例如 dns.google 或 one.one.one.one,保存后关闭并重新打开 Wi-Fi。Google 的 Pixel 文档给出的选项包括“关闭”“自动”和“私人 DNS 提供商主机名”,并提醒私人 DNS 只保护 DNS 查询与响应,不会保护其他网络流量。查看 Google Pixel 的私人 DNS 设置说明。

如果找不到该入口,可能是系统版本、厂商界面、工作资料、VPN 或 DNS 应用接管了设置。排查时一次只停用一个接管组件,避免同时更改私人 DNS、VPN 和代理。

iPhone:先连接目标 Wi-Fi,再按“设置 → Wi-Fi → 当前网络右侧的 ⓘ → 配置 DNS → 手动 → 添加服务器 → 输入 DNS 地址 → 存储”。Apple 的 iPhone 使用手册确认,连接 Wi-Fi 后可在当前网络详情中配置 DNS、HTTP 代理等网络设置。查看 Apple 的 iPhone Wi-Fi 设置说明。

这类手动 DNS 设置通常只作用于当前 Wi-Fi 网络,切换到蜂窝网络后不一定沿用。iOS 的加密 DNS 通常需要描述文件、设备管理配置或相关网络 App;Apple 文档说明,受管理设备可以通过 DNS 设置配置 DoH 或 DoT。查看 Apple 的加密 DNS 配置说明。如果手机启用了 VPN、内容过滤或安全软件,实际查询路径可能由这些组件接管。

确认后怎么解决:普通访问者与站长分开处理

普通访问者

  1. 先保存原始结果:域名、查询时间、网络类型、默认 DNS、错误代码和客户端状态。
  2. 刷新本地 DNS 缓存,重新连接 Wi-Fi 或网线,再做一次默认 DNS 查询。
  3. 使用 DoH 或 TCP DNS 做对照。如果结果恢复但 HTTPS 仍失败,转查端口、TLS、代理、CDN 或源站。
  4. 确有解析器或明文 DNS 路径异常时,再临时更换可信 DNS。公共 DNS 服务商可能看到你的 DNS 查询记录;更换前要考虑隐私、企业内网解析、家长控制、分流和兼容性。
  5. 不要长期依赖 hosts 修复。hosts 会覆盖后续 DNS 结果,目标 IP 变化后可能失效,也可能造成证书错误;使用前保存原文件,验证后及时恢复。

站长

  1. 在注册商控制台核对域名 NS 是否仍指向预期的权威 DNS。
  2. 向权威 DNS 查询 SOA、A、AAAA、CNAME 和 TXT,再与多个递归 DNS、DoH 结果比较。
  3. 检查 CDN、负载均衡、IPv6、证书覆盖域名、443 端口、防火墙和回源配置。多个 IP 只要都属于预期基础设施,就不能仅凭地址不同判断污染。
  4. 启用 DNSSEC 时检查 DS、DNSKEY 和 RRSIG 是否匹配。DNSSEC 可帮助验证 DNS 数据来源和完整性,但不能替代源站、端口、证书或流量防护检查。
  5. 建立不同网络、地区和记录类型的持续监控,保留状态码、TTL、返回地址和查询时间,避免用一次在线检测结果下结论。

最终复核标准:默认 DNS、DoH 或 TCP DNS、权威 DNS、HTTPS 请求、另一网络这五类结果中,至少有两类证据指向同一故障类型,再进行针对性修改。

相关排查入口

如果你已经确认是 Windows DNS 配置问题,可继续查看 Windows 10/11 DNS怎么修改;如果只是想清理本机缓存,可查看 Windows DNS缓存怎么清理。若 DNS 结果基本正常但网页仍打不开,可参考 打不开网页的分层排查步骤;需要比较解析响应时间时,可查看 DNS服务器怎么测试速度。

常见问题

DNS污染怎么判断最可靠?

至少对比默认 DNS、DoH 或 TCP DNS、权威 DNS,再用 HTTPS 请求和另一条网络复核。若某个网络持续返回与其他来源明显不一致的结果,才值得进一步怀疑解析链路受到干扰;单个 IP、ping 失败或网页打不开都不能单独定性。

DNS返回多个IP是不是DNS污染?

不一定。CDN、负载均衡、IPv4/IPv6 和地域解析都可能返回多个正常 IP。应继续检查 CNAME、TTL、地址归属、证书和 HTTPS 连接结果。

为什么 nslookup 显示的地址是 198.18.x.x?

如果启用了 Mihomo 或其他支持 fake-ip 的客户端,198.18.x.x 可能是客户端为域名建立的映射地址。先检查 fake-ip、TUN、DNS 接管和客户端日志,再用 DoH 或切换 real-ip/其他解析模式复核。

ipconfig /flushdns 后应该怎么验证?

不要只重新运行 nslookup,因为 nslookup 直接向 DNS 服务器查询。可先用 ipconfig /displaydns 查看缓存,再执行 ipconfig /flushdns,之后用 Resolve-DnsName、浏览器和 HTTPS 请求分别验证实际效果。

把DNS改成公共DNS就能解决吗?

不一定。更换 DNS 可能处理部分递归服务器、缓存或配置问题,但对端口、证书、代理、CDN、源站和网络策略故障没有直接修复作用。公共 DNS 服务商也可能记录查询,需要考虑隐私和内网兼容性。

DoH、DoT 和 dig +tcp 有什么区别?

dig +tcp 只是把 DNS 查询改用 TCP,仍不是加密传输;DoH 通过 HTTPS 发送 DNS 查询;DoT 通过 TLS 发送 DNS 查询。它们的网络路径、兼容性和可见性不同,任何一种结果都应结合 HTTPS 和另一网络复核。

iPhone 能不能直接给蜂窝网络设置 DNS?

iPhone 可以在当前 Wi-Fi 的“设置 → Wi-Fi → ⓘ → 配置 DNS → 手动”中添加 DNS。蜂窝网络通常不能通过同一个 Wi-Fi 页面直接设置,若要使用加密 DNS,通常需要描述文件、设备管理配置或相关网络 App。

站长如何判断是自己的域名配置错误?

先核对注册商 NS,再向权威 DNS 查询 SOA、A、AAAA、CNAME 和 TXT,并检查 DNSSEC 的 DS、DNSKEY、RRSIG。若权威结果本身错误,应修复解析控制台或委派,而不是只让访问者更换 DNS。

相关阅读

参考资料

  1. Microsoft Learn:ipconfig 命令与 DNS 客户端缓存
  2. Microsoft Learn:Get-DnsClientCache
  3. curl 官方文档:DoH 与命令行参数(curl.se)
  4. BIND 9 官方文档:dig 命令与 +tcp、+trace(bind9.readthedocs.io)
  5. Mihomo 文档:DNS 配置与 fake-ip 模式
  6. Mihomo 文档:DNS 与 fake-ip 缓存 API
  7. Chrome for Developers:DevTools 网络面板(developer.chrome.com)
  8. Apple 支持:在 Mac 上更改 DNS 设置
  9. Apple 支持:管理 iPhone Wi-Fi 设置
  10. Apple 支持:Apple 设备加密 DNS 配置
  11. Google Pixel 帮助:私人 DNS 与网络设置