DNS 污染为什么只有部分地区出现?
因为 DNS 不是一台服务器,是一张分布式的网。
每个地区、每个运营商都有自己的递归服务器,它们缓存的内容、走的链路、受到的策略影响都不一样。污染往往只发生在其中某一段。
递归服务器的差异
不同运营商用的递归软件、缓存策略、上游服务器都不同。
有的会严格校验 DNSSEC,有的不做;有的缓存时间长,有的短。这些差异会导致同一时刻、不同地区拿到不同结果。
出口链路的差异
污染常常发生在特定的网络出口。
比如某个运营商的国际出口被干预,那走这个出口的用户就会拿到错误结果;走另一个出口的用户则完全正常。
所以你会看到「广东电信异常、广东联通正常」这种看起来很怪的现象。
污染是逐步扩散的
污染不是一瞬间覆盖全国的。
它通常先在某个出口或某些递归服务器上出现,然后随着缓存扩散到更多地区。所以你测的时候,可能正好处在扩散的中间状态。
怎么确认范围
多节点解析,把异常结果按地区、运营商归类。
如果异常集中在某个运营商,那大概率是那条链路的出口问题;如果零散分布,那可能是多个点各自出了问题,或者缓存到期时间不同。
为什么这个判断重要
因为处理方式取决于范围。
局部污染,用户换个 DNS 可能就好了;大范围污染,换 DNS 基本没用,得从解析服务商或域名层面想办法。
一句话
DNS 是分布式的,污染也是分布式的。只看一个点,永远看不清全貌。