为什么 host 和 nslookup 可以解析名称,但 dig 却不能?

为什么 host 和 nslookup 可以解析名称,但 dig 却不能?

有人能告诉我为什么会这样吗?我可以使用 host 和/或 nslookup 解析主机名,但正向查找不适用于 dig;反向查找可以:

musashixxx@box:~$ host someserver
someserver.somenet.internal has address 192.168.0.252
musashixxx@box:~$ host 192.168.0.252
252.0.168.192.in-addr.arpa domain name pointer someserver.somenet.internal.
musashixxx@box:~$ nslookup someserver
Server:     192.168.0.253
Address:    192.168.0.253#53

Name:   someserver.somenet.internal
Address: 192.168.0.252
musashixxx@box:~$ nslookup 192.168.0.252
Server:     192.168.0.253
Address:    192.168.0.253#53

252.0.168.192.in-addr.arpa  name = someserver.somenet.internal.

musashixxx@box:~$ dig someserver

; <<>> DiG 9.8.1-P1 <<>> someserver
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 55306
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;someserver.            IN  A

;; Query time: 0 msec
;; SERVER: 192.168.0.253#53(192.168.0.253)
;; WHEN: Wed Oct  3 15:47:38 2012
;; MSG SIZE  rcvd: 27

musashixxx@box:~$ dig -x 192.168.0.252

; <<>> DiG 9.8.1-P1 <<>> -x 192.168.0.252
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28126
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;252.0.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
252.0.168.192.in-addr.arpa. 3600 IN PTR someserver.somenet.internal.

;; Query time: 0 msec
;; SERVER: 192.168.0.253#53(192.168.0.253)
;; WHEN: Wed Oct  3 15:49:11 2012
;; MSG SIZE  rcvd: 86

以下是我的 resolv.conf 的内容:

nameserver 192.168.0.253
search somenet.internal

这种行为正常吗?有什么想法吗?

答案1

不使用搜索选项是 dig 的默认行为。

从手册页:

   +[no]search
       Use [do not use] the search list defined by the searchlist or
       domain directive in resolv.conf (if any). The search list is not
       used by default.

编辑:只需添加+search即可使其工作,例如dig +search myhost

答案2

就我而言,这是 Microsoft DNS 服务器的一个错误,它会对设置了选项FORMERR的请求返回响应(请求格式错误)EDNS Cookie。较新版本(9.11 及更高版本)默认使用 dns-cookies。可以通过或标志来dig阻止这种情况:+nocookie+noedns

$ dig +nocookie DOMAIN @SERVER

来源:https://kevinlocke.name/bits/2017/01/20/formerr-from-microsoft-dns-server-for-dig/

答案3

我遇到了同样的问题。使用 wireshark 检查了 nslookup 和 dig 发送的数据包后,我发现了问题所在。

dig 正在设置查询中的真实数据位。根据手册页,“这要求服务器返回是否所有答案和授权部分都已根据服务器的安全策略验证为安全。”通过使用 +noadflag 运行 dig,它返回的结果与 nslookup 相同。

答案4

我的 Mac 上也遇到了同样的问题,按照 Slava Bacherikov 的建议添加 ~/.digrc 文件解决了这个问题

❯ cat ~/.digrc
+noedns
 rancher-desktop /tmp ❯ dig github.com +short
20.207.73.82

 rancher-desktop /tmp ❯ mv ~/.digrc /tmp/

 rancher-desktop /tmp ❯ dig github.com +short

; <<>> DiG 9.10.6 <<>> github.com +short
;; global options: +cmd
;; connection timed out; no servers could be reached

 rancher-desktop /tmp took 18s ❯ mv /tmp/.digrc ~/.digrc

 rancher-desktop /tmp ❯ dig github.com +short
20.207.73.82

 rancher-desktop /tmp ❯

相关内容