本地DNS解析和公共DNS解析结果不一样怎么办?
当你输入一个网址,结果页面要么打不开,要么跳到一个莫名其妙的广告页,但用手机流量访问却一切正常——这种情况,十有八九是DNS解析出了问题。最直接的信号就是:用本地DNS查询到的IP地址,和用公共DNS查到的结果完全不一样。这两个结果不一致,不一定就是DNS污染,也可能是缓存没清、hosts文件写了静态绑定,或者CDN调度正常返回了不同节点。这篇文章把差异原因和污染判断方法拆开讲清楚,照着流程走一遍,自己就能判断是不是被污染了。
第一步:先搞清楚“不一样”是哪种不一样
发现两个DNS结果对不上,先别急着下“被污染了”的结论。搜索结果显示,至少有五种常见原因会导致解析结果不一致。
1. 本地DNS缓存没更新
操作系统、浏览器、路由器都会缓存DNS解析记录,而且遵循TTL时效。你改了域名解析之后,本地缓存可能还在用旧IP,但公共DNS实时拉取的是最新的权威解析结果,两者自然对不上。这是最常见的原因。
2. hosts文件或路由器配置被篡改
电脑的hosts文件里如果写了某个域名的静态IP绑定,就会绕过正常的DNS解析流程,导致本地解析结果完全失真,跟公共DNS的标准结果肯定不一样。
3. CDN正常调度返回不同节点
如果你的域名用了CDN,访问同一个域名时,CDN会根据客户端所在网络自动分配不同的边缘节点。浏览器可能连到最近的CDN节点,而nslookup查询到的可能是另一个区域的节点,IP不同但完全正常,跟污染没关系。
4. 运营商DNS做了智能分流
部分运营商会缓存域名旧记录、做智能分流,甚至轻微劫持解析。而公共DNS严格同步权威服务器数据,二者结果自然不同。
5. 浏览器启用了DoH加密DNS
Chrome、Firefox等现代浏览器默认会启用DoH,会绕过系统DNS设置,直接用浏览器内置的加密DNS服务。这就导致nslookup用的是系统DNS,浏览器实际走的是DoH,解析结果可能完全不同。
第二步:拿回控制权——只对比“同一管道”的结果
为了避免被上面那些因素干扰,要做一次干净的对比——用同样的工具、同样的方式,分别通过本地DNS和公共DNS查询同一域名。
用nslookup(Windows/Linux/macOS通用)
先查本地DNS的结果:
nslookup 你的域名.com
记下返回的IP地址。
再指定公共DNS服务器查一次:
nslookup 你的域名.com 8.8.8.8
或者用国内的114.114.114.114。
用dig(Linux/macOS)
本地查询:
dig 你的域名.com +short
指定公共DNS查询:
dig @8.8.8.8 你的域名.com +short
搜索结果显示,如果两次返回的IP地址差异较大,且更换公共DNS后能正常访问网站,大概率存在DNS污染。
第三步:判断污染的三个核心指标
拿到两个IP之后,用下面三个标准判断:
1. 本地DNS返回的IP是不是“一眼假”
如果本地解析的结果是127.0.0.1(本机回环地址)、192.168.x.x(局域网地址)、或者是一个你根本不认识的奇怪IP,而公共DNS返回的是正常地址,那基本可以确认是污染。
2. 重复查询结果是否稳定
用nslookup对同一个域名反复查询几次。如果是污染,返回的假IP可能每次都变,或者固定指向某个无效地址。而正常的域名,不管查几次,权威记录应该是一致的。
3. 用ping验证连通性
对本地DNS返回的IP执行ping。如果ping请求超时,或者丢包率极高,而该网站在其他网络环境下能正常访问,说明本地解析的IP地址可能是被污染的虚假地址。
第四步:排除“假阳性”——缓存和hosts先过一遍
在确认污染之前,先把缓存和配置异常这两个干扰项排除掉。
清空本地DNS缓存
Windows:
ipconfig /flushdns
macOS:
sudo killall -HUP mDNSResponder
Linux(取决于系统服务):
sudo systemd-resolve --flush-caches
清完缓存之后再执行一次nslookup对比。
检查hosts文件
Windows路径:C:\Windows\System32\drivers\etc\hosts
Linux/macOS路径:/etc/hosts
如果里面写了目标域名的静态IP绑定,删掉那行配置再试。
第五步:多节点交叉验证——锁定污染范围
只对比本地DNS和一个公共DNS的结果还不够,推荐用多个公共DNS做交叉验证,锁定污染到底发生在哪个环节。
可以依次用这几个公共DNS查询同一个域名,并对比结果。
如果所有公共DNS返回的IP一致,唯独本地默认DNS返回的IP不同,说明污染发生在本地网络层面(运营商DNS被篡改或劫持)。
如果多个公共DNS返回的IP都不一致,CDN正常调度的可能性更大,不是污染。
处理流程总结:
第一步:用nslookup分别通过本地DNS和公共DNS查询同一域名,拿到两个IP地址。
第二步:检查本地DNS返回的IP是否明显异常(127.0.0.1、192.168.x.x、IP完全不通等)。
第三步:清空本地DNS缓存,检查hosts文件,排除缓存和静态配置干扰。
第四步:用多个公共DNS做交叉验证,判断污染发生在本地还是网络层面。
第五步:如果确认为污染,把本机DNS切换成公共DNS,同时清空缓存。
第六步:如果污染持续存在(尤其是在公司网络或运营商层面),考虑启用DoH加密DNS绕过运营商默认解析。
“解析结果不一样”不一定是天塌了,但要搞清楚原因,就得按流程一步步拆——先排除缓存和配置干扰,再用多个公共DNS做交叉对比。用这套流程走下来,自己就能判断到底是DNS污染还是正常现象。
CN
EN