自从升级到 16.04 以来,DNS 解析在第一次尝试任何网站时都会失败(返回 Host Not Found)。然后我可以立即尝试第二次,它工作得很好。
一点背景:
在我有限的理解中,似乎正在发生的事情是,当对新网站的查询进入本地 DNS 缓存(resolvconf?)时,它不在缓存中,因此回复为空。然后当同样的查询再次出现时,某个进程同时解析了地址并更新了缓存,因此缓存回复了地址。
我想要的是,如果请求的地址不在缓存中,它会在第一次回复之前找到它。谁能告诉我如何做到这一点?
这是 dig 的输出(第一次):
~$ dig www.foo.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.foo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 6505
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.foo.com. IN A
;; Query time: 23 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Thu Jun 02 13:44:49 JST 2016
;; MSG SIZE rcvd: 34
Run Code Online (Sandbox Code Playgroud)
几秒钟后,这是 dig (第二次)的输出:
~$ dig www.foo.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.foo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53490
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.foo.com. IN A
;; ANSWER SECTION:
www.foo.com. 14310 IN CNAME foo.com.
foo.com. 210 IN A 192.0.79.33
foo.com. 210 IN A 192.0.79.32
;; Query time: 0 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Thu Jun 02 13:46:19 JST 2016
;; MSG SIZE rcvd: 92
Run Code Online (Sandbox Code Playgroud)
小智 5
我面临同样的问题。我现在使用的解决方法是:
打开网络管理器配置文件:
sudo nano /etc/NetworkManager/NetworkManager.conf
Run Code Online (Sandbox Code Playgroud)修改以下行:
#dns=dnsmasq
Run Code Online (Sandbox Code Playgroud)保存并重启管理器:
sudo service NetworkManager restart
Run Code Online (Sandbox Code Playgroud)我面临着同样的问题。我现在使用的解决方法是将辅助 dns 服务器添加到我的 /etc/resolv.conf 中:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 192.168.1.1
search lan
Run Code Online (Sandbox Code Playgroud)
另外我安装了 dnsmasq 来缓存所有 dns 查询。因此,所有请求首先转到 dnsmasq (127.0.0.1),如果域未缓存,则请求转到 192.168.1.1(我的路由器也运行 dns 服务器,您当然可以使用 8.8.8.8 之类的东西)
我知道这个解决方法并不理想 - 但目前它有效。顺便说一句,我也使用全新安装的 Ubuntu 16.04
| 归档时间: |
|
| 查看次数: |
7238 次 |
| 最近记录: |