“你给站点套上了CDN,把源站防火墙锁死在边缘节点范围,调好了频率限制,于是安心睡去。然后有人直接对你的DNS发动洪水攻击,瞬间一切归零——因为谁也解析不出你的域名,根本到达不了那些层层加固的防线。”这段来自一位资深运维的吐槽,戳中了一个几乎被所有人遗忘的盲区:DNS是绝大部分人从未做过压力测试的环节,而最常见的灾难根源出奇地平淡——你的所有权威域名服务器,都窝在同一家提供商里。

把全部NS记录指向同一个DNS主机,这个主机就成了你整个域名的单点故障点。无论是针对它的分布式拒绝服务攻击,还是其控制面碰上一个糟糕的故障日,你名下的所有域名都会同时沦陷。影响半径覆盖一切,而且发生在你花费心血加固的所有上层设施之前。补丁方案老旧而知名:把权威DNS交到分属不同网络的两家提供商手里。可问题在于,几乎没有人真的去核查自己是否这么做了,因为在它爆发之前,隐患始终隐形。

正是被这种“隐形”逼出了行动,一位开发者动手写了一个轻量级检查工具。工具名叫dns-resilience-check,指向你拥有的任意一个域名,就回答一个问题:你的DNS是不是那个一触即溃的单点?它会做一遍韧性评审该做的事:统计你到底跑着几台权威名称服务器,验证这些服务器是否真的坐在不同的网络里,而不只是挂着同一家提供商的不同主机名,同时检查DNSSEC是否开启、NS记录的TTL是否合理。所有这些查询,全部通过公共DNS-over-HTTPS完成,不需要区域传输,不会给任何人制造流量,除了Rust运行环境之外,不需要安装任何东西。

工具最亮眼的一手,是“不同提供商”的认定。诚实的方法是按网络来验,而不是看名字。ns1和ns2躲在同一个主机上,告诉你不了任何真相。于是这个工具先把每台名称服务器解析到它的IP,再把每个IP映射到拥有它的网络(也就是ASN)。万一所有名称服务器最终落进同一个ASN,那么无论你手里攥着多少条NS记录,你的单点故障就钉在那里了。判断的依据来自IP到ASN的映射,而这个映射居然可以通过纯DNS获取——借助Team Cymru公开的反查区域。把IP的每个八位组翻转拼接,发出一个TXT记录查询,回来的字符串里就躺着对应的AS号。

查询的逻辑被封装成清晰的函数:把IP地址像“1.2.3.4”这样拆成四段,用翻转后的“4.3.2.1.origin.asn.cymru.com”构造域名,然后通过DNS-over-HTTPS获取TXT记录,解析出开头的AS字段。每台名称服务器收集完所有IP的AS号,汇聚成一个集合。如果集合大小只剩一,工具便会亮起警示,直白地告诉你:赶紧在另一个网络上添加第二个DNS提供商。

实际跑一把只需要一行cargo build加上你的域名。当屏幕吐出“CONTAINED”时,意味着表面看起来没有值得报警的破绽;而每一个“[FAIL]”后面都紧跟着修复方向。如果某个域名完全窝在同一家DNS托管商手里,工具会毫不含糊地指出来。这正是绝大多数人转身就去增设辅助DNS的那一刻。那个隐形的单点,终于被拉到聚光灯下,而拉它出来的,不过是一个盯住公共数据的Rust小程序。