从 DNS 记录中,如何知道该服务器是否是根服务器?

从 DNS 记录中,如何知道该服务器是否是根服务器?

有没有办法使用 DNS 来知道给定的名称服务器是否是根服务器?查看 dig 的输出dig NS a.root-servers.net,我们可以看到它的 SOA 指向它自己。

; <<>> DiG 9.11.2 <<>> NS a.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19635
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;a.root-servers.net.        IN  NS

;; AUTHORITY SECTION:
root-servers.net.   9684    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2019102500 14400 7200 1209600 3600000

;; Query time: 18 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Nov 11 16:03:39 EST 2019
;; MSG SIZE  rcvd: 105

然而,对于 B 根服务器,我们可以看到 SOA 仍然指向a.root-servers.net

;; AUTHORITY SECTION:
root-servers.net.   86399   IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2019102500 14400 7200 1209600 3600000

8.8.8.8 也是如此,它不是根服务器。

;; AUTHORITY SECTION:
.           86395   IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2019111101 1800 900 604800 86400

我们可以通过记录中的某种方式了解这一点吗?

答案1

我感觉你的做法有点本末倒置。区域(包括但不限于根区域)的名称服务器由NS区域顶点的记录指定,名称服务器的名称并未指定它将为哪些区域提供权威性响应。

即您可以通过以下方式获取根服务器列表:

dig . NS


从不同的角度来看,如果您想测试给定的服务器是否表现得像根服务器(对根区域做出权威性的回答),您可以执行以下操作:

dig @serveryouwanttotest . SOA

并检查旗帜(在标题中,而不是记录)对aa(权威答案)标志的响应。

例子:

dig @a.root-servers.net . SOA

收益率flags: qr aa rdaa当前)

对比

dig @8.8.8.8 . SOA

产量flags: qr rd ra ad(无aa礼物)

相关内容