为什么 dig NS 可以为该域找到 A 记录,却对域不返回任何内容?

Ale*_*lex -1 domain-name-system internal-dns dns-zone

我对 DNS 解析感到困惑。对于一个域,我们怎么可能获得一个 IP(A 记录)但没有返回该域的权威 NS。例如

dig ns HDRedirect-LB3-890977680.us-east-1.elb.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

只返回

dig A HDRedirect-LB3-890977680.us-east-1.elb.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

返回

HDRedirect-LB3-890977680.us-east-1.elb.amazonaws.com. 51 IN A 52.204.129.22
HDRedirect-LB3-890977680.us-east-1.elb.amazonaws.com. 51 IN A 54.85.127.70
Run Code Online (Sandbox Code Playgroud)

如果域可以解析,它应该有一个权威的NS,我怎样才能得到它?

Håk*_*ist 8

它按预期工作。这里的错误假设是所有名称都应该有NS记录。

相反,名称服务器集是基于每个区域定义的,NS仅在区域顶点有记录。

例如,如果您在example.com其他地方拥有并且没有委托任何子域,则NSexample.com 下的任何地方都没有更多记录。
如果您foo.bar.example.com在其他地方委托,那么该名称(根据定义是新区域的开始)将有NS记录。

有几种可能的方法来查找给定名称所属的区域。它实际上通常是一个两步过程。

一种方法是从例如开始:

dig HDRedirect-LB3-890977680.us-east-1.elb.amazonaws.com NS
Run Code Online (Sandbox Code Playgroud)

这里的想法是,如果此名称恰好是区域的顶点(通常您无法提前知道),您会得到想要的响应。
如果它不是区域顶点,您将得到否定响应(因为NS在这种情况下没有记录),但该否定响应包括SOAAUTHORITY部分中的区域。该SOA记录实际上会告诉您顶点在哪里。

在这种情况下

;; AUTHORITY SECTION:
us-east-1.elb.amazonaws.com. 32 IN      SOA     ns-1119.awsdns-11.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 60
Run Code Online (Sandbox Code Playgroud)

因此,记录的所有者名称(最左侧的列)SOA告诉您区域的开始位置。

即,dig us-east-1.elb.amazonaws.com. NS会给你相关的名称服务器。


另一种方法是遵循委托链(例如dig +trace),但最终会记住您看到的最后一个委托点。另外,如果你采用这种方法,并使用dig +trace具体地说,千万记住,输出的dig +trace默认情况下是非常有限的和之间并没有真正区分NS从记录AUTHORITY部分时相比,会从一个父区域转诊NS记录中的ANSWER部分来自实际的权威域名服务器。(您可能想要添加+all以清楚地看到正在发生的事情。)
最后,如果您只看到推荐(NS在该AUTHORITY部分中有记录)并希望确保您拥有NS 权威服务器所说的记录,您将不得不重新查询该特定名称。