我们公司期待部署和维护自己的公共 DNS。我概述了部署活动,但有点困惑在哪里注册我的公司域名以及如何映射我的公共 DNS。请有人解释一下流量流。
答案1
我曾经在一家域名注册公司工作,并且是 IETF DNS 工作组的成员,所以我可以给你提供一些入门知识。
域名系统采用层级结构设计。当您查找域名数据时,通常会先查找最顶层,然后再向下查找。
最顶端是根。根名称服务器是遍布全球的一系列服务器,任何问题都会从这些服务器开始 - 除非数据被缓存,我们稍后会讲到。作为普通用户,您不会在域名中看到它们,但它们确实存在。
接下来是顶级域名。它们分为通用顶级域名(例如 .com、.net 或 .movie)和国家代码顶级域名(例如 .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.
输出如下(再次简化)
;; 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
问题部分向我们展示了我们所要求的内容,在本例中是 com 的 NS 记录。
AUTHORITY SECTION 向我们表明,根服务器不负责 .com,但它告诉我们谁负责。在本例中,它告诉我们 a.gtld-servers.net 负责。
它还为我们提供了一个附加部分,其中包含 a.gtld-servers.net 的地址记录(A 代表 IPv4,AAAA 代表 IPv6)。此地址称为胶水,不被视为权威答案,但它是一个提示,告诉我们这是系统中列出的地址。当您需要服务器的 IP 地址时,就需要胶水记录,否则只能通过执行 DNS 查找才能访问该服务器,而您需要名称服务器的 IP 地址。这一切都有点递归。
无论如何,让我们继续查找 example.com 的名称服务器。现在,这与现实世界 DNS 告诉您的内容略有不同,但这是一个示例,因此我们将使用示例数据。
$ dig ns example.com. @192.5.6.30
我们询问的是上面获取到的 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
现在,这就是粘合的重要性所在。由于 example.com 的名称服务器位于 example.com 下,因此它们由 example.com 下的名称服务器管理。本质上,您被告知要给 Bob 打电话询问 Bob 的电话号码,因为只有 Bob 知道 Bob 的电话号码。粘合是一种提示。Bob 可能已经更改了号码,但这是 .com 的名称服务器所知道的。
现在我们知道了 example.com 名称服务器的地址,我们最终可以询问主机名。
$ dig a www.example.com. @192.0.2.4
;; QUESTION SECTION:
;www.example.com. IN A
;; ANSWER SECTION:
www.example.com. 300 IN A 192.0.2.10
我们终于得到了www.example.com主机名。请注意,这里没有 ADDITIONAL SECTION,因为此查询不需要这样的部分。我们提出一个简单的问题,并从域的权威服务器获得精确的答案。
现在,一直进行所有这些查找有点浪费时间和资源,因此通常的做法是让您的本地 DNS 服务器充当缓存。您注意到所有 DNS 记录的样子了吗?DNS 记录中的字段如下:域、生存时间 (TTL)、类别(在我们的例子中是 IN 代表 Internet)、类型(A 代表地址、NS 代表名称服务器等)和数据(例如 A 记录的 IP 地址)。
DNS 记录中的 TTL 是允许缓存存储数据的时间长度。预计不会更改或很少更改的记录具有较长的 TTL。例如,我们查看的前几条记录中的 TTL 为 172800 秒。可能在短时间内更新的记录的 TTL 较低,例如www.example.com。
每当我们进行 DNS 查找时,如果要查找的数据已缓存,我们就不需要一路前往根服务器。我们通常一直访问 .com 域,因此数据几乎总是缓存在我们的本地 DNS 服务器中。然而,这意味着每当您更改 DNS 数据时,更改都可能需要一些时间才能传播。实际上,这意味着您需要提前更改 TTL,或者告诉您的老板任何更改都需要一些时间才能完全生效。
要注册域名,您通常需要前往要注册的顶级域名的注册商处。大多数托管公司和域名注册商都能够在多个不同的顶级域名下注册域名,因此您几乎可以选择其中任何一个。
注册商是注册局的经销商。注册局是实际运营相关顶级域名的公司或组织,但作为最终用户,您需要处理的只是注册商,甚至只是您的托管公司。
大多数注册商都有网络界面来处理大量委派和 DNS 记录的技术细节,但即便如此,了解 DNS 的基础知识也会让您的生活变得轻松很多,即使您依赖注册商的网络界面。
如果您想了解有关 DNS 的更多信息,并且如果您从事 IT 工作,您真的应该知道 DNS 的工作原理,因为它是许多潜在问题的根源,我推荐 O'Reilly 的《DNS 和 Bind》一书。这本书非常全面,可以让您成为 DNS 专家。如果您想运行自己的 DNS 服务器,我强烈建议您阅读这本书。它确实涵盖了 Bind DNS 服务器软件,但同样的原则适用于任何 DNS 服务器软件。