前言

最近刚追完杨导的电视剧版《三体》,对人类所为对世界的影响有了一个叹为观止的新认知,虽然是一部科幻剧,对人性的揭示却是非常刻骨。很久之前曾经在知乎刷到过一个问答,标题大概是《假如有人把支付宝所有存储服务器炸了,大众在支付宝里的钱是不是就都没有了呢?》,惭愧的说,从那篇文章笔者首先是全面地了解了「如何使用各种手段对服务集群进行物理破坏」,再者才是明白了「金融系统设计者是如何用心良苦地设计一套安全体系来保护数据」。

而偶然间在查阅一段资料时访问 root-servers ,便想到了标题的这个问题。带着这个疑问,决定追溯下去…

一、认识DNS

要回答这个问题之前,本着刨根问底的精神,首先需要了解DNS的工作原理,了解根域名的管理机制。

1.1 什么是 DNS

熟知 TCP/IP协议 可得,网络层通过定义 IP(Internet Protocol),来进行 将数据从一个设备传输到另一个设备。基于这个设想,设计出了 IP地址 概念对设备进行编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段(比如,192.168.100.1),每段是 8 位。关于 IP地址的分类、IP寻址等细节,本文不作展开。

IP 是面向计算机设备的,对于人类来说,不太好辨识和记忆。所以人类发明了 域名(Domain Name),让我们可以记住 baidu.comtaobao.com 这类比较容易记住的有格式字符串。而计算机设备仅认识 IP ,这个时候就需要一个服务来帮助转换,它就是 DNS维基百科 中对于DNS的解释是: 网域名称系统(英语:Domain Name System,缩写:DNS) 是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。 简而言之,就是 人类认识的域名转换成对应IP的服务

1.2 DNS架构

首先解析DNS 中的域名都是用句点来分隔的,比如 www.smallfan.top,这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。实际上域名最后还有一个点,比如 www.smallfan.top. ,这个最后的一个点代表根域名。

也就是,. 根域是在最顶层,它的下一层就是 .top 顶级域,再下面是 smallfan.top

图中域名的层级关系类似一个树状结构:

  • 根 DNS 服务器(.)
  • 顶级域 DNS 服务器(.top)
  • 权威 DNS 服务器(smallfan.top)

注意:根 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根 DNS 服务器。

二、根 DNS 服务器

接下来自顶向下,从根 DNS 服务器 开始逐步一探究竟。

2.1 存在的13 个根DNS服务器

到目前为止,全球存在的 根 DNS 服务器 总共13个,其中10个在美国,英国和瑞典各1个,日本1个。可通过ICANN 官网查看该 named.root文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
.                        3600000      NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 199.9.14.201
B.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:200::b
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
C.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2::c
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 199.7.91.13
D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2d::d
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
E.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:a8::e
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
G.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:12::d0d
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 198.97.190.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::53
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
I.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fe::53
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:c27::2:30
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:9f::42
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35

可以看到,里面有13个根的名字和IP,其名字从 A.ROOT-SERVERS.NET.M.ROOT-SERVERS.NET.

A开头那个简称A根,是主根,其他12个(B、C、D、E、F、G、H、I、J、K、L、M)是辅根

细心发现,这些服务器本身也是使用域名(比如 A.ROOT-SERVERS.NET. )标识,那么还得去查询它们指向的服务器,这样很容易造成循环查询。

因此,根 DNS 还会同时提供这些服务器的 IP 地址(IPv4 和 IPv6)。

1
2
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30

问题:为什么是13个 根 DNS 服务器,不是12个也不是14个?

由于早期的 DNS 查询结果是一个512字节的 UDP 数据包。这个包最多可以容纳13个服务器的地址,因此就规定全世界有13个根域名服务器,编号从 A.ROOT-SERVERS.NET.M.ROOT-SERVERS.NET.

DNS查询请求之所以控制在512字节内,主要考虑是这个大小几乎可以在互联网上畅通无阻,不会因为内容超过MTU(一个网络包的最大长度,在以太网中一般为1500字节)而导致IP分片,从而预防了各种不可预期的后果。

DNS的网络数据包主要包含数据如下:

  • DNS报头
  • 根的名称
  • TTL
  • IPv4
  • IPv6
  • 其他校验参数

所以,根 DNS 服务器 不易太多,13个算是比较合适的数目。更多具体可阅读《 Why There Are Only 13 DNS Root Name Servers 》文章。

思考题:真的只有13台服务器吗?

和很多人想象的完全不一样,这13个 根 DNS 服务器,并不是只有13台物理的服务器。这13个根,只是一个逻辑上的概念,每个根DNS,背后都有多台真正的物理服务器在工作!

截至2023年2月15日,全球共有1636台根服务器正在运行。每一个根都有若干个镜像,分布在全球不同的地方。

root-servers网站 上可以查到所有这些根服务器的分布,我国境内发出的对 根DNS 的请求,其实都由镜像完成了。这一点后面会解释。

思考题:这么多节点共用13个 IP 地址其中一个,难道不会冲突吗?

2.2 谁在操作根DNS服务器

2.2.1 ICANN

这13台根域名服务器由12个组织独立运营。A根是主根,由美国公司Verisign管理。每家公司为了保证根域名服务器的可用性,会部署多个节点。比如单单 A根 就部署了 58 台根域名服务器(2023年2月15日)。

而根DNS中最重要的文件,根区文件,由ICANN管理。

ICANN(The Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)是成立于1998年的一家注册在美国的非营利性组织。

2.2.2 DNS管理历史

根DNS管理的历史变迁过程还是比较复杂的。这里简要说一下,不感兴趣可以直接跳到下一章。

DNS最初的技术开发者与管理者是美国南加州大学的Jon Postel博士,他掌管互联网初期根DNS的管理和分配。

1988年,美国政府要求Jon Postel采取更安全和更合理的措施来保证互联网核心资源的分配和管理。于是,大名鼎鼎的 IANA(The Internet Assigned Numbers Authority,互联网数字分配机构) 被组建,并在DARPA和南加州大学信息科学研究所(ISI)的合同下管理。

IANA负责互联网全局编号和编码的管理与协调,之所以需要这么个机构,是因为互联网协议的值或参数,必须是全球唯一的,否则无法互联互通,比如HTTP协议默认都在80端口等待用户请求,而404编码则一致代表"未找到页面”。IANA主要职责包括IP地址段的分配、协议代码和编号的分配(如协议号、端口号)、自治系统编号 (ASN) 分配、DNS根区管理(包括通用顶级域名gTLD以及国家和地区顶级域名ccTLD管理)等。

1998年ICANN成立之后,美国商务部以合同形式,委托ICANN承担IANA日常运行,IANA从ISI转移到ICANN之下。

对于顶级域名的管理,ICANN的政策是,每个顶级域名(像com、cn、org这种顶级域名,目前有1000多个)都找一个托管商,该域名的所有事项都由托管商负责。

  • .cn域名的托管商是中国互联网络信息中心(CNNIC),它决定.cn域名的各种政策。
  • .com、.net 、.name、.gov这四个顶级域名都由Verisign公司托管。

历史:Verisign和ICANN还是闹过几次不愉快的

2003年,Verisign 推出了一项新业务 Site Finder,用户访问没有注册过的.com或.net域名,都会被导向 Verisign 的网站。这意味着,它事实上拥有了所有没有注册过的.com和.net域名。几天之内,Verisign 就挤入了全世界的前10大网站。
ICANN 要求 Verisign 立刻停止该业务,否则将终止域名托管合同。Verisign 屈服了,停止了这项业务,但是接着就把 ICANN 告上了法庭,要求法庭厘清两者之间的合同,ICANN 到底有没有权力干涉它的业务。

2006年底,他们达成了庭外和解。ICANN 同意延长 Verisign 的顶级域名托管合同,并且同意 Verisign 向消费者收取的单个域名注册费的上限,从6美元提高到了7.85美元。这个费用标准,一直沿用到了今天,你去注册一个.com或.net域名,所交的钱有0.18美元是 ICANN 收取的管理费,7.85美元是 Verisign 收取的托管费,其余的钱就是域名零售商的费用。

虽然是ICANN运营着IANA,但毕竟是在美国政府的合同管理之下,全球各国以及民间人士颇有微词,一致认为美国政府应该彻底退出。

2014年3月14日,美国商务部国家通讯与信息管理局(NTIA)宣布愿意将IANA的管理权完全移交给ICANN,并要求ICANN制定移交计划。NTIA尤其强调,移交计划要强化多利益相关方模式,不能以政府间组织或政府领导的组织取代当前NTIA扮演的角色。

2016年3月17日,ICANN向NTIA提交了移交计划。2016年6月9日,NTIA公布审核意见,表示ICANN提交的移交计划满足了此前设定的条件。

2016年8月16日,NTIA宣布不再延期现有合同。

虽然遇到一些阻挠,最终,2016年10月1日,ICANN和美国商务部之间关于IANA职能的合同到期且不再续约,ICANN彻底成为独立的非营利机构。IANA部门的员工和其他的相关资源都被转移到ICANN新设立的附属机构PTI(Public Technical Identifiers,公共技术标识符)中。

ICANN使用全球多利益相关方治理模型(global multistakeholder governance model)进行管理。PTI董事会共5席,3席由ICANN委派,2席由全球互联网社群代表组成提名委员会产生。2017年2月,ICANN发布PTI董事竞选公告,经半年多轮面试及背景调查,提名委员会于2017年10月26日宣布我国北龙中网的王伟与另一欧洲代表中选。又经一个半月的利益冲突审查,2017年12月13日ICANN董事会正式确认王伟当选。

表面上看,ICANN 让 Verisign 获得了巨额垄断利润。(曾经有公司提出,只要让它来托管.com域名,单个域名的托管费,可以降低到每年1美元。)但是实际上,ICANN 通过另一种方式在发挥市场的力量,那就是它不断提高顶级域名的数量和品种。如果你觉得.com域名太贵,你完全可以申请其他的顶级域名,有 1000多个顶级域名任你选择。

三、TLD 服务器 和 权威 DNS 服务器

根 DNS 服务器 只负责提供 顶级域服务器 的 域名 和 IP地址,接下来由 顶级域服务器 继续服务,直到找到最终的域名IP地址为止。

3.1 TLD 服务器

在 DNS 层次结构中,顶级域 (Top-level Domain, 简称TLD) 代表根区域之后的第一站。简单来说,TLD 是域名最后一个点之后的所有内容。例如,在域名 google.com 中,.com 是 TLD。其他一些流行的 TLD 包括 .org.uk.edu 等。

从类型上区分,分为:

  • 公开顶级域
    任何身分都能注册的顶级域,可分为多种用途,包含通用顶级域(.com等)、国家与地区顶级域(.cn等)、测试顶级域(.汉字等)、临时顶级域和基础建设顶级域。

  • 半公开顶级域
    特定身分才能注册的顶级域,用途会受到限制,例如仅相关行业能注册的.bank和.finance。

  • 未公开顶级域
    保留和不开放注册的顶级域,用于组织或品牌,例如.canon、.google。

其中,通用顶级域由ICANN统一管理;国家与地区顶级域由所处地理位置政府管理,如中国的CNNIC管理.cn

TLD 服务器 在 DNS 查找过程中发挥着重要作用。对于所有未缓存的请求,当用户在浏览器窗口中输入google.com 之类的域名时,DNS 解析器会通过与 TLD 服务器通信来开始搜索。在这种情况下,TLD 是 .com ,因此解析器将联系 TLD 服务器 ,然后向解析器提供 Google 源服务器的 IP 地址。

3.2 权威 DNS 服务器

位于 TLD 服务器 下一级的域名服务器便是 权威性 DNS 服务器权威 DNS域名解析服务商(如帝恩思的 ns1.dns.com ns2.dns.com 建设,提供域名管理服务,维护域名解析记录。

假如查询 google.com,权威性 DNS 服务器 可为 DNS 解析器 提供在 DNS A 记录中找到的服务器的 IP 地址,或者如果该域具有 CNAME 记录(别名),它将为 DNS 解析器 提供一个别名域,这时 DNS 解析器 将必须执行全新 DNS 查找,以便从 权威域名服务器 获取记录(通常为包含 IP 地址的 A 记录)。

关于什么是A记录,什么是CNAME记录,可阅读 本文 4.1 章节。

3.3 DNS 解析器

前文多次提及 DNS 解析器 ,实际上它并不存在于 标准DNS层级 里。它的诞生,主要是提供了数据缓存,达到提升DNS查询性能的作用。

DNS 解析器(也称为 递归解析器)是 DNS 查询中的第一站。DNS 解析器 作为客户端与 DNS 域名服务器的中间人。从 Web 客户端收到 DNS 查询后,DNS 解析器 将使用缓存的数据进行响应,或者将向根域名服务器发送请求,接着向 TLD 域名服务器发送另一个请求,然后向权威性域名服务器发送最后一个请求。收到来自包含已请求 IP 地址的权威性域名服务器的响应后,DNS 解析器 将向客户端发送响应。

DNS 解析器 大多数在ISP运营商端(比如电信),负责网络接入终端的 DNS 查询,即网络访问设备上配置的 DNS 服务器 IP。

四、DNS 查询

4.1 DNS记录

4.1.1 什么是DNS记录

DNS 记录(又名区域文件) 是位于权威 DNS 服务器中的指令,提供一个域的相关信息,包括哪些 IP 地址与该域关联,以及如何处理对该域的请求。这些记录由一系列以所谓的 DNS 语法编写的文本文件组成。DNS 语法是用作命令的字符串,这些命令告诉 DNS 服务器执行什么操作。此外,所有 DNS 记录都有一个 “TTL”,其代表生存时间,指示 DNS 服务器多久刷新一次该记录。

你可以将一组 DNS 记录想象成是一组企业工商信息,其中每条 DNS记录 等同于一家企业,DNS 记录提供有关企业的大量有用信息,例如该企业的位置、营业时间、提供的服务等。所有域名都必须至少有一些基本 DNS 记录,以便使用户能够使用域名来访问他们的网站,此外还有一些用于其他目的的可选记录。

4.1.2 常见的DNS记录类型

  • A 记录 - 保存域的 IP 地址的记录。
  • AAAA 记录 - 包含域的 IPv6 地址的记录(与 A 记录相反,A 记录列出的是 IPv4 地址)。
  • CNAME 记录 - 将一个域或子域转发到另一个域,不提供 IP 地址。
  • MX 记录 - 将邮件定向到电子邮件服务器。
  • TXT 记录 - 可让管理员在记录中存储文本注释。这些记录通常用于电子邮件安全。
  • NS 记录 - 存储 DNS 条目的名称服务器。
  • SOA 记录 - 存储域的管理信息。
  • SRV 记录 - 指定用于特定服务的端口。
  • PTR 记录 - 在反向查询中提供域名。

只要记住A记录和CNAME记录即可,其他更多 DNS记录 相关,有兴趣请阅读《DNS记录类型列表》。

4.2 3 种 DNS 查询类型

介绍完各类 DNS 服务器 及数据类型以后,接下来讲对查询这个操作进行解析。 DNS 的共有三种查询方式:

  • 递归查询
  • 迭代查询
  • 非递归查询

4.2.1 递归查询

递归查询一般发生在 客户端 请求 DNS 服务器。客户端 发出一个域名解析的请求,DNS 服务器 必须返回对应的 IP 地址,或者返回找不到的错误。

4.2.2 迭代查询

迭代查询一般发生在 DNS 服务器 之间,当 客户端 发出域名解析的请求后,DNS 服务器 需要给予最佳答案,这个最佳答案可能是"距离最近"的 TLD服务器,也能是权威域名服务器。无论如何,客户端 需要对返回结果再次发起请求,知道获得最终结果。

4.2.3 非递归查询

非递归查询发生在 客户端 和 DNS 服务器 之间,指的是,请求的 DNS 服务器 已经知道答案,直接返回。这里可能有两种情况,一种是 DNS 服务器 本机缓存了对应的 IP,或者是缓存了对应的域名的权威服务器。第二种情况只需要再发一次请求,即可拿到结果返回。

4.3 8步查询

接下来,从一个简单例子去理解DNS的8步查询,即:在浏览器URL栏输入 smallfan.top, 是如何找到对应服务器IP的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

1. 用户在 Web 浏览器中键入 “smallfan.top”,查询传输到 Internet 中,并被 DNS 解析器 接收。
2. 接着,DNS 解析器 查询 DNS 根域名服务器(.)。
3. 然后,根服务器使用存储其域信息的顶级域(TLD)DNS 服务器(例如 .com 或 .net)的地址响应该解析器。
在搜索 smallfan.top 时,我们的请求指向 .top TLD。
4. 然后,解析器向 .top TLD 发出请求。
5. TLD 服务器随后使用该域的 权威域名服务器 smallfan.top 的 IP 地址进行响应。
6. 最后,DNS 解析器 将查询发送到域的权威域名服务器。
7. smallfan.top 的 IP 地址而后从权威域名服务器返回 DNS 解析器。
8. 然后 DNS 解析器 使用最初请求的域的 IP 地址响应 Web 浏览器。

DNS 查找的这 8 个步骤返回 smallfan.top 的 IP 地址后,浏览器便能发出对该网页的请求:

9. 浏览器向该 IP 地址发出 HTTP 请求。
10. 位于该 IP 的服务器返回将在浏览器中呈现的网页。

DNS 域名解析的过程蛮有意思的,整个过程就和我们日常生活中找人问路的过程类似,只指路不带路。

问题:是不是每次解析域名都要经过那么多的步骤呢?

答案是否定的,DNS在各个查询节点中尽可能的使用到了缓存。

4.4 DNS 高速缓存

缓存的目的是将数据临时存储在某个位置,从而提高数据请求的性能和可靠性。DNS 高速缓存涉及将数据存储在更靠近请求客户端的位置,以便能够更早地解析 DNS 查询,并且能够避免在 DNS 查找链中进一步向下的额外查询,从而缩短加载时间并减少带宽/CPU 消耗。DNS 数据可缓存到各种不同的位置上,每个位置均将存储 DNS 记录并保存由生存时间(TTL)决定的一段时间。

4.4.1 浏览器 DNS 缓存

现代 Web 浏览器设计为默认将 DNS 记录缓存一段时间。目的很明显;越靠近 Web 浏览器进行 DNS 缓存,为检查缓存并向 IP 地址发出正确请求而必须采取的处理步骤就越少。发出对 DNS 记录的请求时,浏览器缓存是针对所请求的记录而检查的第一个位置。

在 Chrome 浏览器中,可以转到 chrome://net-internals/#dns 查看 DNS 缓存的状态。

4.4.2 OS级 DNS 缓存

操作系统级 DNS 解析器是 DNS 查询离开客户端计算机前的第二站,也是本地最后一站。操作系统内旨在处理此查询的过程通常称为 “存根解析器” 或 DNS 客户端。当存根解析器获取来自某个应用程序的请求时,其首先检查自己的缓存,以便查看是否有此记录。如果没有,到本机的Host文件中查找,如果有则终止查询并直接使用文件中的IP;如果没有,则将本地网络外部的 DNS 查询(设置了递归标记)发送到 Internet 服务提供商(ISP)内部的 DNS 解析器

4.4.3 路由器 DNS 缓存

现在家用的WIFI信号路由器,大部分都提供了DNS缓存功能。在这种情况下,如果本地路由器有DNS 缓存数据也会被直接使用。

4.4.4 DNS解析器 缓存

ISP提供的 DNS解析器 本身也带有缓存功能。

五、根镜像

5.1 根镜像的作用

根镜像承担起和根一样的功能。根DNS中,最重要的文件就是根区文件(Root Zone file)。所有顶级域名记录都存在根区文件中。

辅根从主根同步数据,根镜像从根同步数据。最终,所有根和镜像都有着同样的根区文件。而且最有意思的是,根镜像和根有着同样的IP

全球有一千多个根镜像,但是大多数人不知道,它们一起共享13个IP! 本文前面留了一道思考题与之相关,因为只有13个根,这是如何做到的?答案是 任播(Anycast,又译泛播) 技术。

任播是指在IP网络上通过一个IP地址标识一组提供特定服务的主机,服务访问方并不关心提供服务具体是哪一台主机提供的,访问该地址的报文可以被IP网络路由到“最近”的一个(最好也只是一个,别送到多个)服务器上。这里“最近”可以是指路由器跳数、服务器负载、服务器吞吐量、客户和服务器之间的往返时间( RTT,round trip time )、链路的可用带宽等特征值。

一方面,用户可以就近访问;另一方面,即便部分根出现故障也没事。这类似 负债均衡 + CDN 的思路。对于中国用户来说,对根的请求,一般不会跑到美国去,而是通过任播技术路由到中国境内的根镜像上。

5.2 国内根镜像情况

root-servers网站 上可以查到所有根服务器的分布,从网站展示的根镜像服务器地图上看(2023年2月15日),北京有 8 个根镜像服务器,上海 2 个,重庆 1 个,杭州 2 个,武汉 2 个、郑州 2 个、西宁 2 个、贵阳 1 个、南宁 1 个,海口 1 个,广州 3 个、香港 8 个,台北 9 个。

包含港澳台部分,我国一共有 42 个根镜像。前面也提到了,我国境内发出的对 根DNS 的请求,其实都由镜像完成了。

5.3 国内根镜像发展历史

从目前我所找到的资料看,自2003年以来,我国在不断引进根镜像,目的主要也是保证域名解析服务的 高可用高效性

  • 2003年,中国电信引入了国内第一个根镜像节点(F根)。
  • 2005年,I根服务器运行机构在 CNNIC 设立了中国第二个根镜像(I根)。
  • 2006年,中国联通(原中国网通)与美国 VeriSign 公司合作, 在国内正式开通J根镜像服务器,同时引入了全球最大的两个顶级域名 “.COM”和“.NET”镜像节点;引进这些镜像的主要目的是提高根域名和顶级域名的解析性能。
  • 2014年,世纪互联与ICANN合作在中国增设L根域名服务器镜像。
  • 2019年6月24日,工信部批准CNNIC设立六台域名根镜像服务器(F、I、K、L)。这六台域名根服务器编号为 JX0001F、JX0002F、JX0003I、JX0004K、JX0005L 和 JX0006L_(12),并批准互联网域名系统北京市工程研究中心(ZDNS)设立L根镜像服务器JX0007L(13)_。
  • 2019年11月6日,工信部批复同意中国信息通信研究院设立L根镜像服务器,编号分别为JX0008L、JX0009L。
  • 2019年12月5日,工信部批复同意中国信息通信研究院设立域名根服务器(K根镜像服务器),编号为JX0010K。
  • 2019年12月9日,工信部批复同意CNNIC设立域名根服务器(J、K根镜像服务器),编号分别为JX0011J、JX0012K。

工信部在给CNNIC的批文中写道:“你中心应严格遵守《互联网域名管理办法》《通信网络安全防护管理办法》及相关法律法规、行政规章及行业管理规定,接受我部的管理和监督检查,建立符合我部要求的信息管理系统并与我部指定的管理系统对接,保证域名根服务器安全、可靠运行,为用户提供安全、方便的域名服务,保障服务质量,保护用户个人信息安全,维护国家利益和用户权益。”

5.4 如果美国搞事情会怎样?

能认真看到这里的同学,先给自己的求知精神点个赞。

从前面的 根DNS服务器 部分介绍来看,大部分 根DNS服务器 都掌握在美国ICANN 或者 Verisign 公司手里。纵观特斯拉、Google等公司过去举动来看,虽然ICANN是一个独立的非营利性机构,但如果美国政府动用强制力量,A根(主根)的内容仍然存在被篡改的可能。

也就是根区文件可以被篡改。会怎么篡改?
先看看根区文件长什么样。

从ICANN官网可以下载根区文件

可以看到,存在几十行和cn域名解析相关的记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cn.			172800	IN	NS	a.dns.cn.
cn. 172800 IN NS b.dns.cn.
cn. 172800 IN NS c.dns.cn.
cn. 172800 IN NS d.dns.cn.
cn. 172800 IN NS e.dns.cn.
cn. 172800 IN NS f.dns.cn.
cn. 172800 IN NS g.dns.cn.
cn. 172800 IN NS ns.cernet.net.
cn. 86400 IN DS 57724 8 2 5D0423633EB24A499BE78AA22D1C0C9BA36218FF49FD95A4CDF1A4AD97C67044
cn. 86400 IN RRSIG DS 8 1 86400 20230228050000 20230215040000 951 . nUTDF6eCJviRoETfswFpw16XZc7nDI7RoaVQLbjhN0v+rCMBrY74PCLvLRSQ1DveGtDSVZGGNmKqxncijo66xjvS3AWeniGZIPGYb0swuDpAP7UQevUtY7w8DSiR2/9LZtdU20ORhGYC9omrHl0SljtRMKWH1F5QxGHdPqRPCXseXGrhuPw7PQH2VTH29rotMuvjS+Zx6eT7rR3Wld7cdhpQ0jGdGn8SaDsuRuWkWhV8cOT4FsrproqQFk2RLBuKGJi8l9e47fUxGQOgDIgPONFH/2RSrYUkgwZwPWc3QPUXt5rgV/xod5nsWfqungNwAtHPviM7DaWnW2iEIx4dgg==
cn. 86400 IN NSEC co. NS DS RRSIG NSEC
cn. 86400 IN RRSIG NSEC 8 1 86400 20230228050000 20230215040000 951 . QJVNol1dmnmzXCHn/WVajMxcro0in2IV9UzFMtQMfWu7Gv4yPfg50KSsqriN+yU3+ixANWw6H72ivBmPxPkjysiDWZNlNbkJMZ5dKpITZQ+1dMXvIWnpNxLRdcqSijR5sG7N04WEIz3pSZViquFtAultvCTezZiBrzLB4QMQWKtnwRWxqesPT8+xZEG9wBKMbih81oLmzn9VTop4o1dt3Or//IiJk/zYSrO+mhw4IbUnsbduZ4e4s2MYRxSugg5A18U7xm4Wo4fAaQxt44KwdOfkmOpE8UfZMVzQmaBzLPxQWvcuj9ilbJfG1wzEdzfed91AwBEu/zESDJ+sY26GIg==
ns1.conac.cn. 172800 IN A 111.235.161.1
ns1.conac.cn. 172800 IN AAAA 2401:b400:1:0:0:0:0:1
ns2.conac.cn. 172800 IN A 111.235.162.1
ns2.conac.cn. 172800 IN AAAA 2401:b400:8:0:0:0:0:1
ns3.conac.cn. 172800 IN A 111.235.163.1
ns3.conac.cn. 172800 IN AAAA 2401:b400:9:0:0:0:0:1
ns4.conac.cn. 172800 IN A 111.235.164.1
ns5.conac.cn. 172800 IN A 111.235.165.1

如果删除和cn相关的那些行,很快,就会同步到所有的根中。然后,在所有的缓存都过期之后,全球所有人都访问不了.cn后缀的网站。

事实是这样吗?

因为我们维护着根镜像,所以我们控制着镜像中的内容。而中国境内的对根的访问,通过我们的运营商,都会落到对我国根镜像的访问上。所以,答案是:我们可以不同步关于cn的修改,这样就解决了国内访问.cn网站的问题。

当然,世界各地不在我们管理之下的根和根镜像,如果不加行动,仍然会同步这些删除。那么,除了中国自己,其他国家的人都无法访问.cn网站。但是,这些国家很快就会有响应,凡是想访问.cn网站的国家,都会把cn记录加回去,并拒绝同步美国删去的这几行。最终,只有少部分国家访问不了.cn网站。

综上分析,这种搞事情的可能性极低。一来此举将直接导致ICANN失去公信力,整个互联网世界,会推选使用新的机构和新的主根;二来也会直接动摇网络疆域和网络主权的世界格局,破坏了现有的万维网生态,给互联网相关产业带来直接灾害。

5.5 如果恐怖分子搞事情会怎样?

美国不会这么干,那回到标题来看,恐怖分子如果执意要搞破坏呢,比如直接炸掉13个 根DNS 服务器呢?

前面介绍 根 DNS 服务器分布时候已知,目前全球的根 DNS 服务实例已经超过千台,遍布全球各地,而这些服务器实际上存放的是同一份数据,也就是说即使有几台服务器遭到物理毁灭,也可以通过镜像复制快速部署新的服务器。

那么如果假设真的做到同一时空下炸掉全球所有根 DNS 服务器呢?本文前面曾提到:根 DNS 服务器信息保存在互联网中所有的 DNS 服务器中 。这个时候各地的TLD服务器就要担起重建还原 根服务器的重任了。

那如果假设又把 TLD服务器 都炸了呢?首先,先忽略掉全球TLD服务器数量的可行性问题,纵使没有TLD,还有权威DNS服务器们。根 DNS 服务器信息 就像细胞一样无处不在,不可能完全消灭殆尽。

所以,现在可以回到标题的答案了:全球现有的根DNS服务器多达上千台,同时根 DNS 服务器信息保存在互联网中所有的 DNS 服务器中,所以即使根DNS服务器被炸毁,万维网即使有短暂的部分区域服务故障,也能通过镜像快速恢复。

六、后记

聊到最后,有两个DNS相关国际事件可以再谈一谈。

2014年6月24日的《人民日报》上引用专家发言:“目前美国掌握着全球互联网13台域名根服务器中的10台。理论上,只要在根服务器上屏蔽该国家域名,就能让这个国家的国家顶级域名网站在网络上瞬间’消失’”。在这个意义上,美国具有全球独一无二的制网权,有能力威慑他国的网络边疆和网络主权。譬如,伊拉克战争期间,在美国政府授意下,伊拉克顶级域名“.iq”的申请和解析工作被终止,所有网址以“.iq”为后缀的网站从互联网蒸发。

《信息安全与通信保密》杂志2014年第10期的一篇文章写道:“2004年,由于与利比亚在顶级域名管理权问题上发生争执,美国终止了利比亚的顶级域名.LY的解析服务,导致利比亚从网络中消失3天。”

乍一听,美国还真的搞事情了!事实到底是怎么回事:

关于伊拉克域名事件, 2017年清华大学段海新教授发表了相关文章《伊拉克域名.IQ被美国删除的背后以及早期的根域名管理》,把整个事件的来龙去脉说的很清楚。主要原因是.iq域名的前任管理者于2002年被关进监狱,新任管理者(NCMC)于2005年才提出申请,而IANA当时还考虑征求新旧代理双方对新授权的一致认可,所以才出现了所谓的“申请和解析工作被终止”。

关于利比亚域名事件,《利比亚国家顶级域名(.LY)中止服务始末》阐明事实情况是,参与运营.LY的两家机构因争夺归属权而内斗的结果(其中一方关闭了.LY域名服务器的解析)。经过这番变乱,2004年10月,ICANN批准将.LY授予利比亚邮电总公司,.LY事件算是尘埃落定。

对于DNS相关风险,业内专家也曾发表过一些看法:

中国工程院院士、清华大学计算机系主任吴建平在2019年的一次访谈表示,DNS根域名服务器不是互联网的“核按钮”。全球互联网根域名服务器运行者,不可能同时关闭所有的根服务器,包括影子服务器。

互联网域名系统北京市工程研究中心(ZDNS)主任毛伟表示:互联网专家一直都在不断完善域名根系统安全保障机制,就算真的断“根”了,也有应急方法来解决。在境内,可以采用根区数据备份并搭建应急根服务器来解决;在全球层面,可以用根镜像、IPv6环境下的根服务器数量扩展、根服务器运行机构备选机制等方法来解决。

所以,大可不必担心根域名服务全线瘫痪问题,如果有,那一定是三体人到达地球了。👽👽

参考文献

  1. 阮一峰的网络日志-根域名的知识
  2. DNS分类与区别-权威DNS、递归DNS、转发DNS
  3. 美国如果把根域名服务器封了,中国会从网络上消失?
  4. cloudflare-DNS 记录

扩展知识一:DNS污染

E1.1 原因

DNS 查询服务在传输层是使用 UDP 协议,并且对数据内容来源没有任何校验机制。并且根据惯例查询者会接受第一个返回的结果而抛弃之后。因此攻击者只需监控 53 端口(DNS 标准端口)的 UDP查询数据报并分析,一旦发现敏感查询,则抢先向查询者返回一个伪造的错误结果,从而实现 DNS 污染。

最终用户将访问到一个错误的网站,DNS污染常被应用于不能说的秘密

如何抢先呢?

DNS污染主要通过篡改 DNS解析器上 的缓存内容实现,DNS协议本身的不可靠性使其很容易遭到攻击。受到污染的 DNS服务器 在接受到域名解析请求时,返回的是被篡改过的IP地址而非服务器真实的IP地址,如此一来客户端就无法与真正的服务器建立连接。简单理解就是当电脑向域名服务器发送了“域名查询”的请求,然后域名服务器把“DNS回应”发送到你的电脑,这之间是有一个时间差。如果某个攻击者在域名服务器的“DNS应答”还没有到达你的电脑之前,先伪造一个错误的“DNS应答”发到你电脑。那么你的电脑得到就是一个错误的IP地址。这就是DNS污染产生的过程。

E1.2 污染治理

E1.2.1 修改Host文件

此类办法不是万能的,Hosts文件的条目一般不能使用通配符(例如 *.smallfan.top ),而超强DNS污染大王 的DNS污染对域名匹配进行的是部分匹配不是精确匹配,因此Hosts文件也有一定的局限性,试图访问这类域名仍会遇到很大麻烦。

E1.2.2 🪜

不便细说。

扩展知识二:DNS劫持

E2.1 原理

DNS劫持就是 DNS系统 被入侵或人为的修改某些记录,如A记录。用专业的术语来讲就是通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址。

常见的方法有3种:

E2.1.1 利用DNS服务器进行DDOS攻击

正常的DNS服务器递归询问过程可能被利用成DDOS攻击。假设攻击者已知被攻击机器IP地址,然后攻击者使用该地址作为发送解析命令的源地址。这样当使用DNS服务器递归查询后,DNS服务器响应给最初用户,而这个用户正是被攻击者。那么如果攻击者控制了足够多的肉鸡,反复的进行如上操作,那么被攻击者就会受到来自于DNS服务器的响应信息DDOS攻击。

E2.1.2 DNS缓存感染

该方式和DNS污染相同,攻击者使用DNS请求,将数据放入一个具有漏洞的DNS服务器的缓存当中。这些缓存信息会在客户进行DNS访问时返回给用户,从而把用户客户对正常域名的访问引导到入侵者所设置挂马、钓鱼等页面上,或者通过伪造的邮件和其他的server服务获取用户口令信息,导致客户遭遇进一步的侵害。

E2.1.3 DNS信息劫持

原则上TCP/IP体系通过序列号等多种方式避免仿冒数据的插入,但入侵者如果通过监听客户端和DNS服务器的对话,就可以猜测服务器响应给客户端的DNS查询ID。攻击者在DNS服务器之前将虚假的响应交给用户,从而欺骗客户端去访问恶意的网站。假设当提交给某个域名服务器的域名解析请求的数据包被截获,然后按截获者的意图将一个虚假的IP地址作为应答信息返回给请求者。这时,原始请求者就会把这个虚假的IP地址作为它所要请求的域名而进行连接,显然它被欺骗到了别处而根本连接不上自己想要连接的那个域名。

E2.2 对策

采用使用国外免费公用的DNS服务器解决。例如OpenDNS(208.67.222.222)或GoogleDNS(8.8.8.8)。