什么是DNS中的顶级域服务器。想了解它在实时网络流量中的意义

luk*_*ani 1 domain-name-system dns-zone

我们公司期待部署和维护自己的公共 DNS。我概述了部署活动,但对在哪里注册我的公司域名以及如何映射我的公共 DNS 感到困惑。请任何人解释交通流量。

小智 10

我曾经在域注册机构工作,并且是 IETF DNS 工作组的成员,所以我会给你一个入门。

域名系统是按层次结构设计的。当您查找域名的数据时,您通常会转到最顶部并向下查找。

  • 最顶端是根。根名称服务器是分布在世界各地的许多服务器,任何问题总是从这些服务器开始——除非数据被缓存,我们稍后再谈。作为普通用户,您不会在域名中看到它们,但它们就在那里。

  • 接下来是顶级域。它们分为通用顶级域(如 .com、.net 或 .movi​​e)和国家代码顶级域(如美国的 .us、挪威的 .no 或中国的 .cn)。

  • 之后是二级领域。这些是您通常作为最终客户购买的产品。例如,如果您想拥有 example.com,请前往注册商,检查 example.com 是否可用,如果可用,请将其添加到购物车并点击结帐。然后,您可以让注册商或其他托管公司为您运行 DNS,或者您将设置自己的 DNS 服务器并让注册商将域委托给您。委派意味着他们将注册数据,表明您的 DNS 服务器负责该域。

  • 拥有域后,您还可以设置三级域或子域。这为 DNS 服务器添加了另一个层次结构。您还可以设置主机名,对于普通用户来说,这看起来完全一样。

那么,让我们来看看平均的 DNS 查找。

假设您想访问www.example.com。您的 DNS 服务器要做的第一件事就是去根服务器查找谁负责 .com。您的 DNS 服务器已经内置了根服务器的地址,因此通常无需查找它们。相反,我们寻找 .com 的信息。

我将在这里使用程序“dig”,但为了可读性我会认可输出。

首先,我们为 com 请求名称服务器 (ns)。我们直接从服务器 a.root-servers.net 询问,它是 DNS 系统的根服务器之一。

$ dig ns com. @a.root-servers.net.
Run Code Online (Sandbox Code Playgroud)

输出如下(再次,缩写)

;; QUESTION SECTION:
;com.                           IN      NS

;; AUTHORITY SECTION:
com.                    172800  IN      NS      a.gtld-servers.net.

;; ADDITIONAL SECTION:
a.gtld-servers.net.     172800  IN      A       192.5.6.30
a.gtld-servers.net.     172800  IN      AAAA    2001:503:a83e::2:30
Run Code Online (Sandbox Code Playgroud)

QUESTION SECTION 向我们展示了我们的要求,在这种情况下, com 的 NS 记录。

AUTHORITY 部分向我们展示了根服务器不对 .com 负责,但它告诉我们是谁负责。在这种情况下,它告诉我们 a.gtld-servers.net 负责。

它还为我们提供了一个附加部分,其中包含 a.gtld-servers.net 的地址记录(A for IPv4 和 AAAA for IPv6)。这个地址被称为胶水,不被认为是权威答案,但它是一个提示,告诉我们这是系统中列出的地址。当您需要服务器的 IP 地址时需要胶水记录,否则您只能通过执行 DNS 查找来访问该地址,您需要名称服务器的 IP 地址。这一切都有些递归。

不管怎样,让我们​​继续查找 example.com 的名称服务器。现在,这将与真实世界的 DNS 告诉您的内容略有不同,但这是一个示例,因此我们将使用示例数据。

$ dig ns example.com. @192.5.6.30
Run Code Online (Sandbox Code Playgroud)

我们正在询问上面得到的 a.gtld-servers.net 的 IP 地址。它们是 .com 域的权威,因此应该能够告诉我们 example.com 有哪些名称服务器。

;; QUESTION SECTION:
;example.com.                    IN      NS

;; AUTHORITY SECTION:
example.com.             172800  IN      NS      ns2.example.com.
example.com.             172800  IN      NS      ns1.example.com.

;; ADDITIONAL SECTION:
ns2.example.com.         172800  IN      A       192.0.2.4
ns1.example.com.         172800  IN      A       192.0.2.5
Run Code Online (Sandbox Code Playgroud)

现在,这就是为什么这种胶水很重要。由于example.com 的名称服务器驻留在example.com 下,因此它们由example.com 下的名称服务器管理。本质上,你被告知打电话给 Bob 以获取 Bob 的号码,因为只有 Bob 知道 Bob 的电话号码是什么。胶水是一个提示。Bob 可能已经更改了号码,但这是 .com 的名称服务器所知道的。

现在我们知道了 example.com 名称服务器的地址,我们终于可以询问主机名了。

$ dig a www.example.com. @192.0.2.4
Run Code Online (Sandbox Code Playgroud)
;; QUESTION SECTION:
;www.example.com.                    IN      A

;; ANSWER SECTION:
www.example.com.             300     IN      A       192.0.2.10
Run Code Online (Sandbox Code Playgroud)

我们终于有了www.example.com主机名的地址记录。请注意这里没有附加部分,因为此查询不需要这样的部分。我们提出了一个简单的问题,并从对该域具有权威性的服务器上获得了准确的答案。

现在,一直进行所有这些查找有点浪费时间和资源,因此通常所做的是本地 DNS 服务器充当缓存。您是否注意到所有 DNS 记录的外观?DNS 记录中的字段如下:域、生存时间 (TTL)、类(在我们的例子中为互联网的 IN)、类型(A 表示地址,NS 表示名称服务器等)和数据(例如一个 IP 地址用于一个记录)。

DNS 记录中的 TTL 是允许缓存存储数据的时间。预期不会更改或很少更改的记录具有长 TTL。例如,我们查看的前几条记录中的 172800 秒 TTL。可能会在短时间内更新的记录具有较低的 TTL,例如www.example.com的 300 秒 TTL 。

每当我们进行 DNS 查找时,如果我们已经在寻找的数据已被缓存,我们就不需要一直到根服务器。我们通常一直访问 .com 域,因此数据几乎总是缓存在我们的本地 DNS 服务器中。但是,这确实意味着无论何时更改 DNS 数据,更改传播都可能需要时间。实际上,这意味着您需要提前更改 TTL,或者告诉您的老板任何更改都需要时间才能完全生效。

要注册您的域,您通常需要前往您要在其下注册的顶级域的注册商。大多数托管公司和域注册商将能够在许多不同的顶级域下注册域,因此您几乎可以选择其中的任何一个。

注册服务商是注册管理机构的经销商。注册管理机构是实际运行相关顶级域的公司或组织,但作为最终用户,您需要处理的只是注册服务商,甚至只是您的托管公司。

大多数注册商都有处理授权和 DNS 记录的许多技术细节的网络界面,但即便如此,即使您依赖注册商的网络界面,了解 DNS 的基础知识也会让您的生活变得更加轻松。

如果您想了解有关 DNS 的更多信息,并且如果您从事 IT 工作,您真的应该了解 DNS 的工作原理,因为它是许多潜在问题的根源,我建议您阅读 O'Reilly 的《DNS 和绑定》一书。它非常全面,将使您成为 DNS 专家。如果您想运行自己的 DNS 服务器,我强烈建议您阅读本书。它确实涵盖了绑定 DNS 服务器软件,但相同的原则适用于那里的任何 DNS 服务器软件。

  • “大多数注册商都有处理授权和 DNS 记录的许多技术细节的网络界面” 对我来说强调(因为很多人否则会感到困惑)似乎很重要,域名注册商和 DNS 提供商是完全分开的工作。给定的公司可以两者兼而有之,但从技术上讲,它们是分开的。可能所有注册商在某种程度上也是 DNS 提供商,许多 DNS 提供商也是注册商(例如 Cloudflare 最近进入业务),但仍然必须记住它们是不同的工作。 (3认同)
  • 您使用 RFC2606 很好,但也请记住在混淆时使用 RFC5737(我编辑了您的帖子),以确保绝对不使用“1.0.0.0/8”作为块示例,因为今天已上线并被知名人士使用公共服务。 (2认同)