Domain-Name-System

為什麼 dig、host 和 nslookup 返回不同的結果?

  • May 25, 2021

似乎我的預設(路由器)DNS 伺服器根據用於查詢它的工具返回不同的結果。

  1. 使用dig
$ dig @192.168.1.2 test.example.com

; <<>> DiG 9.16.8-Debian <<>> @192.168.1.2 test.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 58608
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;test.example.com.    IN  A

;; ANSWER SECTION:
test.example.com.  41  IN  CNAME  123.123.12.123.

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

;; Query time: 0 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Tue Nov 24 10:12:40 CET 2020
;; MSG SIZE  rcvd: 148

如您所見,它成功找到了 的 IP 地址test.example.com,即123.123.12.123。但是,以下兩個工具沒有。

  1. 使用host
$ host test.example.com 192.168.1.2
Using domain server:
Name: 192.168.1.2
Address: 192.168.1.2#53
Aliases: 

Host test.example.com not found: 3(NXDOMAIN)
  1. 使用nslookup
$ nslookup test.example.com 192.168.1.2
Server:    192.168.1.2
Address:  192.168.1.2#53

** server can't find test.example.com: NXDOMAIN

這裡發生了什麼?dig為什麼,host和的結果之間存在差異nslookup?他們不是都在後台執行相同的 DNS 查詢嗎?

編輯:正如接受的答案指出的那樣,我錯誤地使用了 aCNAME而不是A記錄。我已經更新了 DNS 條目,現在域名解析正確。

Edit2:域和 IP 是假的

定義這個:

test.example.com.       IN  A 123.123.12.123

會是正確的。

這:

test.example.com.    41  IN  CNAME   123.123.12.123.

是無效的。CNAME 必須指向左側顯示的條目:名稱​​,而不是 IP 地址。

無論如何,這裡的 IP 地址及其最後一個點都被視為名稱,這就是為什麼權限部分指的是根 DNS 伺服器a.root-servers.net。, 因為即使是最低的部分(應該是 123.)也不能根據它找到。

所以第一個命令 ( dig) 報告了它得到的答案,同時告訴了 NXDOMAIN,而另外兩個命令無法解析最終結果,只告訴 NXDOMAIN。

引用自:https://serverfault.com/questions/1043697