自从美国宣布“清洁网络”行动后,很多懂点网络的人,第一反应是,美国人会下手根域名服务器吗?
图片来自 Pexels
这种忧虑可不是一年两年了。
2014 年 6 月 24 日的《人民日报》上引用专家发言:
“目前美国掌握着全球互联网 13 台域名根服务器中的 10 台。理论上,只要在根服务器上屏蔽该国家域名,就能让这个国家的国家顶级域名网站在网络上瞬间“消失”。在这个意义上,美国具有全球独一无二的制网权,有能力威慑他国的网络边疆和网络主权。譬如,伊拉克战争期间,在美国政府授意下,伊拉克顶级域名“.iq”的申请和解析工作被终止,所有网址以“.iq”为后缀的网站从互联网蒸发。”
《信息安全与通信保密》杂志 2014 年第 10 期的一篇文章写道:
“2004 年,由于与利比亚在顶级域名管理权问题上发生争执,美国终止了利比亚的顶级域名 .LY 的解析服务,导致利比亚从网络中消失 3 天。”
对此,我们需要害怕吗?我们需要什么样的反制措施?不是专家,还真回答不了这个问题。因为这需要了解 DNS 的工作原理,了解根域名的管理机制。
这里先给出简要回答:不排除这种可能性,但并不是没有办法。一句话原因:虽然根不在我们手里,但我们有镜像。
DNS 傻瓜书
先了解点基本概念,懂 DNS 的可以直接跳过本节。
①DNS 是什么?
DNS 就是将域名转换为 IP 的,因为我们人类的记忆力太差,根本记不住 IP,而电脑通信又必须用 IP。
所以人类发明了域名,让我们可以记住 baidu.com、taobao.com 这种还算能记得住的域名。然后通过 DNS,将这些域名转换为电脑需要的 IP。
②DNS 是怎么工作的?
每个电脑里面都设置了本地 DNS 服务器(简称 LDNS),需要的时候,就向 LDNS 发出请求,LDNS 在网上问权威域名服务器(简称权威 DNS),有时候问一家是不够的,要问一大圈下来,最后才能得到答案。
③权威 DNS 是干什么的?
问我一个域名,我告诉你 IP,如果我不知道,我告诉你谁可能知道,你再去问它。
④什么是根域名服务器(简称根 DNS)?
当 LDNS 啥都不知道的时候(也即没有任何缓存),就去问根 DNS,根能告诉 LDNS 下一步该问谁。
⑤全世界有多少根 DNS?
13个,其中 10 个在美国,英国和瑞典各 1 个,日本 1 个。
⑥根 DNS 的名字和 IP 都是什么?
在这个网址:
https://www.internic.net/domain/named.root
打开可以看到,里面有 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)是辅根。
为什么根 DNS 只有 13 台?
本节看不懂没关系(一般人都看不懂),你只需要知道,由于历史原因和技术原因,对于 IPv4 而言,根 DNS 只能有 13 个 IP。
正宗答案是:DNS 主要使用 UDP 数据报传送报文,不含前面的各种头部,DNS 报文要求被控制在 512 字节之内( RFC1035 ),主要考虑是这个大小几乎可以在互联网上畅通无阻,不会因为路径中某个 MTU 太小( MTU 通常总会 >= 576,见 RFC791 )而导致 IP 分片,从而预防了各种不可预期的后果。
而每一个根 DNS 在 DNS 报文中都要占用一定的字节数,比如根的名称、TTL、IP 地址等。
这样,13 个根域名服务器基本上就把空间占差不多了,剩余的字节还要用于包装 DNS 报头以及其它协议参数,所以根域名服务器不易太多,13 个算是比较合适的数目。
具体可以看一下“Why 13 DNS root servers?”这篇文章。
真的只有 13 台服务器吗?
和很多人想象的完全不一样,这 13 个根域名服务器,并不是只有 13 台物理的服务器。
这 13 个根,只是一个逻辑上的概念,每个根 DNS,背后都有多台真正的物理服务器在工作!
截至 2020 年 8 月 12 日,全球一共有 1097 个根服务器。每一个根都有若干个镜像,分布在全球不同的地方。
这个数目在不断上涨,去年 10 月 1 日新中国成立 70 周年阅兵的时候,我看了一下,是 1015 个服务器。
这 13 个根由 12 个独立的机构管理,比如A根和J根都是由 Verisign 公司管理,截至 2020 年 8 月 12 日,A 根在全球各地有 53 个站点,J 根有 185 个站点。L 根由 ICANN 管理,全球有 167 个站点,其中北京 2 个,上海 1 个。
在 root-servers 网站上 5,可以查到所有这些根服务器的分布,从网站展示的根镜像服务器地图上看(2020 年 8 月 12 日),北京有 5 个根镜像服务器,上海 1 个,杭州 2 个,武汉 1 个、郑州 1 个、西宁 1 个、贵阳 1 个、广州 1 个、香港 9 个,台北 6 个。
包含港澳台部分,我国一共有 28 个根镜像。我国境内发出的对根 DNS 的请求,其实都由镜像完成了。这一点后面会解释。
现在,为了增长知识,你该硬着头皮看一些 DNS 细节了。
DNS 到底是怎么工作的?
对于 IT 从业者,希望你能理解并牢牢记住本节的内容。因为你迟早会遇到有关 DNS 的困惑。
先介绍一下域名的级别:.代表根域名, .com 这种是顶级域名,也叫一级域名,baidu.com 这种叫二级域名, www.baidu.com 这种叫三级域名,依次类推。
注:也有其他叫法的,反正你知道这个意思就可以了。
再介绍一下最常见的两种域名服务器:
权威 DNS:负责对请求作出权威的回答。权威 DNS 中存储着记录,最常见的 3 种:A 记录(记录某域名和其 IP 的对应),NS 记录(记录某域名和负责解析该域的权威 DNS),CNAME 记录(负责记录某域名及其别名)。
权威能直接回答的,就回 A 记录;需要其他权威 DNS 回答的,就回 NS 记录,然后 LDNS 再去找其他权威 DNS 问;如果该记录是别名类型的,就回 CNAME,LDNS 就会再去解析别名。
递归 DNS:通常就是 LDNS,它接受终端的域名查询请求,负责在网上问一圈后,将答案返回终端。
现在举一个具体的例子:比如终端请求 www.baidu.com 这个域名的 IP。
在没有缓存时,LDNS 会从根 DNS 问起:
LDNS 问根 DNS 说:“www.baidu.com 的 IP 是多少啊?”。
根 DNS 说:“我哪有时间管你这么细的问题,你去问 com 顶级域的 DNS 吧,我只管到顶级域,喏,这些是 com 顶级域 DNS 的名字和 IP,你去问它们吧”。(以 NS 记录回应)
LDNS 又忙问 com 的权威 DNS,com 权威 DNS 说:“你问的这是三级域名,我不管这么多,你去问 baidu.com 的权威 DNS 吧,它的名字是 ns.baidu.com,他的 IP 是 XXX(这里可能给出多个权威 DNS)”。
LDNS 继续问 baidu.com 的权威 DNS,这次痛快,因为 www.baidu.com 正是它管的,它可能直接给出 A 记录,也可能给出 CNAME 记录,如果是前者,就直接得到 IP,如果是后者,就需要对别名再做查询。
最终,LDNS 得到 www.baidu.com 的 IP,并将其返回给终端。
细心的人会问,在第 1 步中,LDNS 问根 DNS 的时候,他是怎么知道根 DNS 的 IP 的?
这 13 个 IP 通常是预先配置在 LDNS 里面的。在 LDNS 初始化 DNS 缓存或者缓存失效的时候,LDNS 向自己被预先配置的这些 IP 中的一个,发起对根的查询(也即询问 . 的 NS 记录),获得最新的根 DNS 的信息。
对于 DNS 服务器软件而言,这 13 个 IP,配置在根提示文件(root hints file)中,可能是 named.cache 或 root.ca 或 root.hints 等等之类的文件。
上面就是各种教科书中都会讲到的 DNS 查询过程,但实际上,没有这么麻烦,因为各个层面都是有缓存的。
实际 DNS 查询的过程,是这样的:(举个例子,比如用户在浏览器中输入这个域名:123.abc.qq.com.cn)
①浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问 LDNS。
②LDNS 会去先看看自己有没有 123.abc.qq.com.cn 的 A 记录,要有就直接返回,要没有,就去看有没有 abc.qq.com.cn 的 NS 记录,如果有,就去问它要答案,如果没有,就去看有无 qq.com.cn 的 NS 的记录,如果有,就去问它,没有就去看有无 com.cn 的 DNS,还没有就去看有无 cn 的 DNS,如果连 cn 的 NS 记录都没有,才去问根。
所以,有了缓存以后,教科书上那种从根问起的情况,实际上很少发生。只有在各处都没有缓存的时候,我们才会问根。
根镜像起什么作用?
根镜像承担起和根一样的功能。
根 DNS 中,最重要的文件就是根区文件(Root Zone file)。所有顶级域名记录都存在根区文件中。
辅根从主根同步数据,根镜像从根同步数据。最终,所有根和镜像都有着同样的根区文件。而且最有意思的是,根镜像和根有着同样的 IP。
我们知道,全球有一千多个根镜像,但是大多数人不知道,它们一起共享 13 个 IP!
对的,因为只有 13 个根。这是如何做到的?答案是任播( Anycast,又译泛播)技术。
不关心技术细节的,请直接看本节的最后一句。任播最初由 RFC1546 提出,主要用在 DNS 根服务器上。
任播是指在 IP 网络上通过一个 IP 地址标识一组提供特定服务的主机,服务访问方并不关心提供服务具体是哪一台主机提供的,访问该地址的报文可以被 IP 网络路由到“最近”的一个(最好也只是一个,别送到多个)服务器上。
这里“最近”可以是指路由器跳数、服务器负载、服务器吞吐量、客户和服务器之间的往返时间( RTT,round trip time )、链路的可用带宽等特征值。
这样,一方面,用户可以就近访问;另一方面,即便部分根出现故障也没事。有些同学可能联想到负载均衡,没错,大致上就是这个意思。
对于中国用户来说,对根的请求,一般不会跑到美国去,而是通过任播技术路由到中国境内的根镜像上。
根 DNS 是怎么管理的?
根 DNS 目前由 12 家机构管理。A 根是主根,由美国公司 Verisign 管理。根 DNS 中最重要的文件,根区文件,由 ICANN 管理。
ICANN(The Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)是成立于 1998 年的一家注册在美国的非营利性组织。
根 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 董事会正式确认王伟当选。
我国的根镜像由谁管理?
从目前我所找到的资料看,自 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 和 JX0006L12,并批准互联网域名系统北京市工程研究中心(ZDNS)设立 L 根镜像服务器 JX0007L13。
2019 年 11 月 6 日,工信部批复同意中国信息通信研究院设立 L 根镜像服务器,编号分别为 JX0008L、JX0009L。
2019 年 12 月 5 日,工信部批复同意中国信息通信研究院设立域名根服务器(K根镜像服务器),编号为 JX0010K。
2019 年 12 月 9 日,工信部批复同意 CNNIC 设立域名根服务器(J、K 根镜像服务器),编号分别为 JX0011J、JX0012K。
从工信部的批文中可以了解到,相关单位负责根镜像的运行、维护和管理工作,维护国家利益和用户权益,并接受工信部的管理和监督检查。
工信部在给 CNNIC 的批文中写道:“你中心应严格遵守《互联网域名管理办法》《通信网络安全防护管理办法》及相关法律法规、行政规章及行业管理规定,接受我部的管理和监督检查,建立符合我部要求的信息管理系统并与我部指定的管理系统对接,保证域名根服务器安全、可靠运行,为用户提供安全、方便的域名服务,保障服务质量,保护用户个人信息安全,维护国家利益和用户权益。”
美国能对根 DNS 做什么手脚?
虽然 ICANN 是一个独立的非营利性机构,但如果美国政府动用强制力量,A 根(主根)的内容仍然存在被篡改的可能。也就是根区文件可以被篡改。
会怎么篡改?我们先看看根区文件长什么样。从 ICANN 官网上可以下载根区文件:
https://www.iana.org/domains/root/files
该文件保存所有顶级域名的信息,目前大小为 2.2M,2 万余行。每当有顶级域名的变动时,该文件就会更新。
我们可以看到,和 cn 域名解析相关的记录也就那么几十行:
如果删除和 cn 相关的那些行,很快,就会同步到所有的根中。然后,在所有的缓存都过期之后,全球所有人都访问不了 .cn 后缀的网站。
如何应对?
因为我们维护着根镜像,所以我们控制着镜像中的内容。而中国境内的对根的访问,通过我们的运营商,都会落到对我国根镜像的访问上。
我们可以不同步关于 cn 的修改。就这么简单。可以简单写个程序,每次同步完立刻加上 cn 记录。
也可以自己搭个主根,完全不和美国的根同步。(相当于另立中央了)当然,世界各地不在我们管理之下的根和根镜像,如果不加行动,仍然会同步这些删除。
那么,除了中国自己,其他国家的人都无法访问 .cn 网站。但是,这些国家很快就会有响应,凡是想访问 .cn 网站的国家,都会把 cn 记录加回去,并拒绝同步美国删去的这几行。
最终,只有美国人,访问不了 .cn 网站。
综上分析,我认为美国这么做的可能性不大,因为这一招过于低劣,将会让美国政府完全颜面扫地,并失去今后在互联网领域的任何话语权。
而 ICANN 也将失去公信力,整个互联网世界,会推选使用新的机构和新的主根。
因为互联网世界的一贯准则就是:如有封禁,就绕过它。
后记
最后,我们看看本文开头所提的两个断网事件是怎么回事。
关于伊拉克域名事件,可以看看清华大学段海新教授的文章:
“伊拉克域名 .IQ 被美国删除的背后以及早期的根域名管理”,里面把整个事件的来龙去脉说的很清楚。主要原因是 .iq 域名的前任管理者于 2002 年被关进监狱,新任管理者(NCMC)于 2005 年才提出申请,而 IANA 当时还考虑征求新旧代理双方对新授权的一致认可,所以才出现了所谓的“申请和解析工作被终止”。
关于利比亚域名事件,可以看看此文:
“利比亚国家顶级域名(.LY)中止服务始末”,事实情况是参与运营 .LY 的两家机构因争夺归属权而内斗的结果(其中一方关闭了 .LY 域名服务器的解析)。经过这番变乱,2004 年 10 月,ICANN 批准将 .LY 授予利比亚邮电总公司,.LY 事件算是尘埃落定。
本文中提到的风险和应对,主要是我个人的分析,下面看看业内专家的说法。
中国工程院院士、清华大学计算机系主任吴建平在 2019 年的一次访谈中表示,DNS 根域名服务器不是互联网的“核按钮”。全球互联网根域名服务器运行者,不可能同时关闭所有的根服务器,包括影子服务器。
互联网域名系统北京市工程研究中心(ZDNS)主任毛伟表示:
互联网专家一直都在不断完善域名根系统安全保障机制,就算真的断“根”了,也有应急方法来解决。在境内,可以采用根区数据备份并搭建应急根服务器来解决;在全球层面,可以用根镜像、IPv6 环境下的根服务器数量扩展、根服务器运行机构备选机制等方法来解决。
现在,了解了这么多,关于根域名服务器,你是不是放心了很多。
作者:卫剑钒
编辑:陶家龙
出处:转载自公众号微月人话