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
来代替 - 但我认为这也可以有效地禁用它。