为什么 nslookup 给出 NXDOMAIN 但 dig 工作正常?

为什么 nslookup 给出 NXDOMAIN 但 dig 工作正常?

我在其他地方没有看到确切的答案,所以我要勇敢地在这里问。我有一个 linode,并为我的主机设置了一个 DNS A 记录,我将其称为 A.wc.net。当我使用 A.wc.net 上的 nslookup 查找它时,我得到了这样的答案:

#  running on A.wc.net:  
root@linode (etc ): nslookup A.wc.net
Server:         173.255.243.5
Address:        173.255.243.5#53

** server can't find A.wc.net: NXDOMAIN

但是,从任何其他机器上,nslookup 都会给出正确的结果:

@HomeMac (~ (BARE:master)): nslookup A.wc.net
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   A.wc.net
Address: 173.255.111.911  (number changed for my protection ;-) 

另外,如果我在主机 A.wc.net 上运行 dig:

root@linode (etc ): dig @ns1.linode.com A.wc.net

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @ns1.linode.com A.wc.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55398
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 10
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;A.wc.net.                IN      A

;; ANSWER SECTION:
A.wc.net. 86400   IN      A       173.255.111.911  (number changed for my protection ;-) 

我的问题是,为什么

nslookup A.wc.net

在主机 A.wc.net 上运行的命令本身无法找到正确答案,而在其他主机上运行的相同命令却成功了,并且

dig@ns1.linode.com A.wc.net

主机 A.wc.net 本身出现故障?

答案1

在这个答案中我做了一个假设:您为域创建了一个新的 A 记录并开始立即从其他系统进行查询。

让我们看看你在这三个例子中真正询问的是什么。

示例 1:您要求 nslookup 查找 的 A 记录A.wc.net,但您没有告诉 nslookup 使用哪个名称服务器来查找该记录。操作系统有一些默认设置 nslookup 会告诉您它正在使用 173.255.243.5 的名称服务器尝试查找。该查找失败。

示例 2:您要求另一台计算机上的 nslookup 再次查找,A.wc.net但未告知 nslookup 要使用哪个名称服务器。此连接默认使用 8.8.8.8 上的 Google DNS。(个人咆哮} google DNS 很快,但我拒绝向 google 提供超出他们需要知道的关于我的信息。{/个人咆哮} Google 为您提供了答案并告诉您,它还告诉您它不是此域的权威 DNS - 本质上〜用简单的话说〜说:此名称服务器不是此域的权威服务器,但是我的记录可能被缓存了,因此这里有一个答案给您,权威 DNS 上可能有更新的记录。 (完整解释权威/非权威答案等实际上超出了您的问题范围,但快速回答是:权威名称服务器是您设置域使用的名称服务器。就 wc.net 而言,在我发布此答案时,wc.net 的名称服务器是,UDNS2.ULTRADNS.NET并且UDNS1.ULTRADNS.NET如果您告诉 dig 或 nslookup 使用其中任一服务器进行查询,它们将提供权威答案)。

示例 3:您要求 dig 使用名称服务器@ns1.linode.com进行查找A.wc.net,它找到了一条 A 记录并将其提供给您。这次我们得到了一条额外的信息 TTL 或生存时间,设置为 86400 秒或 24 小时。

这一点的重要性在于,处理查询的非权威名称服务器(并且在所有 3 个示例中,您都使用非权威名称服务器来表示 wc.net)将首先查看自己的缓存,看它是否已经知道该问题的未过期答案,如果出于速度和带宽原因它确实知道,它将返回已缓存的答案。24 小时的 TTL 表示〜如果此缓存记录少于 24 小时,那么它就是答案,否则向上游 DNS 服务器查询较新的记录。〜在现代,此上游查询通常会直接转到权威名称服务器,但最终可能会得到其他名称服务器缓存的答案——这再次超出了您的问题范围——但复杂的是,如果名称服务器未正确配置为假设响应的上游缓存中剩余的 TTL,它可以延长缓存时间。)

结论:对现有 A 记录进行的更改通常会在接下来的 86400 秒(24 小时)内从全球所有 DNS 服务器变为可用,如果需要更直接的答案,请查找域的权威服务器并使用其中一个进行 nslookup 或 dig 查询。(在高级情况下,子域实际上可以拥有自己的〜与主域不同的〜权威名称服务器,同样超出了范围。)

whatsmydns.net是一个可用于观察传播或 DNS 更改在世界范围内发生的速度的工具。绿色勾号和红色 X 显示各种 DNS 服务器答案与权威答案的对比。请记住,whatsmydns.net 的地图上并没有包含世界上所有的名称服务器,因此即使所有绿色勾号也可能意味着仍有带有缓存记录的服务器。使用此工具,您将更快地发现新记录或更多记录在互联网上传播,更改的记录可能需要 TTL 秒才能被远程看到。我们不得不说“可能”,因为实际上可能更多或更少,但可能更少。

底线:无需对 A 记录进行额外更改,等待A.wc.net24 小时的 TTL,然后再次进行查询,到那时大多数答案应该是正确的。

相关内容