Dns

我可以解析 *.local 域,ping IP,但我無法 ping 這個域

  • April 28, 2021

我正在嘗試獲取 * .local域以將 DNS 伺服器與 vagrant-dns 一起使用。為了讓它工作,我設置了 dnsmasq 在它前面執行。

NetworkManager 已安裝但設置為dns=none

解決.conf:

nameserver 127.0.0.1 #this points to dnsmasq

測試解決:

$ nslookup domain.local
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   domain.local
Address: 10.222.222.22

探勘解決了同樣的問題:

$ dig domain.local

; <<>> DiG 9.10.3-P4-Debian <<>> domain.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18052
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;domain.local.      IN  A

;; ANSWER SECTION:
domain.local.   86400   IN  A   10.222.222.22

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jan 29 19:18:52 CST 2017
;; MSG SIZE  rcvd: 49

那是正確的地址。我可以ping ip:

ping 10.222.222.22
PING 10.222.222.22 (10.222.222.22) 56(84) bytes of data.
64 bytes from 10.222.222.22: icmp_seq=1 ttl=64 time=0.185 ms

但我無法 ping 地址:

$ ping domain.local
ping: domain.local: Name or service not known

我還嘗試從瀏覽器載入託管在那裡的頁面,但出現 DNS 錯誤。奇怪的是,所有其他站點似乎都可以正常工作,儘管我無法判斷它是否使用本地主機 DNS 伺服器。

使用 debian 8 Jessie/測試

我找到了答案!所以大多數人都知道 /etc/hosts 文件將解析域,有點像 DNS 伺服器。但是系統怎麼知道要查看那個文件呢?它如何知道檢查該文件或 DNS 伺服器的順序?

有一個文件:/etc/nsswitch.conf

我有這行:

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

這意味著首先檢查文件,例如 /etc/hosts。然後檢查系統主機名。然後是mdns4,我相信它是在本地網路上查找其他機器的協議。

在 mdns4 之後是什麼阻礙了我。[NOTFOUND=return]. mdns 查找以.local. 如果找不到,它不僅會傳遞到下一個也是最終的搜尋方法dns,它實際上會停止並告訴您的系統該域不存在。由於我在 dnsmasq 中設置的域是一個.local域,它永遠不會到達那裡。

所以有兩種方法可以解決這個問題。首先是刪除[NOTFOUND=return]。這是我選擇的方式,效果很好。有一點延遲,因為我認為 mdns 看到.local並嘗試在將其傳遞給dns.

這是我的文件現在的樣子:

hosts:          files myhostname mdns4_minimal dns

另一種選擇,因為我並沒有真正使用 mdns,所以我可以完全刪除它,或者有一種方法可以告訴它使用不同的 tld.alocal代替 - 但我認為這也會有效地禁用它。

引用自:https://unix.stackexchange.com/questions/341093