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

mus*_*XXX 36 domain-name-system host dig nslookup

谁能告诉我为什么会这样?我可以使用 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
Run Code Online (Sandbox Code Playgroud)

这是我的 resolv.conf 的样子:

nameserver 192.168.0.253
search somenet.internal
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*sen 48

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.
Run Code Online (Sandbox Code Playgroud)

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

  • @musashiXXX 好吧,这取决于:-) 大多数人使用 `dig` 来调试 DNS,在这种情况下,禁用所有可能会弄乱 DNS 答案的东西是个好主意。我认为这是一个很好的主意;毕竟大多数人使用`host`和`nslookup`。:-) (7认同)
  • 我是唯一一个认为这有点违反直觉的人吗?:-) 无论如何,非常感谢! (2认同)

Tah*_*gir 10

就我而言,它是 Microsoft DNS 服务器中的一个错误,它为设置FORMERREDNS Cookie选项的请求返回响应(请求格式错误)。较新版本dig(9.11 及更高版本)默认使用 dns-cookies。这可以通过+nocookie+noedns标记来防止:

$ dig +nocookie DOMAIN @SERVER
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

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

  • 有同样的问题,但不同的结果是由 `edns` 扩展引起的。当我使用 `+noends` 查询时,dig 返回与主机相同的结果。 (3认同)