我在一些装有 Ubuntu Server 17.10 或 18.01 的服务器上遇到了 DNS 故障。除非我直接访问名称服务器(即使用 dig @1.2.3.4 ...),否则我无法解析地址。它无法解析最简单的查询:
$ host localhost
;; connection timed out; no servers could be reached
/etc/nsswitch.conf:
hosts: files dns
/etc/resolv.conf
nameserver 127.0.0.53
search xx.uk xxx
netstat 输出:
$ netstat -pluten
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 102 209799 7876/systemd-resolv
tcp 0 0 192.168.x.1:53 0.0.0.0:* LISTEN 0 45394 2673/dnsmasq
tcp 0 0 127.0.0.1:7030 0.0.0.0:* LISTEN 0 26916 3236/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 23759 1925/sshd
tcp6 0 0 :::7946 :::* LISTEN 0 48402 2076/dockerd
tcp6 0 0 :::22 :::* LISTEN 0 23761 1925/sshd
udp 0 0 0.0.0.0:4789 0.0.0.0:* 0 26906 -
udp 0 0 127.0.0.53:53 0.0.0.0:* 102 209798 7876/systemd-resolv
udp 0 0 192.168.x.1:53 0.0.0.0:* 0 45393 2673/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 0 45390 2673/dnsmasq
udp 0 0 10.x.x.x:68 0.0.0.0:* 101 2702 7218/systemd-networ
udp6 22592 0 :::7946 :::* 0 48403 2076/dockerd
但 systemd-resolve 仍在运行:
$ systemd-resolve localhost
localhost: 127.0.0.1%lo
::1%lo
-- Information acquired via protocol DNS in 201.5ms.
-- Data is authenticated: yes
即使在调试时发出请求,systemd-resolved 也没有输出
答案1
我没有任何关于如何使固定systemd-resolved 的存根 DNS 响应器正确,但我可以建议一个解决方法:
nss-resolve
为使用 NSS 的应用程序启用- 告诉应用程序不要使用 NSS 直接联系上游名称服务器
对于 (1),更改您的/etc/nsswitch.conf
:
hosts: files resolve [!UNAVAIL=return] dns
对于 (2),链接/etc/resolv.conf
至/run/systemd/resolve/resolv.conf
。
答案2
如果你确定要使用哪个 DNS 服务器,那么简单的解决方法就是将它们添加到/etc/systemd/resolved.conf
。这对我来说很有效:
sudo vi /etc/systemd/resolved.conf
取消注释该行#DNS=
并添加您首选的 DNS 服务器(以空格分隔)。
DNS=8.8.8.8 8.8.4.4
然后做:
sudo systemctl restart systemd-resolved