有没有办法使用 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 rd
(aa
当前)
对比
dig @8.8.8.8 . SOA
产量flags: qr rd ra ad
(无aa
礼物)