DNS 服务器

DNS 服务介绍

DNS 服务介绍

DNS(Domain Name System,域名系统)服务是一种用于将域名转换为IP地址的分布式数据库 服务。它是互联网的核心服务之一,使得用户能够通过易于记忆的域名来访问网站和其他网络服 务,而无需记住复杂的IP地址。

DNS 也是一个存储网络主机和资源目录的分层命名系统。 目录中的信息将网络名称映射到不同资 源记录。

根域:DNS层次结构最顶层,使用独立的"."表示

顶级域(一级域):DNS层次结构第二层,例如.com,.net和.org等域。

二级域:DNS层次结构第三层,例如 laoma.cloud 和 redhat.fun 等域。由各个组织使 用。

学习DNS层次结构前,首先要搞清楚DNS层次结构中一些术语,例如domain,subdomain和 zone等。

Domain

domain 是 resource records 的集合,该集合以通⽤名结尾,表示 DNS 命名空间的整个⼦树, 如 laoma.cloud。

op-level domain(TLD- 顶级域)由 Internet Assigned Numbers Authority(IANA-互联网号 码分配机构)管理,并负责委派顶级域。

常见的TLD类型:

Generic TLDs(gTLD-通用顶级域名),最初是按主题组织的,包括.com,.edu和.net 等。

Country code TLDs(ccTLD-国家代码顶级域名),根据ISO 3166-1标准在国家范围上组织 的,并包括.us,.uk,.cn和.ru之类的域。

Subdomain

Subdomain 是另一个域的完整子树的域。 在讨论两个域之间的关系时使用此术语。 例如, lab.laoma.cloud是laoma.cloud的子域,而laoma.cloud是.com的子域。 我们也可以将 laoma.cloud称为第二级域,并将lab.laoma.cloud称为第三级域。

Zone

Zone 是特定名称服务器直接负责的域。 它可能是整个域,也可能只是域的一部分。Zone可以将 部分或全部子域都委派给另一个名称服务器或多个名称服务器。 例如,root名称服务器对root zone具有权威性,但它们将.com域的职责委派给其他名称服务 器,这些名称服务器为.com区域提供权威性应答。 这些服务器还可以继续将责任委派给其他名称 服务器。

DNS 查询

主机的 DNS 查询主要有两种方式:递归查询和迭代查询。

DNS 查询时,DNS 请求报头部 的 RD 字段 决定了查询类型:

RD 为 1 => 递归查询,默认查询方式。

RD 为 0 => 迭代查询。

递归查询:以本地名称服务器为中心,DNS 客户端只是发出原始的域名查询请求报文,然后就一 直处于等待状态,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于 中介代理 的作用。

迭代查询:以DNS客户端自己为中心。所有查询工作全部是 DNS 客户端自己进行。 DNS客户 会 按照顺序向本地名称服务器 、一级名称服务器、二级名称服务器、权威名称服务器发出查询 DNS 的 请求查询报文,这个过程中每一级服务器就会返回一个能解答这个查询的下一个名称服务器列 表 A,获取到下个查询列表信息 A 后 DNS 客户 会再向返回的列表 A 中发出请求,直到找到最终 负责所查域名的名称服务器,从它得到最终结果。

有些DNS服务器,为了减轻自己的负载,则会配置禁止使用递归查询,则客户端只能使用递归查 询。

两者主要区别:

递归查询 以 本地名称服务器 为中心进行查询 迭代查询 以 DNS客户端自己 为中心查询。

迭代查询

迭代查询,也叫迭代解析。使用迭代解析方式时,所有的查询工作都是由 DNS 客户自己进行的。 如果它所配置的主名称服务器(如 Windows 系统中的 首选 DNS 服务器)不能解析的话,客户 端还会继续向所配置的其它名称服务器(如 Windows 系统中的 备用 DNS 服务器)查询。

如果考虑了本地名称服务器的缓存技术(在 DNS 服务器上对一定数量查询过的记录保存一定时 间,这样后面查询同样的域名信息时就可直接从缓存中调出来,以加速查询效率)的话,迭代名 称解析的基本流程如下(在此仅以首先 DNS 服务器作为本地名称服务器为例,与其它备用 DNS 服务器的解析流程完全一样)

1.DNS 客户端向本机配置的本地名称服务器发出 DNS 域名查询请求

2.本地名称服务器收到请求后,先查询本地的缓存

3.如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端。

4.如果本地缓存中没有该域名的记录,则向 DNS 客户端返回一条 DNS 应答报文,报文中 会给出一些参考信息,如本地名称服务器上的根名称服务器地址等。

  1. DNS 客户端根据来自根名称服务器应答报文中的对应顶级名称服务器地址信息,向该顶级名 称服务器发出与前面一样的 DNS 查询请求报文

  2. 顶级名称服务器在收到 DNS 查询请求后,先查询本地的缓存:

    如果有所请求的 DNS 域名的记录项,则直接把对应的记录项返回给 DNS 客户端。

否则,通过查询后把对应域名中二级域名所对应的二级名称服务器地址信息以一条 DNS 应答报文返回给 DNS 客户端。

  1. DNS 客户端继续按照步骤 5 与步骤 6 的方法分别向三级、四级名称服务器查询,直到查到最 终的权威名称服务器返回到最终的记录。

如果在上述步骤中对应域名的权威名称服务器都说找不到对应的域名记录,则会向 DNS 客户端返 回一条查询失败的 DNS 应答报文,称为负响应。当然,如果这个权威名称服务器上配置了指向其 它名称服务器的转发器,则权威名称服务器还会在转发器指向的名称服务器上进一步重复上述步 骤查询。另外,如果 DNS 客户端上配置了多个 DNS 服务器,则还会继续向其它 DNS 服务器查 询的。

迭代查询-示例

假设客户端访问站点 www.example.com

那么 DNS 客服端的查询路径如下
  1. DNS 客户端向所配置的本地名称服务器发出解析 www.example.com 域名的 DNS 请求报 文。

  2. 本地名称服务器收到 客户端的 DNS 查询请求报文后,先查询本地缓存。假设没有查到该域 名对应记录,则本地名称服务器把所配置的根名称服务器 a.rootserver.net 地址信息以 DNS 应答报文返回给 DNS 客户端。

  3. DNS 客户端在收到本地名称服务器的 DNS 应答报文后,根据其中给出的根名称服务器地址 信息,向对应的根名称服务器再次发送解析 www.example.com 域名的 DNS 请求报文)

  4. 根名称服务器在收到 DNS 查询请求后,通过查询得到 .com 顶级域名所对应的顶级名称服 务器,然后把查询到的对应顶级域名信息以一条 DNS 应答报文返回给 DNS 客户端。

  5. DNS 客户端在收到根名称服务器的 DNS 应答报文,得到 .com 顶级域名所对应的顶级名称 服务器地址后,再次向对应的顶级名称服务器发送一条解析 www.example.com 域名的的 DNS 请求报文。

  6. .com 顶级名称服务器在收到 DNS 客户端的 DNS 查询请求报文后,先查询本地的缓存,假 设也没有该域名的记录项,则查询 example.com 所对应的二级名称服务器,然后把查询到 的对应二级域名信息以一条 DNS 应答报文返回给 DNS 客户端。

  7. DNS 客户端在收到 .com 顶级名称服务器的 DNS 应答报文,得到 example.com 二级域名 所对应的二级名称服务器地址后,再次向对应的二级名称服务器发送一条解析 www.example.com 域名的 DNS 请求报文。

  8. example.com 二级名称服务器在收到 DNS 客户端的 DNS 查询请求报文后,也先查询本地 的缓存。假设也没有该域名的记录项,则查询 www.example.com 所对应的权威名称服务器 (因为这个名称服务器已包括了整个域名 www.example.com 所在区域),然后把查询到的 对应权威域名信息以一条 DNS 应答报文返回给 DNS 客户端。

  9. DNS 客户端在收到 example.com 二级名称服务器的 DNS 应答报文,得到 www.example.com 三级域名所对应的权威名称服务器地址后,再次向对应的权威名称服务 器发送解析 www.example.com 域名的 DNS 请求报文。

  10. 权威名称服务器 www.example.com 在收到 DNS 客户端的 DNS 查询请求报文后,在它的 DNS 区域数据库中查找,最终得出了 www.example.com 域名所对应的 IP 地址 。然后向 DNS 客户端返回一条 DNS 应答报文。这样 DNS 客户端获取 IP 地址后就可以正常访问这个 网站了。

递归查询

递归查询是默认的 DNS 解析方式。在这种解析方式中,如果客户端配置的本地名称服务器遇到不 能解析的,则后面的查询全由本地名称服务器代替DNS 客户端进行查询,直到本地名称服务器从 权威名称服务器得到了正确的解析结果,然后由本地名称服务器告诉 DNS 客户端查询的结果

在递归查询过程中,一直是以本地名称服务器为中心的,DNS 客户端只是发出原始的域名查询请 求报文,然后就一直处于等待状态,直到本地名称服务器返回最终的查询结果。此时的本地名称 服务器就相当于中介代理的作用。

如果考虑了本地名称服务器的缓存技术(在 DNS 服务器上对一定数量查询过的记录保存一定时 间,这样后面查询同样的域名信息时就可直接从缓存中调出来,以加速查询效率),则递归解析 的基本流程如下(在此仅以首先 DNS 服务器作为本地名称服务器为例,与其它备用 DNS 服务器 的解析流程完全一样)

  1. 客户端向本机配置的本地名称服务器发出 DNS 域名查询请求。

  2. 本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务 器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务 器再以 DNS 客户端的角色发送与前面一样的 DNS 域名查询请求发给根名称服务器。

  3. 根名称服务器收到 DNS 请求后,把所查询得到的所请求的 DNS 域名中顶级域名所对应的顶 级名称服务器地址返回给本地名称服务器。

  4. 本地名称服务器根据根名称服务器所返回的顶级名称服务器地址,向对应的顶级名称服务器 发送与前面一样的 DNS 域名查询请求。

  5. 顶级名称服务器在收到 DNS 查询请求后,也是先查询本地的缓存,如果有所请求的 DNS 域 名的记录项,则直接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回 给 DNS 客户端,否则向本地名称服务器返回所请求的 DNS 域名中的二级域名所对应的二级 名称服务器地址。

  6. 本地名称服务器根据根名称服务器所返回的二级名称服务器地址,向对应的二级名称服务器 发送与前面一样的 DNS 域名查询请求。

  7. 二级名称服务器在收到 DNS 查询请求后,也是先查询本地的缓存,如果有所请求的 DNS 域 名的记录项,则直接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回 给 DNS 客户端,否则向本地名称服务器返回所请求的 DNS 域名中的三级域名所对应的三级 名称服务器地址。

  8. 就这样本地名称服务器重复步骤 6 和步骤 7 的方法一次次地向三级、四级名称服务器等查 询,直到最终的对应域名所在区域的权威名称服务器返回到最终的记录给本地名称服务器。

  9. 然后再由本地名称服务器返回给 DNS 客户,同时本地名称服务器会缓存本次查询得到的记 录项。

如果在上述步骤中对应域名的权威名称服务器都说找不到对应的域名记录,则会向 DNS 客户端返 回一条查询失败的 DNS 应答报文。当然,如果这个权威名称服务器上配置了指向其它名称服务器 的转发器,则权威名称服务器还会在转发器指向的名称服务器上进一步重复上述步骤查询。另 外,如果 DNS 客户端上配置了多个 DNS 服务器,则还会继续向其它 DNS 服务器查询的。

简单的讲,递归查询步骤;

  1. 客户端 向本机配置的本地名称服务器发出 DNS 域名查询请求,发出请求后 客户端 一直处于 等待状态,等待本地名称服务器返回查询结果。

  2. 本地名称服务器收到 DNS 请求后,先查询本地的缓存,查到存在该域名记录项立即返回结 果,否则本地名称服务器不断向 DNS 名称服务器发送 DNS 请求查询,直到查到改域名对应 的权威名称服务器并获得记录结果。

  3. 本地名称服务器 解析到结果后将结果返回给 客户端 。

递归查询-示例
  1. DNS 客户端 向所配置的本地名称服务器 dns.example.com 发出解析 www.example.com 域名的 DNS 请求报文

  2. 本地名称服务器收到请求后,先查询本地缓存。假设没有查到该域名对应记录,则本地名称 服务器向所配置的根名称服务器 a.rootserver.net 发出解析请求解析 www.example.com 域名的 DNS 请求报文(相当于对本地名称服务器说:“请给我 www.example.com 所对应的 IP 地址”)。

  3. 根名称服务器收到 客户端的 DNS 查询请求报文后,通过查询得到 .com 顶级域名所对应的 顶级名称服务器,然后向本地名称服务器返回一条应答报文(相当说“我不知道 www.example.com 域名所对应的 IP 地址,但我现在告诉你 .com 域名所对应的顶级名称服 务器地址”)。

  4. 本地名称服务器在收到根名称服务器的 DNS 应答报文,得到 .com 顶级域名所对应的顶级 名称服务器地址后,再次向对应的顶级名称服务器发送一条请求解析 www.example.com 域 名的 DNS 请求报文

  5. .com 顶级名称服务器在收到 DNS 请求报文后,先查询本地的缓存,假设也没有该域名的记 录项,则查询 example.com 所对应的二级名称服务器,然后也向本地名称服务返回一条 DNS 应答报文(相当于对本地名称服务器说:“我不知道 www.example.com 域名所对应的 IP 地址,但我现在告诉你 example.com 域名所对应的二级名称服务器地址”。

  6. 本地名称服务器在收到 .com 顶级名称服务器的 DNS 应答报文,得到 example.com 二级域 名所对应的二级名称服务器地址后,再次向对应的二级名称服务器发送一条请求解析 www.example.com 域名的 DNS 请求报文。

  7. example.com 二级名称服务器在收到 DNS 请求报文后,也先查询本地的缓存,假设也没有 该域名的记录项,则查询 www.example.com 所对应的权威名称服务器,然后也向本地名称 服务器返回一条 DNS 应答报文(相当于本地名称服务器说:“我不知道 www.example.com 域 名所对应的 IP 地址,但我现在告诉你 www.example.com 域名所对应的权威名称服务器地 址”)。

  8. 本地名称服务器在收到 example.com 二级名称服务器的 DNS 应答报文,得到 www.example.com 三级域名所对应的权威名称服务器地址后,再次向对应的权威名称服务 器发送一条请求解析 www.example.com 域名的 DNS 请求报文。

  9. www.example.com 权威名称服务器在收到 DNS 请求后,在它的 DNS 区域数据库中查找, 最终得出了 www.example.com 域名所对应的 IP 地址。然后向本地名称服务器返回到条 DNS 应答报文(相当于对本地名称服务器说:“ www.example.com 域名的 IP 地址为 xxx.xxx.xxx.xxx”)。

  10. 本地名称服务器在收到权威名称服务器的应答报文后,向 DNS 客户端返回一条 DNS 应答报 文 ,告诉 DNS 客户端所得到的 www.example.com 域名的 IP 地址 。这样 DNS 客户端就可 以正常访问这个网站了。

DNS 资源记录

A 资源记录

A 资源记录将主机名映射到IPv4地址。

server.laoma.cloud. 86400 IN A 172.25.254.254

AAAA 资源记录

AAAA资源记录(4A记录)将主机名映射到IPv6地址

a.root-servers.net. 604800 IN AAAA 2001:503:ba3e::2:30

CNAME 资源记录

CNAME资源记录将一个名称别名为另一个名称(规范名称),该名称应具有A或AAAA记录。 当DNS解析程序收到对查询的CNAME记录时,它将使用规范名称而不是原始名称重新发出查询。 CNAME记录的数据字段可以指向DNS中任何区域的名称,无论该区域是内部的还是外部的:

www-dev.laoma.cloud. 30 IN CNAME lab.laoma.cloud.
server.laoma.cloud. 30 IN CNAME www.redhat.com.

CNAME记录可能指向具有CNAME的名称,但CNAME记录链最终必须解析为A或AAAA记录 的名称。

通常,避免将CNAME记录指向其他CNAME记录。 CNAME会使查找效率降低,更脆弱,并 且我们可能会意外地创建一个指向彼此的CNAME记录循环。

CNAME记录链有合法用途。 例如,它们与Content Delivery Network(CDN)结合使用。 NS和MX记录不得指向带有CNAME记录的名称,而是使用带有A和/或AAAA资源记录的名 称。

PTR 资源记录

PTR或pointer资源记录将IPv4或IPv6地址映射到主机名。 它们用于反向DNS解析。 PTR记录以一种类似于主机名的特殊格式对IP地址进行编码。

对于IPv4地址,该地址被颠倒,以最具体的部分开始,然后视为in-addr.arpa域的子域中的 主机。

对于IPv6地址,该地址在半字节边界(每个十六进制数字)上划分为子域,并设置为 ip6.arpa域的子域。

4.0.41.198.in-addr.arpa. 785 IN PTR a.root-servers.net.
0.3.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.3.a.b.3.0.5.0.1.0.0.2.ip6.arpa
. 86400 IN PTR a.root-servers.net.

该语法可能看起来很奇怪,但是它简化了将地址范围的责任委托给其他DNS管理员的情况。

NS 资源记

NS或名称服务器资源记录将域名映射到对其DNS区域具有权威性的DNS名称服务器。 该区域的每 个公共权威名称服务器都必须具有NS记录。

laoma.cloud. 86400 IN NS dns.laoma.cloud.
168.192.ip-addr.arpa. 86400 IN NS dns.laoma.cloud.
9.0.e.1.4.8.4.6.2.e.d.f.ip6.arpa. 86400 IN NS dns.laoma.cloud.

其中两个NS记录用于10.1.8.0/16网络和fde2:6484:1e09::/48网络的反向查找。

classroom.laoma.cloud上的区域可能包含NS记录,以将对192.168.254.0/24和 fde2:6484:1e09::1:: /64的反向查找委托给另一个名称服务器。

SOA 资源记录

SOA资源记录,也叫做起始授权机构记录,提供有关DNS区域如何运行的信息。 每个区域必须有 一个SOA记录。

指定了一个序列号

指定其他权威性名称服务器用来确定何时从主要名称服务器传输区域资源记录的各种超时时 间。

laoma.cloud. 86400 IN SOA dns.laoma.cloud. root.laoma.cloud. 2015071700 
3600 300 604800 60

MX 资源记录

MX资源记录将域名映射到接受该域的电子邮件的邮件交换(mail exchange)。邮件服务器故障 时,提供负载平衡和冗余的邮件服务器帮助路由电子邮件。

该记录类型的数据是用于确定在多个MX记录之间选择的优先级(首选最低),以及用于该名称的 邮件交换的主机名。

laoma.cloud. 86400 IN MX 10 dns.laoma.cloud.
laoma.cloud. 86400 IN MX 10 mail.laoma.cloud.
laoma.cloud. 86400 IN MX 100 mailbackup.laoma.cloud.

TXT 资源记录

TXT 资源记录将名称映射到编码为可打印ASCII字符的任意文本。 它们通常用于提供用于各种电子 邮件身份验证方案(例如SPF,DKIM和DMARC)的数据,以验证域所有权(例如,用于Google 和Facebook),以及用于其他目的。

lwn.net. 27272 IN TXT "google-site-verification: sVlxS_z1es5DfNSUNXrqr3n9Y4F7tOr7HNVMKUGs"
lwn.net.
27272 IN TXT "v=spf1 a:mail.lwn.net a:prod.lwn.net 
a:git.lwn.neta:ms.lwn.net -all"

SRV 资源记录

SRV 资源记录可帮助客户端找到域中支持特定服务的主机。

示例:表明存在一个可以使用TCP传输协议( _tcp )与LDAP连接的LDAP服务器( _ldap ),该 主机属于域laoma.cloud。 LDAP服务器是server.laoma.cloud,正在侦听端口389,优先级为 0,权重为100(如果客户端接收到多个SRV记录,则控制选择哪个服务器)。

_ldap._tcp.laoma.cloud. 86400 IN SRV 0 100 389 server0.laoma.cloud.

主机和资源记录

⼀个主机,无论是客户端还是服务器,都具有以下 DNS 资源记录:

⼀个或多个A或AAAA记录

用于将其IP地址反向映射到名称的PTR记录

⼀个或多个CNAME记录(可选)

DNS zone 还具有以下资源记录:

唯一的 SOA 记录

每个权威名称服务器的 NS 记录

⼀个或多个MX记录(可选)

用于在域中查找服务的⼀个或多个SRV记录(可选)

配置权威名称服务器

权威名称服务器架构

权威名称服务器存储 DNS 资源记录,并为其管理的区域提供权威答案。

Linux中的Berkeley Internet Name Domain(BIND)软件可以实现权威的名称服务器。 BIND允 许我们将权威服务器配置为区域的主要服务器或辅助服务器。区域中只有一台主服务器,但可具 有多台辅助服务器。 辅助服务器通过请求区域传输,定期从主服务器下载区域信息的最新版本。 它们执行区域传输的频率以及如何知道其数据是否过时由区域的SOA资源记录控制。

册新的DNS域时,必须提供该域的所有公共权威名称服务器的名称和IP地址。我们的注册服务 商将该信息放在父域的区域文件中(如NS,A和AAAA记录),以便DNS解析器可以找到我们的名 称服务器。为了帮助确保可靠性,我们应该至少有两个公共DNS服务器,并且它们应位于不同的 站点,以避免由于网络故障而造成的中断。

并非所有权威服务器都必须是公共的。例如,使用primary服务器来管理区域文件,并将区域信 息发布到权威的secondary服务器。primary服务器是私有的,而secondary服务器是面向公众 的,从而为外部客户端提供权威性的答案,保护我们的primary服务器免受攻击。

架构示例1:外部客户端查找laoma.cloud

查找过程:客户的仅缓存名称服务器首先查询其中一个根名称服务器。 它定向到负责.com域的名 称服务器池。 这些服务器之一使用laoma.cloud域的NS记录进行响应,因此仅缓存名称服务器会 查询其中一个面向公众的辅助名称服务器。

架构示例2:内部客户端查找laoma.cloud

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐