DNS缓存污染导致应用访问异常,本质是错误域名-IP映射被缓存,请求连至假地址;需按报错类型判断污染层级,用nslookup/dig多点比对定位污染节点,并检查hosts、清本机及路由器DNS缓存、更换公共DNS验证。

DNS缓存污染导致的应用访问异常,本质是系统或中间设备把错误的域名-IP映射存进了缓存,结果应用发请求时连到了假地址。排查不能只清本机缓存,得从“谁给的错答案”入手,一层层往上追。
看应用报错类型,快速判断污染层级
不同报错指向不同污染位置:
- DNS_PROBE_FINISHED_NXDOMAIN 或 “无法解析主机名” → 污染发生在解析起点,可能是本地 hosts、系统 DNS 缓存,或内网 DNS 服务器根本没返回记录;
- ERR_CONNECTION_REFUSED 或能 ping 通 IP 但端口不通 → 解析出了 IP,但不是你该连的服务地址,大概率是 DNS 返回了错误 IP(如被篡改的 A 记录或 CNAME);
- 应用日志里显示连接到了 10.x.x.x、192.168.x.x 或明显不属于你服务网段的公网 IP → 基本确认是缓存污染,且污染源在递归 DNS 层(如路由器、ISP DNS 或公司内部 DNS);
- 同一应用在不同网络下表现不一(比如办公室打不开、手机热点能用)→ 污染锁定在当前网络出口的 DNS 链路中。
用 nslookup / dig 多点比对,定位污染节点
别只查一次默认 DNS。打开命令行,按顺序执行:
- 查本机默认解析:
nslookup your-app-domain.com,记下返回 IP 和服务器(Server 字段); - 直连权威 DNS 查:
nslookup your-app-domain.com ns1.your-dns-provider.com(如阿里云是dns1.hichina.com),看权威是否返回正确 IP; - 换干净公共 DNS 查:
nslookup your-app-domain.com 223.5.5.5(阿里)、nslookup your-app-domain.com 119.29.29.29(腾讯),对比三者结果; - 若权威和公共 DNS 结果一致且正确,但默认 DNS 返回不同 IP → 污染就在你本地到默认 DNS 这一段(路由器、ISP 或企业 DNS 缓存中毒)。
检查本地环境是否参与污染
很多“污染”其实来自你自己的设备或局域网:
- 查 hosts 文件:打开
C:\Windows\System32\drivers\etc\hosts(Windows)或/etc/hosts(Linux/macOS),删掉所有非注释行中与问题域名相关的条目; - 清本机 DNS 缓存:
ipconfig /flushdns(Windows)、sudo dscacheutil -flushcache(macOS)、sudo systemd-resolve --flush-caches(部分 Linux); - 重启 DNS 客户端服务(Windows):在服务管理器中重启 Dnscache;
- 重启路由器:它自带 DNS 缓存,断电 30 秒再上电,可清掉顽固缓存;
- 临时改 DNS:把网卡 IPv4 的 DNS 改成
223.5.5.5和119.29.29.29,再测应用是否恢复。
验证真实解析路径,绕过干扰链路
排除一切本地变量后,用外部视角确认:
- 用手机开热点,电脑连上去跑应用 → 若恢复正常,说明原网络的 DNS 或中间设备有问题;
- 访问 dnschecker.org,输入域名,查全球各地区解析结果 → 如果多数节点返回错误 IP,说明权威配置被改;如果仅中国部分节点异常,大概率是运营商级污染;
- 对关键服务(如 API 域名),额外查 SRV 或 TXT 记录:
nslookup -type=SRV _api._tcp.yourapp.com,防止只盯 A 记录而忽略服务发现类记录也被污染。


















