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

4 分钟阅读
0

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

解决方案

DNS 概述

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

有关更多信息,请参阅 What is DNS?

DNS 部分、临时或间歇性故障场景

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

场景 1: 注册商的名称服务器配置不正确

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

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

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

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

在这种情况下,如果解析器尝试使用错误的名称服务器解析域,某些客户端可能会遇到 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 是从互联网解析的,但不是从 EC2 实例解析的

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

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

对基于 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

在前面的示例中,答案部分显示 54.239.17.6 是 www.amazon.com 的 HTTP 服务器的 IP 地址。

如果您添加 +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 有以下四个权威名称服务器:

  • 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)进行查询的示例输出。服务器响应显示 www.amazon.com 可在 54.239.25.192 上线:

$ 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

AWS 官方
AWS 官方已更新 2 年前