在使用 Route 53 作为 DNS 服务时,如何对 NXDOMAIN 响应进行故障排除?
上次更新时间:2022 年 8 月 4 日
我正在尝试分解 Amazon Route 53 记录。但是,我收到来自 DNS 解析器的 NXDOMAIN 响应,或者 DNS_PROBE_FINISHED_NXDOMAIN 错误。我应该如何排查此问题?
解决方法
确认域注册商配置了正确的名称服务器
1. 对域运行 whois 查询。
对于 Windows:打开 Windows 命令提示符,然后输入 whois -v example.com。
对于 Linux:打开 SSH 客户端。在命令提示符下,输入 whois example.com。
注意:如果域是通过 Amazon Registrar 注册的,则可以使用 Amazon Registrar whois 查找工具。
2. 检查您的域是否未被暂停。有关更多信息以及如何解决此情况,请参阅我的域已被暂停(状态为 ClientHold)。
3. 在 whois 输出中,注意对您的域进行授权的名称服务器。
whois 输出示例:
whois example.com
Domain Name: EXAMPLE.COM
Registry Domain ID: 87023946_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.godaddy.com
Registrar URL: http://www.godaddy.com
Updated Date: 2020-05-08T10:05:49Z
Creation Date: 2002-05-28T18:22:16Z
Registry Expiry Date: 2021-05-28T18:22:16Z
Registrar: GoDaddy.com, LLC
Registrar IANA ID: 146
Registrar Abuse Contact Email: abuse@godaddy.com
Registrar Abuse Contact Phone: 480-624-2505
Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
Name Server: ns-1470.awsdns-55.org.
Name Server: ns-1969.awsdns-54.co.uk.
Name Server: ns-736.awsdns-28.net.
Name Server: ns-316.awsdns-39.com.
检查 Linux 计算机中配置的名称服务器的另一种方法是使用 dig 实用程序。
dig +trace 输出示例:
dig +trace example.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.2 <<>> +trace example.com
;; global options: +cmd
. 518400 IN NS H.ROOT-SERVERS.NET.
. 518400 IN NS I.ROOT-SERVERS.NET.
. 518400 IN NS J.ROOT-SERVERS.NET.
. 518400 IN NS K.ROOT-SERVERS.NET.
;; Received 239 bytes from 10.0.0.2#53(10.0.0.2) in 0 ms
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20210329220000 20210316210000 42351 .
;; Received 1174 bytes from 192.112.36.4#53(G.ROOT-SERVERS.NET) in 104 ms
example.com. 172800 IN NS ns-1470.awsdns-55.org. ------>Name servers of interest.
example.com. 172800 IN NS ns-1969.awsdns-54.co.uk.
example.com. 172800 IN NS ns-736.awsdns-28.net.
example.com. 172800 IN NS ns-316.awsdns-39.com.
;; Received 732 bytes from 192.33.14.30#53(b.gtld-servers.net) in 91 ms
example.com. 3600 IN A 104.200.22.130
example.com. 3600 IN A 104.200.23.95
example.com. 3600 IN NS ns-1470.awsdns-55.org.
example.com. 3600 IN NS ns-1969.awsdns-54.co.uk.
example.com. 3600 IN NS ns-736.awsdns-28.net.
example.com. 3600 IN NS ns-316.awsdns-39.com.
;; Received 127 bytes from 173.201.72.25#53(ns-1470.awsdns-55.org) in 90 ms
4. 打开 Route 53 控制台。
5. 在导航窗格中,选择 Hosted zones(托管区)。
6. 在“Hosted zones”(托管区)页面上,选择该托管区的单选按钮(不是名称)。然后选择 View details(查看详细信息)。
7. 在托管区的详细信息页面上,选择 Hosted zone details(托管区详细信息)。
8. 确认托管区详细信息中列出的名称服务器与 whois 或 dig +trace 输出中的名称服务器相同。
重要提示:如果名称服务器不同,则必须在域注册商处更新它们。如果域是通过 Route 53 注册的,请参阅添加或更改域的名称服务器和 Glue 记录。如果域是通过第三方注册的,请参阅他们提供的文档,以了解更新名称服务器的步骤。
确认请求的记录存在
检查域的托管区是否包含请求的记录。例如,如果您在尝试解析 www.example.com 时收到 NXDOMAIN 响应,则请检查 example.com 托管区中的 www.example.com 记录。有关如何列出 Route 53 中的记录的步骤,请参阅列出记录。
检查子域委托问题
1. 检查父托管区中的名称服务器 (NS) 记录,看其中是否有您正在解析的域名。如果存在子域的 NS 记录,则该域及其子域的权限将委托给另一个区。例如,如果 www.example.com 的 NS 记录存在,则 www 的授权将委托给 NS 记录中的名称服务器。如果委托有效,则必须在委托区(而不是 example.com 的父区)中为该域创建记录。
2. 如果委托无效,请删除该域的 NS 记录。确认父托管区 (example.com) 包含您正尝试解析的域名的记录。
确定 DNS 解析问题是否仅存在于 VPC 中
1. 检查在客户端操作系统 (OS) 上配置的解析器 IP 地址。对于 Linux,检查 /etc/resolv.conf 文件。对于 Windows,检查 ipconfig /all 输出中的 DNS 服务器。寻找默认的 VPC DNS 解析器(即 VPC CIDR+2)。例如,如果 VPC CIDR 为 10.0.0.0/8,则 DNS 解析器 IP 地址应为 10.0.0.2。如果您在 /etc/resolv.conf 中没有看到 VPC DNS 解析器,请检查自定义的 DNS 解析器。
2. 如果您使用的是 VPC DNS 解析器,请检查私有托管区和 Route 53 解析器规则。
使用解析器规则和私有托管区时:
如果解析器规则和私有托管区域名重叠,则解析器规则优先。有关详细信息,请参阅使用私有托管区时的注意事项。在这种情况下,DNS 查询将发送到在解析器规则中配置为目标的目标 IP 地址。
使用私有托管区且没有解析器规则时:
检查是否有私有托管区使用与 VPC 关联的匹配域名。例如,对于与 VPC 关联的域,您可能同时拥有私有托管区和公共托管区。VPC 中的客户端无法解析在公共托管区中创建的记录。如果记录不在私有托管区中,则 VPC DNS 不会回退到公共托管区中。
当仅使用解析器规则而不使用私有托管区时:
检查 Route 53 解析器规则。如果存在与域名匹配的规则,则域的查询将路由到已配置的目标 IP 地址,而不是默认的公共解析器。
确定您的问题是否是由于负面缓存导致的
负面缓存是在缓存中存储来自权威名称服务器的负面响应的过程。NXDOMAIN 响应被视为负面响应。请考虑以下示例:
客户端对 neg.example.com 进行 DNS 查询,并收到响应代码 NXDOMAIN。收到此响应的原因是记录 neg.example.com 不存在。
该用户还拥有 example.com,因此他们将为 neg.example.com 创建一个新记录。该用户继续收到 NXDOMAIN 响应,但其他网络中的用户可以成功解析记录。
如果该用户在创建新记录之前对 neg.testdomain.com 进行了查询,则他们将收到 NXDOMAIN 响应。如果解析器设置中启用了负面缓存,则解析器将缓存此响应。用户创建新记录后,他们再次进行了查询。解析器之前收到了此查询并将其缓存,因此它从缓存中返回响应。
负面响应的回答中不返回记录,因此负面响应中没有正面响应中所包含的生存时间 (TTL) 值。在这种情况下,解析器使用起始授权机构 (SOA) 记录的最小 TTL 值与 SOA 记录的 TTL 值中较小的值来缓存 NXDOMAIN 响应。
要确认此问题,请直接向名称服务器发送查询,以查看是否能收到响应。例如:
dig www.example.com @ns-1470.awsdns-55.org