![DNS:仅一台服务器上的主区域文件;如果是这样,那么工作原理是什么?](https://linux22.com/image/765543/DNS%EF%BC%9A%E4%BB%85%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E4%B8%BB%E5%8C%BA%E5%9F%9F%E6%96%87%E4%BB%B6%EF%BC%9B%E5%A6%82%E6%9E%9C%E6%98%AF%E8%BF%99%E6%A0%B7%EF%BC%8C%E9%82%A3%E4%B9%88%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在通过观看视频和阅读深入研究 DNS 的工作原理。到目前为止,我理解(或者我认为我理解)DNS 域名空间是一种分层逻辑结构,而区域是它的“物理方面”。每个区域映射 DNS 名称空间的一部分,将相关信息保存在文本文件中:我理解,在实践中,每个 DNS 名称空间部分(根、tld、域等)都对应于一个区域文件。我理解,除其他外,有两种类型的区域:主区域和次区域;它们之间的区别在于,主区域是某个区域的区域文件的读/写副本,而次区域只是主区域的更新只读副本,我们只能在主区域文件上进行更改。到目前为止,一切都很清楚。事实并非如此,似乎我们只能拥有一台 DNS 服务器,我们可以在该服务器上拥有主区域文件;如果我理解得没错,这引发了以下疑问:
- 如果我们只能有一台服务器托管主要区域,例如“com”的主要区域,那么怎么可能有多个提供商能够注册域名“.com”,即能够修改“com”主要区域?
- 怎么可能有“13 台服务器”拥有相同的根主区域?
答案1
为什么可能有多个提供商能够注册域名“.com”,即能够修改“com”主区域?
简化:始终有一个负责管理顶级域名 (TLD) 并确保一致性的管理组织。
据称,该单一负责的管理机构将运营和维护“域名注册局”一些注册局直接“出售”域名,另一些注册局则采用仅为认证经销商(注册商)提供批发访问权限的系统,还有一些注册局则两者兼而有之。
对于互联网域名层次结构的根,以及一些通用顶级域名注册中心由互联网名称与数字地址分配机构 (ICANN)但也有很多其他的,例如德尼克它负责管理 .DE ccTLD 以及负责其他 TLD 和 ccTLD 的其他机构。
ICANN 不直接出售域名,而只与经过认可的注册商合作。
注册商如何在注册中心注册其域名如下:https://serverfault.com/a/689852/546643
怎么可能有“13 台服务器”拥有相同的根主区域?
同样,只有一个组织
(https://www.iana.org/domains/root根服务器运营商 (Root Server Operators) 负责提供基础设施、人力和流程。他们定期向“根服务器运营商”提供新的根区域。
另请参阅:https://en.wikipedia.org/wiki/DNS_root_zone
所有运营商“根名称服务器”然后相当于定期下载新版本的“主副本”根区文件来自其发布位置: https://www.iana.org/domains/root/files并在其根名称服务器上分发和激活它。
看https://root-servers.org有多少个超过13个根服务器...
答案2
为了补充 HermanB 的回答,并提供涉及其他主题的另一种观点:
每个区域映射 DNS 名称空间的一部分,并将相关信息保存在文本文件中
这里不需要指定每个区域的处理方式,事实上许多区域都不在“文本文件”中。这与用户(DNS 系统的客户端)无关,他们询问权威名称服务器并得到答复。名称服务器上如何计算该答复以及用于该答复的来源大多是隐藏的,而且也很多。
简而言之,内容可以是数据库中的内容,也可以是根据请求动态计算的,例如根据源的 IP 地址或 DNS 数据包中的其他数据更改地理定位负载平衡的答复,例如使用 EDNS 客户端子网扩展。
我了解到,区域有两种类型:主要区域和次要区域
再说一遍,事实大多不再完全如此,或者至少不再如此。
DNS 启动时,事情很简单。所有设置都类似,对于给定区域,一个名称服务器是主服务器,其他名称服务器是辅助服务器(您也可以找到主/从术语,但目前认为不建议使用),这意味着数据实际上只在主服务器上,辅助服务器使用内部 DNS 请求(AXFR 和 IXFR 查询,然后还有 DNS Notify 以便主服务器触发更快的同步)来获取数据。
即便如此,对于客户端来说,这几乎不会带来任何差异(当然,如果一切运行正常,如果某个主 -> 辅路径损坏,则提供的区域内容将开始不同)。因此,从这个意义上讲,没有“主”或“辅”区域。有一个区域,托管在不同的名称服务器中,过去有主名称服务器和辅名称服务器。
但请注意,这是一个实现细节。如何配置名称服务器的“集群”,以便它们都具有相同的数据并且对给定区域都做出相同的回复,这是一个隐藏的部分,客户端不必知道这一点,而且通常不会知道。上面的设置现在可能不再使用,人们使用带外方式来同步内容,例如使用数据库复制,或使用rsync
或等效的基于磁盘的复制,甚至 DNS 更新消息。
您可能需要查阅有关 DNS 术语的 RFChttps://www.rfc-editor.org/rfc/rfc8499经过多方的长期努力(目前新版本正在起草中),其中列出并定义了很多术语。
您将看不到“主要区域”的定义(因为如上所述,这不是 DNS 中真实存在的东西),但您会找到“主服务器”的定义。
事实并非如此,看起来我们只能拥有一台 DNS 服务器,在其上可以保存主区域文件;
根据上面的段落,您现在应该明白这句话是错误的。任何区域都由多个名称服务器提供服务,并且每个区域都应该随时拥有该区域的副本(或获取此副本的方法)。对于外部客户端、DNS 用户来说,这些名称服务器之间没有区别,它们都做出相同的回复。
如果我们只能有一台服务器托管主要区域,例如“com”的主要区域,那么怎么可能有多个提供商能够注册域名“.com”,即能够修改“com”主要区域?
现在,您已经到了 DNS 的边缘:DNS 是关于发布数据和查询数据的。它(几乎)没有说明如何创建和更新这些数据。任何人都可以自由地为任何给定区域运行其权威名称服务器(但当然不会有任何后果,直到某个父级明确将事情委托给这个名称服务器),因此可以自由决定这个区域中的内容。
当域名行业在上世纪八九十年代开始起步并开始发展时,已经完成了以下工作:
- 计划使用顶级域名,要么是国家代码顶级域名(每个国家一个),要么是“所有人”通用顶级域名
- 当已经运行时,每个 TLD 都有一个注册中心,即它的唯一所有者,使其运行并决定其政策,即谁可以在其中注册名称以及如何注册。
当时,.COM
例如,由 运营Network Solutions
,没有注册商。任何人都可以去 Network Solutions 支付 70 美元购买一个域名的 2 年使用期限。
后来,人们决定打破这种模式,因此引入了注册中心/注册商模式。注册中心仍然是区域的运行者,负责让权威名称服务器为区域内的所有域名做出响应。然后,它只与一些特定的公司(称为注册商)合作,这些公司是经过认证的,能够代表最终客户向注册中心发送命令(注册、更新、续订、删除等)。当时使用的是 RRP 协议,目前几乎所有地方(但不是绝对所有地方,例如 .DE 中没有)都使用 EPP 协议。
注册机构决定规则,包括技术规则(名称中允许的字符、长度、保留名称等)、财务规则(域名价格,全球或按类型(如高级域名)和/或按操作(包括促销等)定价)和法律规则(资格要求,是否任何人都可以获得任何名称等)。因此,这决定了哪些名称最终可以注册并因此在 DNS 中发布(除了没有名称服务器或名称服务器注册但因各种原因被搁置的名称,在这种情况下,DNS 中不会发布该名称的任何内容)。然后,注册商必须使用适当的方法将符合上述规则的命令发送到注册机构,并依次接受最终客户的请求、向他们开具账单等。
请注意,除了一些例外情况,域名并不是免费的(比如啤酒),因此注册机构会按域名向注册商收取费用,反过来,注册商又按域名向最终客户收取费用。
过去,ICANN 规定禁止一家公司同时担任注册机构和注册商,因为这显然存在不竞争行为的风险(这就是为什么 Network Solutions 被 Verisign 收购后,Verisign 必须出售其注册商部分,重新成为 Network Solutions,而 Verisign 则保留 com/net/org 的注册机构角色 - 之后 .ORG TLD 被重新分配给另一个运营商),但现在这一规定已经取消。此外,在 ccTLD 世界中,并不总是存在注册商(尤其是在较小的 TLD 中),有时即使存在,注册机构也会充当注册商(.DE 就是一个典型的例子)。
怎么可能有“13 台服务器”拥有相同的根主区域?
考虑到以上所有情况,这里没有什么特别的。任何区域都可以由多个名称服务器提供服务。13 只是一个(某种)神奇的数字,这是由于数据包的构造方式以及希望将内容放在少于 512 字节的范围内。无论如何,它只是一个逻辑值,因为现在它们都在使用 IP 任播,因此有数千个“POP”,并且每个也不是单个盒子,而是多个盒子(同样,每个提供商都在那里进行自己的混合)。
并且该区域并不特殊,也没有任何隐藏,您可以从 IANA 网站下载它,甚至可以在接受它的 13 个逻辑名称服务器中的一些上使用 DNS AXFR 查询来检索完整区域。
你甚至可以在本地运行它,而且这样做可能有很好的理由,看看https://www.rfc-editor.org/rfc/rfc8806“在解析器本地运行根服务器”:“[...] 解析器可以大大减少往返时间,并通过在同一服务器上提供完整根区域的副本(例如在环回地址或解析器软件中)来防止观察请求。”