DNS 的工作原理是什么,以及如何排查部分或间歇性 DNS 失败的问题?
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 查询始终从私有托管区进行解析:
- 创建了一个与您的域同名的私有托管区。
- 将您的 VPC 与使用 ** AmazonProvidedDNS** 配置的私有托管区和 VPC DHCP 选项相关联。
如果您的域查询记录不在私有托管区中,则 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 官方已更新 4 个月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前