我可以解析 *.local 域,ping IP,但我無法 ping 這個域
我正在嘗試獲取 * .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
代替 - 但我認為這也會有效地禁用它。