DNS缓存投毒攻击怎么解决?多节点拨测核对各地解析,别只信本地结果
本机解析正常,用户却打到了别处
有天下午,一个用户说访问我的站会跳到奇怪的页面。我先在自己电脑上查了一遍解析,IP 是对的,浏览器打开也正常,当时差点回一句「你那边网络问题」。
后来让另一个城市的朋友帮忙看,他解析出来的 IP 根本不是我的。那一刻我才明白,我手里的「正常」,只代表我这一个出口的正常。
本地的结果,说明不了全局
本机查询要经过系统缓存、hosts、路由器的 DNS 转发,再到本地运营商的递归服务器。任何一层有缓存,你看到的都是它记着的旧答案。真要确认,得从不同地区、不同运营商的网络里分别问一遍。
这也是我拿宝塔拨测的 DNS 测速做第一步的原因:它从多个地区、多个运营商的节点同时查询,把各地返回的记录值和解析耗时摆在一起,还能按电信、联通、移动分组看,A、CNAME、MX、NS 这些记录类型也能分别核对。

DNS 查询:多地区多运营商解析结果对比
什么时候是分线路解析,什么时候是污染
这两件事表面很像:不同地方解析出不同 IP。区别在结果本身。
做 CDN 或智能解析的站,各地返回的地址通常属于同一家服务商,网段有规律,而且长期稳定,今天这样明天还这样。投毒的表现更零散:几个不相关的地区同时返回同一个陌生 IP,或者某些节点给出的地址压根不属于你的服务商。
判断的关键不在「不一样」,而在「返回的东西是不是你的」。
解析耗时和超时也在说话
查询耗时同样能提供线索。正常情况下各地有快有慢,但都在合理区间。如果某几个节点持续超时,或者解析时间突然拉长、其他地区却正常,就值得怀疑那条链路上的递归服务器出了问题。
页面上会列响应最快、响应最慢和平均响应,按地区与运营商分组陈列。单看平均值容易漏掉异常节点,我习惯直接看最慢的那几个是谁。
复测之后该动哪里
一次异常不算结论。换个时间段连测两三次,看返回的异常地址是否稳定出现。稳定复现,基本可以按解析异常处理;每次都不一样,先排查线路和节点本身。
确认是解析问题,就从域名侧查起:NS 记录有没有被改,权威解析里的记录值对不对,最近有没有动过解析服务商。这些都正常,再联系解析商清理递归缓存,条件允许的话把 DNSSEC 开起来。
我会警惕的几个信号
多地持续返回陌生 IP、解析结果和权威记录对不上、HTTPS 突然报证书错误、用户集中反馈跳到无关页面,这几个凑在一起,就别再拿本地结果安慰自己了。
DNS 出问题最麻烦的地方在于它不报错:页面还能打开,只是打开了错的地方。多节点核对一遍,比在本机反复刷新有用得多。