上网冲浪既有趣又容易,但想想看,如果您必须键入要查看的每个网站的 IP 地址,那会是什么样子。例如,当您键入网站时,定位网站看起来像这样:https://93.184.216.34,这对于我们大多数人来说几乎是不可能记住的。当然,使用书签会有所帮助,但假设您的朋友告诉您一个很酷的新网站,并告诉您访问 93.184.216.34。您将如何记住这一点?告诉别人访问“Opensource.com”更容易记住。是的,那是我们的 IP 地址。
域名系统提供了一个数据库,用于将人类可读的主机名(例如 www.opensource.com)转换为 IP 地址(例如 93.184.216.34),以便您连接到互联网的计算机和其他设备可以访问它们。BIND(伯克利互联网名称域)软件的主要功能是作为使用该数据库的域名解析器。还有其他名称解析器软件,但 BIND 是目前互联网上使用最广泛的 DNS 软件。在本文中,我将交替使用术语名称服务器、DNS 和解析器。
如果没有这些名称解析器服务,像我们现在这样自由轻松地进行网络冲浪几乎是不可能的。作为人类,我们更擅长使用像 Opensource.com 这样的名称,而计算机更擅长使用像 93.184.216.34 这样的数字。因此,我们需要一种翻译服务来将我们容易记住的名称转换为我们的计算机容易记住的数字。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# Lab hosts
192.168.25.1 server
192.168.25.21 host1
192.168.25.22 host2
192.168.25.23 host3
192.168.25.24 host4
在小型网络中,每台主机上的 /etc/hosts 文件可以用作名称解析器。在多台主机上维护此文件的副本可能非常耗时,并且错误可能会导致很多混乱和时间浪费,然后才能被发现。我在自己的网络上这样做了几年,最终变得太麻烦了,即使只有通常的 8 到 12 台计算机在运行也是如此。最终,我转换为运行自己的名称服务器来解析内部和外部主机名。
任何规模的大多数网络都需要使用名称服务软件(例如 BIND)对该服务进行集中管理。主机使用域名系统 (DNS) 从 Web 浏览器、电子邮件客户端、SSH、FTP 和许多其他互联网服务等软件中给出的名称中查找 IP 地址。
名称搜索的工作原理
让我们看一下一个简化的示例,了解当您的计算机上的客户端服务发出网页的名称请求时会发生什么。在本例中,我将使用 www.opensource.com 作为我要在浏览器中查看的网站。我还假设网络上有一个本地名称服务器,就像我自己的网络一样。
1. 首先,我键入 URL 或选择包含该 URL 的书签。在本例中,URL 是 www.opensource.com。
2. 浏览器客户端(无论是 Opera、Firefox、Chrome、Lynx、Links 还是任何其他浏览器)将请求发送到操作系统。
3. 操作系统首先检查 /etc/hosts 文件,查看 URL 或主机名是否在那里。如果是,则将该条目的 IP 地址返回给浏览器。如果不是,我将继续下一步。在本例中,我假设它不在那里。
4. 然后,URL 将发送到 /etc/resolv.conf 中指定的第一个名称服务器。在本例中,第一个名称服务器的 IP 地址是我自己的内部名称服务器。在本例中,我的名称服务器没有 www.opensource.com 的 IP 地址缓存,因此必须进一步查找。让我们继续下一步。
5. 本地名称服务器将请求发送到远程名称服务器。这可以是两种目标类型之一,其中一种类型是转发器。转发器只是另一个名称服务器,例如您的 ISP 上的名称服务器或公共名称服务器,例如 Google 上的 8.8.8.8 或 8.8.4.4。另一种目标类型是顶级 根名称服务器。根服务器通常不会响应所需的 目标 IP 地址或 www.opensource.com,它们会响应该域的权威名称服务器。权威名称服务器是唯一有权维护和修改域的名称数据的服务器。
本地名称服务器配置为使用根名称服务器,因此 .com 顶级域的根名称服务器返回 权威名称服务器 的 IP 地址,用于 www.opensource.com。该 IP 地址可以是三个名称服务器(在撰写本文时)ns1.redhat.com、ns2.redhat.com 或 ns3.redhat.com 中的任何一个。
6. 然后,本地名称服务器将查询发送到权威名称服务器,该服务器返回 www.opensource.com 的 IP 地址。
7. 浏览器使用 www.opensource.com 的 IP 地址发送网页请求,该网页将下载到我的浏览器。
这种名称搜索的一个重要副作用是,结果会被我的本地名称服务器缓存一段时间。这意味着下次我或我网络上的任何其他人想要访问 Opensource.com 时,IP 地址可能已在本地存储,这可以防止进行远程查找。
DNS 数据库
DNS 系统依赖于其数据库来执行主机名查找以定位正确的 IP 地址。DNS 数据库是一个通用的分布式、分层、复制的数据库。它还定义了互联网上使用的主机名样式,正确地称为 FQDN(完全限定域名)。
FQDN 由完整的主机名组成,例如 hornet.example.com 和 test1.example.com。FQDN 分为三个部分。
1. TLDN(顶级域名),例如 .com、.net、.biz、.org、.info、.edu 等,提供 FQDN 的最后一段。所有 TLDN 都由根名称服务器管理。除了国家顶级域名(例如 .us、.uk 等)外,最初只有少数主要的顶级域名。截至 2017 年 2 月,共有 1528 个顶级域名。
2. 当指定主机名或 URL 时,二级域名始终紧靠顶级域名的左侧,因此像 Redhat.com、Opensource.com、Getfedora.org 和 example.com 这样的名称提供了 FQDN 的组织地址部分。
3. FQDN 的第三级是名称的主机名部分,因此网络中特定主机的 FQDN 类似于 host1.example.com。
图 1 显示了 DNS 数据库层次结构的简化图。“顶层”由一个点 (.) 表示,没有真正的物理存在。它是一种设备,用于 DNS 区域文件配置,以启用域名的显式停止。稍后会详细介绍。
真正的顶层由根名称服务器组成。这些是维护顶级 DNS 数据库的有限数量的服务器。根级别可能包含某些域的 IP 地址,并且根服务器将直接提供可用的 IP 地址。在其他情况下,根服务器提供所需域的权威服务器的 IP 地址。
例如,假设我想浏览 www.opensource.com。我的浏览器向本地名称服务器发出请求,该服务器不包含该 IP 地址。我的本地名称服务器配置为在本地缓存中找不到地址时使用根服务器,因此它将 www.opensource.com 的请求发送到其中一个根服务器。当然,本地名称服务器必须知道如何定位根名称服务器,因此它使用 /var/named/named.ca 文件,该文件包含根名称服务器的名称和 IP 地址。named.ca 文件也称为提示文件。
在本例中,www.opensource.com 的 IP 地址未由根服务器存储。根服务器使用其数据库来定位 www.opensource.com 的权威名称服务器的名称和 IP 地址。
本地名称服务器查询权威名称服务器,后者返回 www.opensource.com 的 IP 地址。然后,本地名称服务器响应浏览器的请求,并为其提供 IP 地址。Opensource.com 的权威名称服务器包含该域的区域文件。
# dig www.opensource.com ; <<>> DiG 9.10.4-P6-RedHat-9.10.4-4.P6.fc25 <<>> www.opensource.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54308 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 4 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.opensource.com. IN A ;; ANSWER SECTION: www.opensource.com. 300 IN CNAME opensource.com. opensource.com. 300 IN A
93.184.216.34;; AUTHORITY SECTION: opensource.com. 129903 IN NS ns1.redhat.com. opensource.com. 129903 IN NS ns3.redhat.com. opensource.com. 129903 IN NS ns2.redhat.com. ;; ADDITIONAL SECTION: ns2.redhat.com. 125948 IN A 209.132.183.2 ns3.redhat.com. 125948 IN A 66.187.233.212 ns1.redhat.com. 125948 IN A 209.132.186.218 ;; Query time: 71 msec ;; SERVER: 192.168.0.51#53(192.168.0.51) ;; WHEN: Sat Mar 04 21:23:51 EST 2017 ;; MSG SIZE rcvd: 186
上面的列表 2 显示了 dig 命令的结果,不仅显示了所需主机的 IP 地址,还显示了权威服务器、它们的 IP 地址以及实际满足请求的服务器。以下是使用 dig 命令获取 www.opensource.com 的 DNS 信息。dig 命令是一个强大的工具,可以告诉我们很多关于主机 DNS 配置的信息。dig 命令返回 DNS 数据库中的实际记录,并将结果显示在四个主要部分中。阅读这些部分的描述时,请参考列表 2。
第一部分是问题部分。对于本例,它说明我正在查找“www.opensource.com”的 A 记录。请注意顶级域名名称末尾的点。这表示 .com 是主机名中的最后一个域名组件。
答案部分显示了两个条目,一个 CNAME 记录和一个 A 记录。A 记录是主要的名称解析器记录,并且必须有一个 A 记录,其中包含每个主机的 IP 地址。CNAME 代表规范名称,此记录类型是 A 记录的别名,并指向 A 记录。通常不建议使用“www”作为 Web 服务器的主机名。常见的是看到 CNAME 记录指向 FQDN 的 A 记录;但是,这里的情况并非如此。请注意,Opensource.com 的 A 记录没有关联的主机名。可以有一个适用于整个域的记录,就像这里的情况一样。
权威部分列出了 Opensource.com 域的权威名称服务器。在本例中,这些是 Red Hat 名称服务器。请注意,这些条目的记录类型为 NS。
附加部分列出了 Red Hat 名称服务器的 A 记录。
在附加部分之后,我可以找到一些其他有趣的信息,包括返回结果中显示的信息的服务器的 IP 地址。在本例中,它是我自己的内部名称服务器。
DNS 客户端配置
大多数计算机只需要很少的配置即可访问名称服务。它通常包括将一到三个名称服务器的 IP 地址添加到 /etc/resolv.conf 文件中。这通常在大多数家庭和笔记本电脑的启动时执行,因为它们是使用 DHCP(动态主机配置协议)配置的,DHCP 为它们提供 IP 地址、网关地址和名称服务器的 IP 地址。
对于静态配置的主机,resolv.conf 文件通常在安装期间根据执行安装的系统管理员输入的信息生成。在当前基于 Red Hat 的发行版和其他使用 NetworkManager 管理网络配置和执行连接管理的发行版中,静态信息(例如名称服务器、网关和 IP 地址)都存储在位于 /etc/sysconfig/network-scripts 中的接口配置文件中。
可以通过将信息添加到接口配置文件来覆盖提供给主机的默认值。例如,我有时会将我首选的名称服务器添加到我的笔记本电脑和上网本上的接口配置文件中。公共场所(例如酒店、咖啡店,甚至朋友的个人 Wi-Fi 连接)中的远程连接提供的许多名称服务器可能不可靠,并且在某些情况下可能会使用有意审查结果或将查询重定向到广告页面的转发器,因此我始终在我的接口配置文件中插入 Google 公共名称服务器。有关接口配置文件的信息,请参阅我的文章如何在 Linux 中配置网络。
另请注意,NetworkManager 会为它连接的每个 Wi-Fi 网络创建一个接口配置文件。配置文件以网络的 SSID(服务集标识符)命名。请务必将所需的名称服务器条目添加到正确的文件中。
以下列出了最近几个月 NetworkManager 在我的笔记本电脑上创建的一些接口配置文件。
- ifcfg-enp0s25(这是有线网络的配置文件。)
- ifcfg-FBI-DHS.TF1_EXT
- ifcfg-HOME-14A2
- ifcfg-linksys
- ifcfg-LinuxDude
- ifcfg-MomsPlace
- ifcfg-FBI-van
- ifcfg-PointSourceGuest
- ifcfg-Red_Hat_Guest
- ifcfg-Sands_3_hoa1
- ifcfg-Sheraton_Raleigh_Guest_Access
- ifcfg-SM-CLC1
- ifcfg-xfinityWi-Fi
不,我与 FBI 没有任何联系。我认识的某个不愿透露姓名的人具有有趣的幽默感,喜欢让邻居感到紧张。
DNS 记录类型
有许多不同的 DNS 记录类型,我想在这里介绍一些更常见的类型。我的下一篇文章将介绍如何使用 BIND 创建您自己的名称服务器,并将使用许多这些记录类型来构建您的名称服务器。这些记录类型在构成 DNS 数据库的区域文件中使用。
所有这些记录中的一个常见字段是“IN”,它指定这些是互联网记录。
查看维基百科上的 DNS 记录类型完整列表。
SOA
SOA 是起始授权记录。它是任何正向或反向区域文件中的第一个记录,它将此标识为它描述的域的权威源。它还指定某些功能参数。典型的 SOA 记录如下所示。
@ IN SOA epc.example.com root.epc.example.com. (
2017031301 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
SOA 记录的第一行包含区域的服务器名称和区域管理员,在本例中为 root。
第二行是序列号。在本例中,我使用 YYYYMMDDXX 格式的日期,其中 XX 是计数器。因此,上面的 SOA 记录中的序列号表示 2017 年 3 月 13 日此文件的第一个版本。此格式确保对序列号的所有更改都以数字顺序递增。这样做很重要,因为辅助名称服务器(也称为从属服务器)仅在主服务器上区域文件的序列号大于辅助服务器上的序列号时才从主服务器复制。进行更改时,请务必递增序列号,否则辅助服务器将不会与修改后的数据同步。
SOA 记录的其余部分由各种时间组成,辅助服务器应在这些时间内从主服务器执行刷新,并在首次刷新失败时等待重试。它还定义了区域的权威状态过期的时长。
时间过去都以秒为单位指定,但最新版本的 BIND 允许使用 W=周、D=天、H=小时和 M=分钟定义的其他选项。如果未指定其他说明符,则假定为秒。
$ORIGIN
$ORIGIN 记录类似于变量赋值。BIND 程序将此变量的值附加到 A 或 PTR 记录中任何未以句点 (.) 结尾的名称,以便为该主机创建 FQDN(完全限定域名)。这减少了键入量,因为区域管理员只需键入主机名部分,而无需键入每个记录的 FQDN。
$ORIGIN example.com.
此外,@ 符号用作此变量的快捷方式,文件中任何出现 @ 的地方都将替换为 $ORIGIN 的值。
NS
NS 记录指定区域的权威名称服务器。请注意,此记录中的两个名称都以句点结尾,以便不将“.example.com”附加到它们。此记录通常指向本地主机及其 FQDN。
example.com. IN NS epc.example.com.
请注意,主机 epc.example.com 也必须在区域中具有 A 记录。A 记录可以指向主机的外部 IP 地址,也可以指向本地主机地址 127.0.0.1。
A
A 记录是地址记录类型,它指定主机名与分配给该主机的 IP 地址之间的关系。在下面的示例中,主机 test1 的 IP 地址为 192.168.25.21。请注意,$ORIGIN 的值附加到名称 test1,因为 test1 不是 FQDN,并且在此记录中没有终止句点。
test1 IN A 192.168.25.21
A 记录是最常见的 DNS 数据库记录类型。
CNAME
CNAME 记录是主机 A 记录中名称的别名。例如,主机名 server.example.com 可以同时用作 Web 服务器和邮件服务器。服务器将有一个 A 记录,并且可能有如下所示的两个 CNAME 记录。
server IN A 192.168.25.1
www IN CNAME server
mail IN CNAME server
对 www.example.com 和 mail.example.com 使用 dig 命令进行查找将返回 mail 或 www 的 CNAME 记录以及 server.example.com 的 A 记录。
PTR
PTR 记录用于提供反向查找。这是当您已经知道 IP 地址并且需要知道完全限定主机名时。例如,许多邮件服务器会对发送邮件服务器的所谓 IP 地址执行反向查找,以验证电子邮件标头中给出的名称和 IP 地址是否匹配。PTR 记录在反向区域文件中使用。尝试确定可疑网络数据包的来源时,也可以使用反向查找。
请注意,并非所有主机都有 PTR 记录,并且许多 ISP 创建和管理 PTR 记录,因此反向查找可能无法提供所需的信息。
MX
MX 记录定义邮件交换器(即域 example.com 的邮件服务器)。请注意,它指向上面示例中服务器的 CNAME 记录。请注意,MX 记录中的两个 example.com 名称都以点结尾,以便不将 example.com 附加到名称。
; Mail server MX record
example.com. IN MX 10 mail.example.com.
域可以定义多个邮件服务器。上面 MX 记录中的数字“10”是优先级值。其他服务器可能具有相同的优先级或不同的优先级。较小的数字定义较高的优先级。因此,如果所有邮件服务器都具有相同的优先级,则它们将以轮询方式使用。如果它们具有不同的优先级,则邮件传递将首先尝试传递到优先级最高的邮件服务器(数字最低),如果该邮件服务器没有响应,则将尝试传递到优先级次高的邮件服务器。
其他记录
您可能会在 DNS 数据库中遇到其他类型的记录。一种类型 TXT 记录用于记录有关 DNS 数据库中区域或主机的注释。TXT 记录也可以用于 DNS 安全。其余 DNS 记录类型不在本文的讨论范围之内。
最后想法
名称服务是使互联网易于访问的非常重要的组成部分。它将连接到互联网的无数个不同的主机绑定到一个有凝聚力的单元中,从而可以轻松地与地球的遥远角落进行通信。它具有复杂的分布式数据库结构,其整体规模可能甚至无法知晓,但任何连接的设备都可以快速搜索该结构,以定位数据库中具有条目的任何其他设备的 IP 地址。
如果您是几乎任何规模的网络的系统管理员,您可能会发现了解如何构建自己的名称服务器很有帮助。我将在我的下一篇文章 在 Linux 上构建您自己的 DNS 服务器 中介绍如何做到这一点。
5 条评论