在使用 Route 53 作为 DNS 服务时,如何对 NXDOMAIN 响应进行问题排查?

上次更新时间:2021 年 4 月 9 日

我正在尝试分解 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.    在 whois 输出中,注意对您的域进行授权的名称服务器

        whois 输出示例:

whois testdomain.com
   Domain Name: TESTDOMAIN.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 testdomain.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.2 <<>> +trace testdomain.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

testdomain.com.         172800  IN      NS      ns-1470.awsdns-55.org.  	------>Name servers of interest.
testdomain.com.         172800  IN      NS      ns-1969.awsdns-54.co.uk.
testdomain.com.         172800  IN      NS      ns-736.awsdns-28.net.
testdomain.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

testdomain.com.         3600    IN      A       104.200.22.130
testdomain.com.         3600    IN      A       104.200.23.95
testdomain.com.         3600    IN      NS      ns-1470.awsdns-55.org.
testdomain.com.         3600    IN      NS      ns-1969.awsdns-54.co.uk.
testdomain.com.         3600    IN      NS      ns-736.awsdns-28.net.
testdomain.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

3.    打开 Route 53 控制台

4.    在导航窗格中,选择 Hosted zones(托管区)。

5.    在托管区页面上,选择该托管区的单选按钮(不是名称)。然后选择 View details(查看详细信息)。

6.    在托管区的详细信息页面上,选择 Hosted zone details(托管区详细信息)。

7.    确认托管区详细信息中列出的名称服务器与 whois 或 dig +trace 输出中的名称服务器相同。

重要提示:如果名称服务器不同,则必须在域注册商处更新它们。如果域是通过 Route 53 注册的,请参阅添加或更改域的名称服务器和 Glue 记录。如果域是通过第三方注册的,请参阅他们提供的文档,以了解更新名称服务器的步骤。

确认请求的记录存在

检查域的托管区是否包含请求的记录。例如,如果您在尝试解析 www.testdomain.com 时收到 NXDOMAIN 响应,请检查 testdomain.com 托管区中的 www.testdomain.com 记录。有关如何列出 Route 53 中的记录的步骤,请参阅列出记录

检查子域委托问题

1.    检查父托管区中的名称服务器 (NS) 记录,看其中是否有您正在解析的域名。如果存在子域的 NS 记录,则该域及其子域的权限将委托给另一个区。例如,如果 www.testdomain.com 的 NS 记录存在,则 www 的权限将委托给 NS 记录中的名称服务器。如果委托有效,则必须在委托区(而不是 testdomain.com 的父区)中为该域创建记录

2.    如果委托无效,请删除该域的 NS 记录。确认父托管区 (testdomain.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.testdomain.com 进行 DNS 查询,并收到响应代码 NXDOMAIN。收到此响应的原因是记录 neg.testdomain.com 不存在。

此用户同时拥有 testdomain.com,因此他们为 neg.testdomain.com 创建了一个新记录。该用户继续收到 NXDOMAIN 响应,但其他网络中的用户可以成功解析记录。

如果用户在对 neg.testdomain.com 进行查询之后创建了新记录,则他们会收到 NXDOMAIN 响应。如果解析器设置中启用了负面缓存,则解析器将缓存此响应。用户创建新记录后,他们再次进行了查询。解析器之前收到了此查询并将其缓存,因此它从缓存中返回响应。

负面响应的回答中不返回记录,因此负面响应中没有正面响应中所包含的生存时间 (TTL) 值。在这种情况下,解析器使用起始授权机构 (SOA) 记录的最小 TTL 值与 SOA 记录的 TTL 值中较小的值来缓存 NXDOMAIN 响应。

要确认此问题,请直接向名称服务器发送查询,以查看是否能收到响应。例如:

dig www.testdomain.com @ns-1470.awsdns-55.org

这篇文章对您有帮助吗?


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