「DNS 被劫持了」这句话太笼统

用户说解析不对,第一句就是「被劫持了」。我问他是解析出了错地址,还是页面内容被换了,他答不上来。

这两个问题的取证方式、处理方式都不一样。先把「劫持」拆开,才谈得上解决。那次我们差点直接去换解析商。

分界线在阶段

解析阶段:你问域名,回来的答案是错的。污染通常发生在这里。

连接阶段:地址对,但连接被重置、被导向别处。

内容阶段:连接正常,页面被替换、被插入广告。

后两种常被归到「劫持」里,但和污染不是一回事。这三层对应三种证据,也对应三种处理动作。

DNS 污染检测:异常解析地址与地区分布

DNS 污染检测:异常解析地址与地区分布

污染的样子

多地同时返回同一个陌生地址,权威记录却是正常的。

换加密 DNS,比如 DoH 或 DoT,可能恢复正常,因为绕开了被干扰的链路。污染的特点是「问就错」,而且往往和地区相关。

用户端如果把 DNS 换成可信的公共解析,症状会减轻,这也是一个简单的验证方法。

劫持的样子

本地 hosts 被改、路由器 DNS 被改、解析商账号被动过。

地址可能是对的,但证书不对,或者页面内容被替换,这类问题最容易被当成污染。

这类问题往往只发生在特定网络、特定设备上,换个网络就好了。劫持的特点是「在你那儿错」,更贴近用户侧。连接劫持常伴随证书告警,内容劫持常伴随资源被替换。

怎么取证

用宝塔拨测的 DNS 污染检测看各地递归结果,再用权威查询对照。

本地查一次,比对本地与节点的差异,本地最容易藏问题。

端到端访问一次,看证书和内容有没有异常,最好换两三个网络。

三组证据放一起,才能判断问题在解析、连接还是内容。先确认权威答案,再确认各地递归答案,最后确认用户实际拿到什么,三步能定位到层。层定了,处置才有方向。

处置与复测

污染:换加密解析、换解析服务商,必要时换域名,思路是绕开被干扰的链路。

劫持:先清理本地和路由器配置,再改账号密码,查设备,思路是清理和加固。两者动作不一样,别用同一个方案套所有情况,那只会浪费时间。

处理完复测,确认多地结果一致、内容正常。复测也要分场景,换网络、换设备各测一次,能确认是普遍问题还是个例。

写报告时说清是哪一层,比说「被劫持」有用得多。按层写,结论后面加上证据,可信度立刻不一样。先分层,再定性,一步步来,别急,顺序很重要。

先分清阶段,再谈是谁动的手。