因为 DNS 不是一台服务器,是一张分布式的网。

每个地区、每个运营商都有自己的递归服务器,它们缓存的内容、走的链路、受到的策略影响都不一样。污染往往只发生在其中某一段。

递归服务器的差异

不同运营商用的递归软件、缓存策略、上游服务器都不同。

有的会严格校验 DNSSEC,有的不做;有的缓存时间长,有的短。这些差异会导致同一时刻、不同地区拿到不同结果。

出口链路的差异

污染常常发生在特定的网络出口。

比如某个运营商的国际出口被干预,那走这个出口的用户就会拿到错误结果;走另一个出口的用户则完全正常。

所以你会看到「广东电信异常、广东联通正常」这种看起来很怪的现象。

污染是逐步扩散的

污染不是一瞬间覆盖全国的。

它通常先在某个出口或某些递归服务器上出现,然后随着缓存扩散到更多地区。所以你测的时候,可能正好处在扩散的中间状态。

怎么确认范围

多节点解析,把异常结果按地区、运营商归类。

如果异常集中在某个运营商,那大概率是那条链路的出口问题;如果零散分布,那可能是多个点各自出了问题,或者缓存到期时间不同。

为什么这个判断重要

因为处理方式取决于范围。

局部污染,用户换个 DNS 可能就好了;大范围污染,换 DNS 基本没用,得从解析服务商或域名层面想办法。

一句话

DNS 是分布式的,污染也是分布式的。只看一个点,永远看不清全貌。