在过去的四天多的时间里,互联网域名系统最核心的一台服务器与它的 12 台根服务器不同步,原因是一个无法解释的故障,它可能会导致全球范围内的稳定性和安全性问题。这台服务器由互联网运营商Cogent Communications维护,是提供互联网根区的 13 台根服务器之一,位于被称为域名系统(DNS)的分级分布式数据库的顶端。

下面简要介绍域名系统的工作方式以及根服务器在其中的作用:

当有人在浏览器中输入 wikipedia.org 时,处理请求的服务器首先必须将人性化的域名翻译成 IP 地址。这就是域名系统的作用。域名系统流程的第一步是浏览器查询本地操作系统中的本地存根解析器。存根解析器会将查询转发到递归解析器,递归解析器可能由用户的 ISP 提供,也可能是 Cloudflare 和 Google 分别提供的 1.1.1.1 或 8.8.8.8 服务。

如果需要,递归解析器会联系 c-root 服务器或其 12 个对等服务器之一,以确定 .org 顶级域的权威名称服务器。然后,.org 名称服务器会将请求转给维基百科名称服务器,后者会返回 IP 地址。在下图中,递归服务器被标记为"迭代器"。

打开网易新闻 查看精彩图片

鉴于根服务器在确保一台设备可以找到互联网上任何其他设备方面的关键作用,有 13 台根服务器分布在世界各地。事实上,每个根服务器都是一个服务器集群,这些服务器在地理位置上也很分散,因此冗余度更高。通常情况下,13 台根服务器--各自由不同的实体运营--步调一致。当对它们所托管的内容进行更改时,所有服务器一般都会在几秒或几分钟内完成更改。

C-root DNS服务器上的奇怪事件

这种紧密同步对于确保稳定性至关重要。如果一个根服务器将流量查询指向一个中间服务器,而另一个根服务器将查询发送到另一个中间服务器,那么我们所知的互联网的重要部分就可能崩溃。更重要的是,根服务器会存储必要的加密密钥,以便根据DNSSEC机制对一些中间服务器进行身份验证。如果所有 13 个根服务器的密钥不一致,就会增加DNS 缓存中毒等攻击的风险。

Cogent公司拒绝对此发表评论,其负责维护的12个c-root实例在上周六突然停止更新。法国工程师斯特凡-博茨迈耶(Stéphane Bortzmeyer)是最早在周二的一篇文章中指出这一问题的人之一,他当时指出,c-root比其他root服务器晚了三天。

打开网易新闻 查看精彩图片

在 Mastodon 上,我们进一步注意到了这种滞后现象。

到周三中午,滞后时间已缩短至一天左右。

打开网易新闻 查看精彩图片

到周三晚些时候,c-root 终于更新完毕。

这一滞后促使工程师推迟了原定于本周对处理以 .gov 和 .int 结尾的域名查询的域名服务器进行的工作。原计划是将服务器的 DNSSEC 更新为使用 ECDSA 密钥。由于新密钥无法统一推广到所有根服务器,因此这些计划不得不被取消。

负责 .gov DNSSEC 过渡的 Cloudflare 工程师 Christian Elmerot 周三宣布:"我们完全了解并监控着 C 根服务器周围的情况,在情况稳定之前,我们不会继续进行正在进行的 DNSSEC 算法滚动。"计划向.int 服务器过渡的工程师也发出了同样的呼吁,但只是在一些人担心尽管出现了问题,工作仍会继续进行之后。

Elmerot在接受采访时说,更新问题对现实世界的影响很小,但随着时间的推移,影响会越来越大。他解释说

随着根区变化的累积,版本之间的差异开始变得越来越重要。根区的典型变化是更改授权(NS 记录)、轮换 DNSSEC 更新的 DS 记录以及 DNSSEC 签名的更新。如果差异仍然存在,那么过时的根服务器将看到 DNSSEC 签名过期,这将开始产生更明显的后果。使用多个根服务器可以降低解析器使用落后根服务器的几率。

在 c-root 出现故障的同时,同样由 Cogent 维护的c-root网站也出现了故障,导致许多人无法访问该网站。许多人认为这两个问题的原因是一样的。后来发现,网站问题是由于Cogent将用于托管网站的 IP 地址转移到了法国电信公司 Orange 的非洲子公司 Orange Ivory Coast。

这次混淆让 Bortzmeyer 开了个玩笑:"已向 Cogent 报告(票据 HD303751898),但他们似乎不明白自己管理的是根域名服务器。"

出现这些错误的原因是,近几个月来,Cogent公司终止了与几家运营商的合作关系,根据一种被称为对等互联的安排交换彼此的流量。最近的一次终止发生在上周五,当时Cogent公司"部分剥离"了印度运营商塔塔通信公司(Tata Communications)的业务,此举导致Cogent的客户无法访问塔塔通信公司在亚太地区托管的许多网站。

周三晚些时候,Cogent发表了以下声明,他们表示直到周二才意识到故障,并又花了 25 个小时才修复故障:

世界协调时 5 月 21 日 15:30 时,Cogent Communications 的 c-root 团队被告知,c-root 服务的根区在 5 月 18 日之后不再跟踪根区发布服务器的变更。分析表明,这是由于一项无关的路由政策变更造成的,其副作用是使相关监控系统瘫痪。c-root 没有因为这次中断而无法回答任何 DNS 查询,唯一的影响是根区的新鲜度。c-root 提供的根区同步已于 5 月 22 日 16:00 UTC 时完全恢复。

最初,一些人猜测塔塔通信公司的停运、c-root 网站的中断以及 c-root 本身的更新错误都与此有某种联系。鉴于声明含糊不清,这些事件之间的关系仍不完全清楚。