在 Hacker News 上看到「DNS Esoterica - Why you can't dig Switzerland」這篇,裡面提到 dig 的 "feature"。
拿來查 tw
的 NS 會這樣下:
$ dig tw ns
結果會是列出所有的 NS server:
;; ANSWER SECTION: tw. 3600 IN NS h.dns.tw. tw. 3600 IN NS a.dns.tw. tw. 3600 IN NS g.dns.tw. tw. 3600 IN NS d.dns.tw. tw. 3600 IN NS anytld.apnic.net. tw. 3600 IN NS f.dns.tw. tw. 3600 IN NS b.dns.tw. tw. 3600 IN NS e.dns.tw. tw. 3600 IN NS c.dns.tw. tw. 3600 IN NS ns.twnic.net.
照著作者說的,uk
的 dig uk ns
可以得到類似的結果:
;; ANSWER SECTION: uk. 86400 IN NS dns1.nic.uk. uk. 86400 IN NS dns4.nic.uk. uk. 86400 IN NS nsa.nic.uk. uk. 86400 IN NS nsb.nic.uk. uk. 86400 IN NS nsc.nic.uk. uk. 86400 IN NS nsd.nic.uk. uk. 86400 IN NS dns3.nic.uk. uk. 86400 IN NS dns2.nic.uk.
但如果你下 dig ch ns
就會出現錯誤,像是這樣:
; <<>> DiG 9.16.1-Ubuntu <<>> ch ns ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 5019 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;. CH NS ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Jul 15 06:54:24 CST 2022 ;; MSG SIZE rcvd: 28
原因是因為 CH
這個關鍵字是 Chaosnet 的縮寫,而被特殊解讀:
Set the query class. The default class is IN; other classes are HS for Hesiod records or CH for Chaosnet records.
要避開這個解讀需要加上一個 dot (.
),採用 FQDN 的方式列出:
dig ch. ns
就會得到正確的結果:
;; ANSWER SECTION: ch. 86400 IN NS a.nic.ch. ch. 86400 IN NS b.nic.ch. ch. 86400 IN NS f.nic.ch. ch. 86400 IN NS d.nic.ch. ch. 86400 IN NS e.nic.ch.
另外的方式是 dig -c IN -t NS ch
,透過參數的方式讓 dig 不會誤會。