FlyingBird返回首页

DNS污染怎么解决?先检测,再用加密DNS修复

更新于 2026-10-23 · flyingbird.buzz

简答:如果网页打不开、域名解析到异常地址,先不要只更换一个公共DNS:用系统或明文DNS与DoH结果做对照。若明文查询异常而DoH正常,优先改用DoH或DoT;若两者都异常,再排查本地网络、缓存、节点、路由器和目标站本身。

定义:DNS污染是域名解析请求在传输途中遭到伪造或篡改,设备因此获得错误、异常或不可用的解析结果;DoH和DoT通过加密DNS传输降低这类链路干扰。

先做对照:确认是不是DNS污染

DNS负责把域名解析为IP地址。出现网页打不开、跳到异常页面或同一域名在不同网络表现不一致时,可能是本地缓存、DNS服务器故障、解析链路干扰,也可能是网站自身异常,不能只凭一个症状直接下结论。DNS over HTTPS(DoH)把DNS请求放进HTTPS中传输,DNS over TLS(DoT)则通过TLS连接传输;两种方式都不同于传统的明文DNS。可参考RFC 8484关于DoH的定义和RFC 7858关于DoT的定义。

对照结果更可能的原因下一步
系统DNS或明文查询异常,DoH结果正常解析链路可能存在污染、伪造或劫持改用DoH或DoT,并关闭明文回退
系统DNS、指定公共DNS和DoH都失败本地网络、路由、服务器不可达或域名本身异常先换网络,再检查节点、路由和目标域名
解析结果正常,但网页仍打不开不一定是DNS问题,可能是连接、MTU、代理或应用层故障继续排查TCP连接、系统代理和客户端权限

Windows可在命令提示符中运行:

nslookup example.com
nslookup example.com 1.1.1.1
nslookup example.com 8.8.8.8

这些nslookup查询仍属于传统DNS查询,指定公共DNS地址不等于启用了加密DNS。Cloudflare的官方排障文档也建议将多个解析器的结果进行对照,并提供了Windows、macOS和Linux示例命令,见Cloudflare DNS Resolver排障说明。

再用DoH查询做对照。Windows PowerShell可运行:

(Invoke-WebRequest -Uri 'https://cloudflare-dns.com/dns-query?name=example.com&type=A' -Headers @{accept='application/dns-json'}).Content

macOS或Linux终端可运行:

curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=A'

DoH端点和查询方式可核对Cloudflare官方DoH请求说明。如果明文查询返回明显异常结果,而DoH返回的记录正常,这只能说明解析传输链路存在可疑差异,仍应换网络或换另一家DoH服务复核。

最快修复:启用DoH或DoT,而不是只改IP地址

只把DNS服务器改成1.1.1.1、8.8.8.8等地址,查询仍可能通过传统的UDP或TCP DNS传输。真正针对传输链路干扰的设置,应选择DoH或DoT。DoH通常使用HTTPS端口443;DoT通常使用TLS端口853。相关协议特性可见Cloudflare DoH说明和Cloudflare DoT说明。

服务传统DNS地址DoH地址DoT主机名
Cloudflare1.1.1.1、1.0.0.1https://cloudflare-dns.com/dns-queryone.one.one.one
Google Public DNS8.8.8.8、8.8.4.4https://dns.google/dns-querydns.google

Cloudflare公开列出了上述地址和端点,见Cloudflare解析器端点说明;Google的DoH和DoT端点见Google Public DNS安全传输说明。不要把DoH地址当作普通DNS服务器IP填写;普通DNS输入框通常需要IP地址,DoH则需要客户端或系统提供的HTTPS模板。

Windows 11:打开“设置”→“网络和Internet”→选择当前Wi-Fi或以太网→“硬件属性”或“DNS服务器分配”→“编辑”→选择手动,填写DNS地址后,将“DNS over HTTPS”设为自动或手动,并关闭明文回退。微软说明Windows 11提供自动模板和手动模板,Windows 10不提供该系统级DoH选项,具体界面以当前版本为准,见微软Windows网络设置说明。

macOS:打开“系统设置”→“网络”→选择Wi-Fi或以太网→“详细信息”→“DNS”,可添加IPv4或IPv6 DNS地址。这个入口改的是普通DNS地址;系统级加密DNS需要使用支持DoH或DoT的配置文件、客户端或网络工具,不能把普通DNS输入框误认为加密DNS入口。菜单路径见Apple Mac DNS设置说明,Apple也说明了通过配置向加密DNS服务器发送请求的方式,见Apple设备加密DNS配置说明。

手机和路由器怎么处理

iPhone:进入“设置”→“Wi-Fi”→点击当前网络右侧的信息按钮→“配置DNS”,可以为该Wi-Fi网络填写DNS服务器。Apple的官方路径见iPhone Wi-Fi设置说明。这里填写的是该Wi-Fi连接使用的DNS地址,通常不是DoH或DoT配置;蜂窝数据不通过这个Wi-Fi入口修改。若要在系统层使用加密DNS,应使用可信的配置描述文件或支持加密DNS的应用,避免安装来源不明的描述文件。

Android:打开“设置”→“网络和Internet”→“私人DNS”,选择“自动”或“私人DNS提供商主机名”→保存。Google说明了这一入口以及“关闭、自动、私人DNS提供商主机名”选项,并提醒私人DNS只保护DNS问题和答案,不会保护其他流量,见Google Android网络设置说明。Android私人DNS以系统和服务商实际支持的加密方式为准;不同系统版本、厂商界面和已知服务商的实现可能不同,不要把所有设备都绝对归类为只使用某一种协议。

路由器:如果所有连接到同一Wi-Fi的设备都出现相同解析异常,可以在路由器的Internet、WAN或DHCP设置中检查DNS;若路由器支持DoH或DoT,优先使用其加密DNS功能。修改前记录原有配置,保存后重启路由器和终端。若只有一台设备异常,应先处理该设备,不要直接改动全家网络的路由器设置。

如果你使用代理客户端或办公网络客户端,客户端可能接管系统DNS。此时应在客户端DNS设置中选择其官方支持的DoH或DoT格式,避免同时开启多个DNS接管模块;如果客户端启用了TUN或系统代理,也要检查其权限和DNS模式。客户端页面没有明确说明协议时,按客户端文档和账户面板为准。

清缓存、验证和继续排查

修改设置后先清理本地缓存,再重新查询。Windows命令提示符可运行ipconfig /flushdns,微软说明该参数会清空并重置DNS客户端缓存,见Microsoft ipconfig命令说明。浏览器也可能保留自己的连接或DNS缓存,建议完全退出后重新打开。

  1. 先断开并重新连接当前网络,确认系统时间正确。
  2. 用原来的域名分别测试普通DNS和DoH,比较返回结果是否稳定。
  3. 访问目标网站,确认问题是“域名解析失败”还是“解析正常但连接失败”。
  4. 如果解析已正常但网页仍打不开,按本地网络、节点或出口、DNS、MTU、系统代理与TUN权限的顺序继续排查。

Cloudflare提供了1.1.1.1帮助检测页,可用于检查设备是否通过其解析器工作;但单个检测页只能说明该次连接和解析情况,不能证明所有网络、域名和应用都正常。若DoH请求本身超时,Cloudflare建议进一步检查到解析器的网络可达性和路由,见官方排障文档。

如果系统DNS和DoH都返回正常地址,但网页依旧打不开,问题通常不应继续归因于DNS。此时可测试其他网络、暂时关闭重复的代理或TUN接管、检查MTU和防火墙,并确认目标服务是否只对某些网络出口不可达。不要通过修改hosts长期固定未经核验的IP,因为网站解析会变化,错误记录还可能掩盖真正的连接问题。

常见误区速查

  • 误区一:改成公共DNS就等于防污染。不一定。若仍走明文DNS,链路上的伪造响应仍可能影响结果;应确认客户端真正启用了DoH或DoT。
  • 误区二:网页打不开一定是DNS污染。不一定。连接失败、MTU、代理权限、节点不可达和网站自身故障也会产生相似现象。
  • 误区三:手机Wi-Fi里填DNS就是加密DNS。通常不是。iPhone的Wi-Fi DNS入口主要是填写DNS服务器地址,加密DNS需要系统配置、描述文件或支持该协议的应用。
  • 误区四:所有Android手机的私人DNS行为完全相同。不应这样判断。系统版本、厂商实现和服务商支持可能影响实际协议,以设备的当前设置和连接结果为准。

常见问题

DNS污染怎么判断?

先用系统DNS、指定公共DNS和DoH分别查询同一域名。若系统DNS或明文查询返回异常,而DoH结果正常,说明解析链路存在可疑差异;再换网络或换另一家DoH服务复核,不能只凭一次查询下结论。

把DNS改成1.1.1.1或8.8.8.8就能解决吗?

不一定。直接填写1.1.1.1或8.8.8.8通常仍可能使用明文DNS;更有针对性的做法是使用客户端支持的DoH或DoT,并检查是否允许失败后回退到明文。

Android私人DNS是不是一定使用DoT?

不能对所有Android设备绝对下结论。系统提供“私人DNS”入口,但实际协议可能受系统版本、厂商实现和服务商支持影响,应以设备当前行为和客户端说明为准。

iPhone在哪里设置DNS?

连接Wi-Fi后进入“设置”→“Wi-Fi”→当前网络右侧信息按钮→“配置DNS”。这个入口通常填写普通DNS服务器地址;系统级DoH或DoT需要可信配置描述文件或支持加密DNS的应用。

DNS已经恢复,网页还是打不开怎么办?

先确认域名能稳定解析,再按本地网络、出口或节点、MTU、系统代理、TUN权限和目标站可达性继续排查。DNS正常并不代表TCP、TLS或应用层连接一定正常。

相关阅读

参考资料

  1. RFC 8484:DNS Queries over HTTPS
  2. RFC 7858:DNS over TLS
  3. Cloudflare DNS Resolver排障说明
  4. Cloudflare DNS over HTTPS说明
  5. Cloudflare DNS over TLS说明
  6. Cloudflare解析器端点说明
  7. Google Public DNS安全传输说明
  8. 微软Windows网络设置说明
  9. Apple Mac DNS设置说明
  10. Apple设备加密DNS配置说明
  11. Apple iPhone Wi-Fi设置说明
  12. Google Android网络设置说明