DNS 的工作原理是什么,以及如何排查部分或间歇性 DNS 失败的问题?

上次更新时间:2022-04-11

DNS 的工作原理是什么,以及如何排查部分或间歇性 DNS 失败的问题?

解决方法

DNS 概述

DNS 通过将易于记忆的名称(例如 www.example.com)转换为数字 IP 地址(例如 192.0.2.1)来将用户路由到 Internet 应用程序。此过程称为“DNS 解析”。 授权名称服务器将域名解析为一个 IP 地址或多个 IP 地址,并通过 DNS 解析程序链将 IP 地址传递到客户端(例如,某个请求查看网站的人的计算机)。然后,客户端使用该 IP 地址连接到托管网站的服务器。当 DNS 无法正常运行时,DNS 服务器将无法解析域名。因此,DNS 服务器无法为客户端提供托管网站的服务器的 IP 地址。这意味着无法从 Internet 访问这些网站。

有关更多信息,请参阅什么是 DNS?

部分、临时或间歇性 DNS 故障情况

在某些情况下,客户端会短时间或间歇性地遭受 DNS 故障的影响。以下是可能导致部分 DNS 失败的常见场景:

场景 1:注册商的名称服务器配置错误

有时,注册商会错误配置一个或多个名称服务器。“whois”查找提供了在域的注册商上配置的名称服务器。在这种情况下,在 DNS 解析期间,如果注册的名称服务器没有响应或响应意外信息,则本地解析程序会返回 SERVFAIL 消息。但是,在某些情况下,本地解析器可以使用其他名称服务器尝试请求并返回结果。

此外,本地解析器可以在 TTL 时间内缓存错误的名称服务器,并且可以将下一个查询发送到配置错误的名称服务器。

场景 2:在托管区域更改了名称服务器

DNS 部分失败的另一个原因是域的 NS 记录在托管区域中配置错误。在这种情况下,要么更新了现有的名称服务器,要么将一些附加名称服务器添加到 NS 记录的值中。

在这种情况下,如果解析程序尝试使用错误的名称服务器解析域,某些客户端可能会遇到部分 DNS 故障。

场景 3:客户端的 DNS 解析程序无法解析域

有时,客户端会在解析器配置文件中设置自定义或错误的解析器,例如 Linux 中的 resolv.conf。如果是这种情况,并且您正在从 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例解析域,那么 EC2 实例将使用 resolv.conf 中定义的名称服务器。

场景 4:Amazon 提供的 DNS 服务器限制 DNS 查询

Amazon 提供的 DNS 服务器实施每个弹性网络接口每秒 1024 个数据包的限制。Amazon 提供的 DNS 服务器将拒绝超出此限制的流量。由于 DNS 限制,DNS 间歇性地超时。您可以打开实例缓存或增加应用程序上的 DNS 重试计时器来解决此问题。

场景 5:域 URL 可以从 Internet 解析,但不能从 EC2 实例解析

如果您已执行以下操作,则始终从私有托管区域解析域名的 DNS 查询:

如果您的域的查询记录不在私有托管区域中,则 DNS 查询将失败,并且不会转发到公有域。由于 DNS 记录存在于公有域区域中,因此它确实可以从 Internet 解析。

排查基于 Linux 的操作系统上的 DNS 故障

使用 dig 命令对在主机的 /etc/resolv.conf 文件中配置的客户端 DNS 服务器执行查找。

$ dig www.amazon.com
    
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> www.amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13150
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.amazon.com.    IN    A

;; ANSWER SECTION:
www.amazon.com.        41    IN    A    54.239.17.6

;; Query time: 1 msec
;; SERVER: 10.108.0.2#53(10.108.0.2)
;; WHEN: Fri Oct 21 21:43:11 2016
;; MSG SIZE rcvd: 48

在前面的示例中,根据应答部分显示的结果,www.amazon.com 的 HTTP 服务器的 IP 地址是 54.239.17.6

如果添加 +trace 变量,dig 命令还可以对 DNS 记录执行递归查找,如下面的示例所示:

$ dig +trace www.amazon.com
    
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> +trace www.amazon.com
;; global options: +cmd
.        518400    IN    NS    J.ROOT-SERVERS.NET.
.        518400    IN    NS    K.ROOT-SERVERS.NET.
.        518400    IN    NS    L.ROOT-SERVERS.NET.
…
;; Received 508 bytes from 10.108.0.2#53(10.108.0.2) in 31 ms

com.        172800    IN    NS    a.gtld-servers.net.
com.        172800    IN    NS    b.gtld-servers.net.
com.        172800    IN    NS    c.gtld-servers.net.
…
;; Received 492 bytes from 193.0.14.129#53(193.0.14.129) in 93 ms
amazon.com.        172800    IN    NS    pdns1.ultradns.net.
amazon.com.        172800    IN    NS    pdns6.ultradns.co.uk.
…
;; Received 289 bytes from 192.33.14.30#53(192.33.14.30) in 201 ms
www.amazon.com.    900    IN    NS    ns-1019.awsdns-63.net.
www.amazon.com.    900    IN    NS    ns-1568.awsdns-04.co.uk.
www.amazon.com.    900    IN    NS    ns-277.awsdns-34.com.
…
;; Received 170 bytes from 204.74.108.1#53(204.74.108.1) in 87 ms

www.amazon.com.    60     IN    A    54.239.26.128
www.amazon.com.    1800   IN    NS   ns-1019.awsdns-63.net.
www.amazon.com.    1800   IN    NS   ns-1178.awsdns-19.org.
…
;; Received 186 bytes from 205.251.195.251#53(205.251.195.251) in 7 ms

您还可以执行仅返回名称服务器的查询,如下面的示例所示:

$ dig -t NS www.amazon.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> -t NS www.amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48631
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.amazon.com.        IN    NS

;; ANSWER SECTION:
www.amazon.com.        490    IN    NS    ns-1019.awsdns-63.net.
www.amazon.com.        490    IN    NS    ns-1178.awsdns-19.org.
www.amazon.com.        490    IN    NS    ns-1568.awsdns-04.co.uk.
www.amazon.com.        490    IN    NS    ns-277.awsdns-34.com.

;; Query time: 0 msec
;; SERVER: 10.108.0.2#53(10.108.0.2)
;; WHEN: Fri Oct 21 21:48:20 2016
;; MSG SIZE rcvd: 170

在上面的示例中,www.amazon.com 拥有以下 4 个授权名称服务器:

  • ns-1019.awsdns-63.net.
  • ns-1178.awsdns-19.org.
  • ns-1568.awsdns-04.co.uk.
  • ns-277.awsdns-34.com.

这四台服务器中的任何一台都可以权威地回答有关 www.amazon.com 主机名的问题。使用 dig 命令直接定位特定名称服务器。检查给定域的每个权威名称服务器是否都能正确回应。

以下是查询 www.amazon.com 的其中一个授权名称服务器 (ns-1019.awsdns-63.net) 的示例输出结果。从服务器响应结果可知,可在 54.239.25.192 上访问 www.amazon.com:

$ dig www.amazon.com @ns-1019.awsdns-63.net.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> www.amazon.com @ns-1019.awsdns-63.net.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31712
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.amazon.com.    IN    A

;; ANSWER SECTION:
www.amazon.com.        60    IN    A    54.239.25.192

;; AUTHORITY SECTION:
www.amazon.com.        1800    IN    NS    ns-1019.awsdns-63.net.
www.amazon.com.        1800    IN    NS    ns-1178.awsdns-19.org.
www.amazon.com.        1800    IN    NS    ns-1568.awsdns-04.co.uk.
…

;; Query time: 7 msec
;; SERVER: 205.251.195.251#53(205.251.195.251)
;; WHEN: Fri Oct 21 21:50:00 2016
;; MSG SIZE rcvd: 186

以下行显示,ns-576.awsdns-08.net 是 amazon.com 的授权名称服务器:

;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0

出现 aa 标志,表明名称服务器 ns-1019.awsdns-63.net 提供了对资源记录 www.amazon.com 的授权响应。

解决基于 Windows 的操作系统上的 DNS 故障

使用 nslookup 实用程序返回与主机名关联的 IP 地址,如以下示例所示:

C:\>nslookup www.amazon.com
Server:     ip-10-20-0-2.ec2.internal
Address:    10.20.0.2

Non-authoritative answer:
Name:       www.amazon.com
Address:    54.239.25.192

要使用 nslookup 实用程序确定主机名的授权名称服务器,请使用 -type=NS 标记:

C:\>nslookup -type=NS www.amazon.com
Server:     ip-10-20-0-2.ec2.internal
Address:    10.20.0.2

Non-authoritative answer:
www.amazon.com    nameserver = ns-277.awsdns-34.com
www.amazon.com    nameserver = ns-1019.awsdns-63.net
www.amazon.com    nameserver = ns-1178.awsdns-19.org
…

要查看 www.amazon.com 的 ns-277.awsdns-34.com 是否正确响应 www.amazon.com 的请求,请使用以下语法:

C:\>nslookup www.amazon.com ns-277.awsdns-34.com
Server:     UnKnown
Address:    205.251.193.21

Name:       www.amazon.com
Address:    54.239.25.200

这篇文章对您有帮助吗?


您是否需要账单或技术支持?