引言

Dns,或域名系统,往往是一个非常困难的一部分,学习如何配置网站和服务器。 了解 DNS 如何工作将帮助您诊断与配置访问您的网站的问题,并将允许您扩大您的了解背后的情况。

在本指南中,我们将讨论一些基本的 DNS 概念,这些概念将帮助您在 DNS 配置中立即运行。 处理完这个指南后,你应该准备好用 DigitalOcean 设置你的域名或者设置你自己的 DNS 服务器。

在我们开始设置您自己的服务器来解析您的域名或者在控制面板中设置我们的域名之前,让我们先回顾一下所有这些实际上是如何工作的一些基本概念。

领域术语

我们应该从定义我们的术语开始。 虽然其中一些主题在其他上下文中是熟悉的,但在谈论域名和 DNS 时使用了许多术语,这些术语在其他计算领域并不常用。

让我们从简单的开始:

域名系统

域名系统,也就是通常所说的“ DNS” ,是一个网络系统,它使我们能够将友好的域名解析为独特的地址。

域名

域名是我们习惯于与互联网资源关联的人性化名称。 例如,“ google. com”是一个域名。 有些人会说“ google”部分是域名,但是我们通常可以将组合形式称为域名。

网址“ Google. com”与 Google 公司的服务器相关联。 当我们在浏览器中键入“ Google. com”时,域名系统允许我们到达 Google 服务器。

Ip 地址

Ip 地址就是我们所说的网络可寻址位置。 每个 IP 地址在其网络中必须是唯一的。 当我们谈论网站的时候,这个网络就是整个互联网。

作为最常见的地址形式,IPv4被写成四组数字,每组最多有三个数字,每组之间用一个点隔开。 例如,“111.222.111.222”可能是一个有效的 IPv4 IP 地址。 使用 DNS,我们将名称映射到该地址,这样您就不必记住您希望在网络上访问的每个地方的一组复杂的数字。

顶级域

或者 TLD,是这个领域最普遍的顶级域。 顶级域是右边最远的部分(由一个点分隔)。 常见的顶级域名有“ com”、“ net”、“ org”、“ gov”、“ edu”和“ io”。

就域名而言,顶级域名位于层次结构的顶端。 Icann (互联网名称与数字地址分配机构)授予某些方面对顶级域名的管理控制权。 然后,这些参与方可以在 TLD 下分发域名,通常是通过一个域名注册商。

主持人

在域中,域所有者可以定义单个主机,这些主机指的是可以通过域访问的单独计算机或服务。 例如,大多数域名所有者可以通过裸域(example.com)和“主机”定义“ www”(www.example.com)访问他们的 web 服务器。

您可以在一般域下有其他主机定义。 您可以通过“ API”主机(API.example. com)访问 API,也可以通过定义名为“ ftp”或“ files”的主机(ftp.example.com 或 files.example.com )访问 ftp。 主机名可以是任意的,只要它们对于域是唯一的。

子域

与主机相关的主题是子域。

Dns 在层次结构中工作。 顶级域名下可以有许多域名。 例如,“ com” TLD 下面有“ google. com”和“ ubuntu. com”。 “子域”是指属于较大域的任何域。 在这种情况下,“ ubuntu. com”可以说是“ com”的子域名。 这通常称为域,或者“ ubuntu”部分称为 SLD,意思是二级域。

同样,每个域可以控制位于其下的“子域”。 这通常就是我们所说的子域。 例如,你可以为你们学校的历史系在“ www.history.school.edu”设置一个子域名。 “历史”部分是一个子域。

主机名和子域之间的区别是,主机定义计算机或资源,而子域扩展父域。 这是一种细分域本身的方法。

无论是谈论子域还是主机,您都可以开始看到域的最左侧部分是最具体的。 这就是 DNS 的工作原理: 从最具体到最不具体,正如您从左到右阅读。

完全限定域名

一个完全限定的域名,通常称为 FQDN,就是我们所说的绝对域名。 Dns 系统中的域可以相对于其他域给出,因此,可能有些模糊。 Fqdn 是一个绝对名称,它指定了它相对于域名系统的绝对根的位置。

这意味着它指定了包括 TLD 在内的每个父域。 正确的 FQDN 以点结尾,表示 DNS 层次结构的根。 Fqdn 的一个示例是“ mail.google. com” . 有时,调用 FQDN 的软件不需要结束点,但需要尾随点以符合 ICANN 标准。

名称服务器

名称服务器是指定用来将域名转换为 IP 地址的计算机。 这些服务器在 DNS 系统中完成大部分工作。 由于域转换的总数对于任何一台服务器来说都太多了,因此每台服务器都可能将请求重定向到其他名称服务器,或者将其负责的子域子集的责任委派给其他服务器。

名称服务器可以是“权威的” ,这意味着它们可以回答关于它们控制的域的查询。 否则,他们可能会指向其他服务器,或者提供其他名称服务器数据的缓存副本。

区域档案

区域文件是一个简单的文本文件,它包含域名和 IP 地址之间的映射。 这就是当用户请求某个域名时,DNS 系统如何最终找到应该联系的 IP 地址。

区域文件驻留在名称服务器中,通常定义特定域下的可用资源,或者定义获取该信息的位置。

纪录

在区域文件中,保存记录。 在最简单的形式中,记录基本上是资源和名称之间的一个映射。 它们可以将域名映射到 IP 地址,定义域的名称服务器,定义域的邮件服务器,等等。

Dns 是如何工作的

现在您已经熟悉了 DNS 涉及的一些术语,那么系统实际上是如何工作的呢?

从高层次的概述来看,这个系统非常简单,但是当您查看细节时就会发现它非常复杂。 总的来说,它是一个非常可靠的基础设施,对于我们今天所知道的互联网的采用是必不可少的。

根服务器

正如我们上面所说的,DNS 在其核心是一个等级系统。 在这个系统的顶部是所谓的“根服务器”。 这些服务器由各种组织控制,并由 ICANN (互联网名称与数字地址分配机构)授权。

目前有13个根服务器在运行。 但是,由于每分钟都有大量的名称需要解析,因此每个服务器实际上都有镜像。 这种设置的有趣之处在于,单个根服务器的每个镜像都共享相同的 IP 地址。 当对某个根服务器发出请求时,请求将被路由到该根服务器的最近的镜像。

这些根服务器做什么? 根服务器处理有关顶级域的信息请求。 因此,如果有一个请求是针对一个较低级别的名称服务器无法解析的内容,则会对该域的根服务器进行查询。

根服务器实际上并不知道域托管在哪里。 然而,他们将能够将请求者引导到处理特定请求的顶级域服务器的名称服务器。

因此,如果向根服务器发出“ www.wikipedia.org”请求,根服务器将不会在其记录中找到结果。 它将检查自己的区域文件中是否有与“ www.wikipedia.org”匹配的列表。 它不会找到的。

相反,它将找到“ org” TLD 的记录,并向请求实体提供负责“ org”地址的名称服务器的地址。

热释光二极管伺服器

然后请求者向负责请求顶级域的 IP 地址发送一个新请求(由根服务器提供)。

因此,继续我们的示例,它将向负责了解“ org”域的名称服务器发送一个请求,以查看它是否知道“ www.wikipedia.org”位于何处。

再一次,请求者将在其 zone 文件中查找“ www.wikipdia.org”。 它不会在文件中找到这个记录。

然而,它会找到一个记录列出了负责“ wikipedia. org”的名称服务器的 IP 地址。 这已经越来越接近我们想要的答案了。

域名服务器

此时,请求者拥有名称服务器的 IP 地址,该服务器负责知道资源的实际 IP 地址。 它向名称服务器发送一个新的请求,再次询问是否可以解析“ www.wikipedia.org”。

名称服务器检查其区域文件,发现它有一个与“ wikipedia. org”关联的区域文件。 在这个文件中,有一个“ www”主机的记录。 这个记录告诉主机的 IP 地址。 名称服务器将最终答案返回给请求者。

什么是解析名称服务器?

在上面的场景中,我们提到了“请求者”。在这种情况下请求者是什么?

几乎在所有情况下,请求者都是我们所说的“解析名称服务器”。解析名称服务器是配置来询问其他服务器问题的服务器。 它基本上是用户的一个中间层,用户缓存以前的查询结果以提高速度,并知道根服务器的地址,以便能够“解决”为它不知道的事情提出的请求。

基本上,一个用户通常会在他们的计算机系统上配置一些解析名称服务器。 解析名称服务器通常由 ISP 或其他组织提供。 例如,谷歌提供了解析 DNS 服务器,您可以查询。 这些可以在您的计算机中自动配置或手动配置。

当您在浏览器的地址栏中键入 URL 时,您的计算机首先查看是否能在本地找到资源所在的位置。 它检查计算机上的“主机”文件和其他一些位置。 然后它将请求发送到解析名称服务器,并等待接收资源的 IP 地址。

解析名称服务器然后检查其缓存以获得答案。 如果它没有找到它,它会按照上面列出的步骤进行操作。

解析名称服务器基本上压缩最终用户的请求过程。 客户机只需要知道询问解析名称服务器资源的位置,并确信他们将进行调查并返回最终答案。

区域文件

在上述过程中,我们提到了“区域文件”和“记录”的概念。

区域文件是名称服务器存储它们所知道的域信息的方式。 名称服务器知道的每个域都存储在区域文件中。 大多数到达普通名称服务器的请求并不是服务器拥有专区文件的目的。

如果将其配置为处理递归查询(如解析名称服务器) ,它将找到答案并返回该答案。 否则,它会告诉请求方下一步该查看哪里。

名称服务器拥有的区域文件越多,它能够权威性地回答的请求就越多。

区域文件描述 DNS“区域” ,它基本上是整个 DNS 命名系统的子集。 它通常只用于配置单个域。 它可以包含许多记录,这些记录定义了相关域的资源位置。

区域的 $ORIGIN 是默认情况下等于区域的最高权限级别的参数。

因此,如果使用区域文件来配置“ example.com” 的域名,$ORIGIN 将被设置为 example. com。 .

这可以在区域文件的顶部配置,也可以在引用区域文件的 DNS 服务器配置文件中定义。 不管怎样,这个参数描述了这个区域的权威性。

类似地,$TTL 配置它提供的信息的“生存时间”。 它基本上是一个计时器。 缓存名称服务器可以使用先前查询的结果来回答问题,直到 TTL 值用完。

记录类型

在区域文件中,我们可以有许多不同的记录类型。 我们将在这里讨论一些更常见的(或强制性类型)。

Soa 记录

权限的开始(Start of Authority,简称 SOA)记录是所有区域文件中的必备记录。 它必须是文件中的第一个真实记录(尽管上面可能会出现 $ORIGIN 或 $TTL 规范)。 这也是最复杂的理解之一。

权威记录的开始是这样的:

domain.com.  IN SOA ns1.domain.com. admin.domain.com. (
                                            12083   ; serial number
                                            3h      ; refresh interval
                                            30m     ; retry interval
                                            3w      ; expiry period
                                            1h      ; negative TTL
)

让我们来解释一下每个部分的作用:

  • 域名. com。 这是这个区域的根源。 这指定该区域文件是针对域. com 的。 领域。 通常,您会看到将其替换为@,它只是一个占位符,用于替换我们上面学到的 $ORIGIN 变量的内容。
  • In SOA: “ IN”部分意味着 internet (并且将出现在许多记录中)。 Soa 是一个指示器,表明这是一个权限的开始记录。
  • 1.domain. com. : 这定义了此域的主名称服务器。 名称服务器可以是主服务器,也可以是辅助服务器,如果配置了动态 DNS,那么一个服务器需要是“主服务器” ,它在这里。 如果您没有配置动态 DNS,那么这只是您的主名称服务器之一。
  • Admin.domain.com. : 这是此区域的管理员的电子邮件地址。 “@”被电子邮件地址中的一个点代替。 如果电子邮件地址的名称部分通常有一个点在其中,这是替换为“”在这一部分([email protected] com 成为您的 name.domain. com)。
  • 12083: 这是区域文件的序列号。 每次编辑区域文件时,必须递增此数字,区域文件才能正确传播。 辅助服务器将检查一个区域的主服务器的序列号是否大于它们在系统上的序列号。 如果是,则请求新的区域文件,如果不是,则继续服务于原始文件。
  • 3h: 这是该区域的刷新间隔。 这是辅助服务器在轮询主服务器更改区域文件之前等待的时间量。
  • 30米: 这是这个区域的重试间隔。 如果在刷新周期结束时,辅助服务器无法连接到主服务器,那么它将等待这段时间并重试轮询主服务器。
  • 这是有效期。 如果辅助名称服务器在这段时间内无法与主服务器联系,那么它将不再作为该区域的权威源返回响应。
  • 1h: 如果名称服务器无法在该文件中找到请求的名称,则该名称服务器将缓存名称错误的时间。

A 和 AAAA 记录

这两条记录都将主机映射到 IP 地址。 “ a”记录用于将主机映射到 IPv4 IP 地址,而“ AAAA”记录用于将主机映射到 IPv6地址。

这些记录的一般格式如下:

host     IN      A       IPv4_address
host     IN      AAAA    IPv6_address

因此,既然我们的 SOA 记录在“ ns1.domain. com”上调用了一个主服务器,那么我们就必须将其映射到一个 IP 地址,因为“ ns1.domain. com”位于该文件定义的“ domain. com”区域内。

这张唱片可能是这样的:

ns1     IN  A       111.222.111.222

注意,我们不需要提供全名。 我们只需要提供主机,而不需要 FQDN,DNS 服务器将用 $ORIGIN 值填充其余部分。 然而,如果我们喜欢语义化,我们也可以轻松地使用整个 FQDN:

ns1.domain.com.     IN  A       111.222.111.222

在大多数情况下,你会把你的 web 服务器定义为“ www” :

www     IN  A       222.222.222.222

我们还应该告诉基域解析到哪里。我们可以这样做:

domain.com.     IN  A       222.222.222.222

我们可以用“@”来代替基域:

@       IN  A       222.222.222.222

我们还可以选择解析此域下未显式定义到此服务器的任何内容。 我们可以用“ * ”外卡来做到这一点:

*       IN  A       222.222.222.222

所有这些工作与 AAAA 的 IPv6地址记录一样好。

Cname 唱片

Cname 记录为服务器的规范名定义了一个别名(由 a 或 AAAA 记录定义的别名)。

例如,我们可以有一个 a name 记录来定义“ server1”主机,然后使用“ www”作为这个主机的别名:

server1     IN  A       111.111.111.111
www         IN  CNAME   server1

请注意,这些别名会带来一些性能损失,因为它们需要对服务器进行额外的查询。 大多数情况下,同样的结果可以通过使用额外的 a 或 AAAA 记录来实现。

建议使用 CNAME 的一种情况是为当前区域之外的资源提供别名。

Mx 唱片公司

Mx 记录用于定义用于域的邮件交换。 这有助于邮件信息正确地到达你的邮件服务器。

与许多其他记录类型不同,邮件记录通常不会将主机映射到某个东西,因为它们应用于整个区域。 因此,它们通常是这样的:

        IN  MX  10   mail.domain.com.

注意,开头没有主机名。

还要注意,这里还有一个额外的数字。 如果定义了多个邮件服务器,这个首选项号可以帮助计算机决定将邮件发送到哪个服务器。 较低的数字有较高的优先级。

Mx 记录通常应指向由 a 或 AAAA 记录定义的主机,而不是由 CNAME 定义的主机。

假设我们有两个邮件服务器。 必须有这样的记录:

        IN  MX  10  mail1.domain.com.
        IN  MX  50  mail2.domain.com.
mail1   IN  A       111.111.111.111
mail2   IN  A       222.222.222.222

在本例中,“ mail1”主机是首选的电子邮件交换服务器。

我们也可以这样写:

        IN  MX  10  mail1
        IN  MX  50  mail2
mail1   IN  A       111.111.111.111
mail2   IN  A       222.222.222.222

Ns 唱片公司

此记录类型定义用于此区域的名称服务器。

您可能想知道,“如果区域文件驻留在名称服务器上,为什么它需要引用自己? ” . Dns 如此成功的部分原因是它的多级缓存。 在区域文件中定义名称服务器的一个原因是,区域文件可能实际上是由另一个名称服务器上的缓存副本提供的。 需要在名称服务器本身上定义名称服务器还有其他原因,但我们在这里不讨论这个问题。

与 MX 记录一样,这些是区域范围的参数,因此它们也不接受主机。 一般来说,它们是这样的:

        IN  NS     ns1.domain.com.
        IN  NS     ns2.domain.com.

您应该在每个区域文件中定义至少两个名称服务器,以便在一个服务器出现问题时正确操作。 大多数 DNS 服务器软件认为,如果只有一个名称服务器,区域文件无效。

像往常一样,使用 a 或 AAAA 记录包括主机的映射:

        IN  NS     ns1.domain.com.
        IN  NS     ns2.domain.com.
ns1     IN  A      111.222.111.111
ns2     IN  A      123.211.111.233

您可以使用许多其他记录类型,但这些可能是您将遇到的最常见的类型。

Ptr 唱片

Ptr 记录用于定义与 IP 地址关联的名称。 Ptr 记录是 a 或 AAAA 记录的倒数。 Ptr 记录是独一无二的,因为它们始于。 Arpa 根和被授权的 IP 地址的所有者。 区域互联网注册中心(RIRs)负责将 IP 地址委托给组织和服务提供商。 区域互联网注册中心包括 APNIC、 ARIN、 RIPE NCC、 LACNIC 和 AFRINIC。

下面是111.222.333.444的 PTR 记录的一个例子:

444.333.222.111.in-addr.arpa.   33692   IN  PTR host.example.com.

这个 IPv6地址的 PTR 记录的例子显示了与谷歌的 IPv6 DNS Server 2001:4860:4860: : 8888相反的吞噬格式。

8.8.8.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.8.4.0.6.8.4.1.0.0.2.ip6.arpa. 86400IN PTR google-public-dns-a.google.com.

带有-x 标志的命令行工具 dig 可用于查找 IP 地址的反向 DNS 名称。

下面是 dig 命令的一个示例。 会附加 + short 以减少反向 DNS 名称的输出。

  • dig -x 8.8.4.4 +short

上面 dig 命令的输出是 IP 地址 PTR 记录中的域名:

google-public-dns-b.google.com.

互联网上的服务器使用 PTR 记录在日志条目中放置域名,做出知情的垃圾邮件处理决策,并显示关于其他设备的易于阅读的详细信息。

大多数常用的电子邮件服务器会查找它接收电子邮件的 IP 地址的 PTR 记录。 如果源 IP 地址没有与之相关的 PTR 记录,那么正在发送的电子邮件可能被视为垃圾邮件并被拒绝。 Ptr 中的 FQDN 是否匹配正在发送的电子邮件的域名并不重要。 重要的是有一个有效的 PTR 记录和一个对应的匹配的前向 a 记录。

通常,互联网上的网络路由器会得到与其物理位置相对应的 PTR 记录。 例如,你可能会在纽约或芝加哥的路由器上看到“ NYC”或“ CHI”的引用。 这对于运行 traceroute 或 MTR 以及查看互联网交通的路径非常有用。

大多数提供专用服务器或 VPS 服务的供应商将为客户提供为其 IP 地址设置 PTR 记录的能力。 当液滴以域名命名时,DigitalOcean 会自动分配任何液滴的 PTR 记录。 液滴名称是在创建过程中指定的,稍后可以使用液滴控制面板的设置页面进行编辑。

注意: PTR 记录中的 FQDN 必须具有对应的和匹配的前向 a 记录。 例如: 111.222.333.444有一个 server.Example.com 的 PTR,而 server.Example.com 是一个指向111.222.333.444的 a 记录。

Caa Records

Caa 记录用于指定允许哪个证书颁发机构(ca)为您的域颁发 ssl / tls 证书。 截至二○一七年九月八日,所有核证机关在发出证书前均须检查这些纪录。 如果没有记录,任何 CA 都可以颁发证书。 否则,只有指定的 ca 可以发出证书。 Caa 记录可以应用于单个主机或整个域。

以下是 CAA 记录的一个例子:

example.com.    IN  CAA 0 issue "letsencrypt.org"

主机、 IN 和记录类型(CAA)是常见的 DNS 字段。 上面的 caa 特定信息是0问题“ letsencrypt.org”部分。 它由三部分组成: 标记(0)、标记(issue)和值(“ letsencrypt.org”)。

  • 标志是一个整数,表示 CA 应该如何处理它不理解的标记。 如果标志为0,则记录将被忽略。 如果1,通讯局必须拒绝签发证书。
  • 标记是表示 CAA 记录目的的字符串。 目前,它们可以授权 CA 为特定的主机名创建证书,通过 issuewild 授权通配符证书,或者由 iodef 定义一个 URL,在这个 URL 中 CAs 可以报告策略违反。
  • 值是与记录的标记关联的字符串。 对于 issue 和 issuewild,这通常是您授予许可的 CA 的域。 对于 iodef,这可能是联系人表单的 URL,或者是邮件反馈的 mailto: 链接。

您可以使用 dig 通过以下选项获取 CAA 记录:

  • dig example.com type257

更多有关 CAA 记录的详细信息,你可以阅读 RFC 6844,或者我们的教程如何使用 DigitalOcean DNS 创建和管理 CAA 记录

总结

您现在应该已经很好地掌握了 DNS 是如何工作的。 虽然一旦熟悉了这个策略,大致的想法就比较容易掌握,但是对于缺乏经验的管理员来说,这仍然是很难付诸实践的。

查看如何在 DigitalOcean 控制面板中设置域名。