DNS污染怎么解决?先检测,再用加密DNS修复
简答:如果网页打不开、域名解析到异常地址,先不要只更换一个公共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.comnslookup example.com 1.1.1.1nslookup 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主机名 |
|---|---|---|---|
| Cloudflare | 1.1.1.1、1.0.0.1 | https://cloudflare-dns.com/dns-query | one.one.one.one |
| Google Public DNS | 8.8.8.8、8.8.4.4 | https://dns.google/dns-query | dns.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缓存,建议完全退出后重新打开。
- 先断开并重新连接当前网络,确认系统时间正确。
- 用原来的域名分别测试普通DNS和DoH,比较返回结果是否稳定。
- 访问目标网站,确认问题是“域名解析失败”还是“解析正常但连接失败”。
- 如果解析已正常但网页仍打不开,按本地网络、节点或出口、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或应用层连接一定正常。