我可以解析 *.local 域,ping IP,但我无法 ping 这个域

DAB*_*DAB 10 dns dnsmasq resolv.conf

我试图让 * .local域使用带有 vagrant-dns 的 DNS 服务器。为了让它工作,我设置了 dnsmasq 在它前面运行。

NetworkManager 已安装但设置为 dns=none

解决.conf:

nameserver 127.0.0.1 #this points to dnsmasq
Run Code Online (Sandbox Code Playgroud)

测试解决:

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

Name:   domain.local
Address: 10.222.222.22
Run Code Online (Sandbox Code Playgroud)

Dig 解决了相同的问题:

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

那是正确的地址。我可以 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
Run Code Online (Sandbox Code Playgroud)

但是我无法ping通地址:

$ ping domain.local
ping: domain.local: Name or service not known
Run Code Online (Sandbox Code Playgroud)

我还尝试从浏览器加载托管在那里的页面,但出现 DNS 错误。奇怪的是,所有其他站点似乎都可以正常工作,尽管我不知道它是否正在使用 localhost DNS 服务器。

使用 debian 8 Jessie/测试

DAB*_*DAB 12

我找到了答案!所以大多数人都知道 /etc/hosts 文件将解析域,有点像 DNS 服务器。但是系统如何知道要查看该文件呢?它如何知道检查该文件或 DNS 服务器的顺序?

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

我有这条线:

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns
Run Code Online (Sandbox Code Playgroud)

这意味着首先检查文件,例如 /etc/hosts。然后检查系统主机名。然后是mdns4,我相信这是在本地网络上查找其他机器的协议。

在 mdns4 之后是什么阻碍了我。[NOTFOUND=return]. mdns 查找以.local. 如果它找不到一个,它不仅会传递到下一个和最后一个搜索方法dns,它实际上会停止并告诉您的系统该域不存在。由于我在 dnsmasq 中设置的域是一个.local域,它永远不会到达那里。

所以有两种方法可以解决这个问题。首先是删除[NOTFOUND=return]. 这是我选择的方式,效果很好。有一个小的延迟,因为我认为 mdns.local在将它传递给dns.

这是我的文件现在的样子:

hosts:          files myhostname mdns4_minimal dns
Run Code Online (Sandbox Code Playgroud)

另一种选择,因为我并不真正使用 mdns,我可以完全删除它,或者有一种方法可以告诉它使用不同的 tld.alocal来代替 - 但我认为这也可以有效地禁用它。