我在使用 Ubuntu 18.04.1 Server 时遇到了一个非常奇怪的问题,其中默认解析器systemd-resolved
无法解析某些特定的域名。
它可靠地失败的是stephenreescarter.net
:
valorin@wp:~$ dig stephenreescarter.net
; <<>> DiG 9.11.3-1ubuntu1.3-Ubuntu <<>> stephenreescarter.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7015
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;stephenreescarter.net. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Jan 27 20:01:05 UTC 2019
;; MSG SIZE rcvd: 50
但是域名本身没有问题,并且在其他地方都可以使用:
valorin@wp:~$ dig stephenreescarter.net @1.1.1.1
; <<>> DiG 9.11.3-1ubuntu1.3-Ubuntu <<>> stephenreescarter.net @1.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45539
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;stephenreescarter.net. IN A
;; ANSWER SECTION:
stephenreescarter.net. 228 IN A 104.28.2.92
stephenreescarter.net. 228 IN A 104.28.3.92
;; Query time: 1 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sun Jan 27 20:00:52 UTC 2019
;; MSG SIZE rcvd: 82
并且其他域名运行正常,因此这不仅仅是服务器无法解决所有问题的情况:
valorin@wp:~$ dig google.com
; <<>> DiG 9.11.3-1ubuntu1.3-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24208
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 148 IN A 74.125.24.100
google.com. 148 IN A 74.125.24.101
google.com. 148 IN A 74.125.24.102
google.com. 148 IN A 74.125.24.113
google.com. 148 IN A 74.125.24.138
google.com. 148 IN A 74.125.24.139
;; Query time: 2 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Jan 27 20:00:57 UTC 2019
;; MSG SIZE rcvd: 135
重启系统有时解决了问题,同样如此sudo systemd-resolve --flush-caches
。但是这些方法并不总是有效,有时需要多次尝试才能开始起作用。
我可以在 SGP1 区域中新创建的 Ubuntu 18.04.1 DigitalOcean droplet 上重现此问题。
在所有其他方面,systemd-resolve
它似乎都有效,所以我不知道发生了什么。
更新-调试信息
valorin@wp:~$ ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Oct 3 16:43 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
valorin@wp:~$ cat /run/resolvconf/resolv.conf
cat: /run/resolvconf/resolv.conf: No such file or directory
1 valorin@wp:~$ cat /run/systemd/resolve/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 67.207.67.2
nameserver 67.207.67.3
答案1
我认为你的/etc/resolv.conf
符号链接是错误的。
目前您展示的是...
~$ ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Oct 3 16:43 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
我认为它应该指向resolv.conf
,而不是stub-resolv.conf
。要更改它,我们将这样做...
sudo rm -i /etc/resolv.conf
# 删除旧的符号链接
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
# 重新创建符号链接
看看是否有帮助。
答案2
18.04 的默认安装似乎缺少 libnss-resolve 包,该包的安装会修复 /etc/nsswitch.conf 文件,因此 hosts 行如下所示
hosts: files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns myhostname
如果您扫描 /var/log/syslog 文件,您可能会看到如下行:
Jan 27 09:33:15 leno systemd-resolved[931]: Using degraded feature set (UDP) for DNS server 192.168.1.1.
Jan 27 10:06:12 leno systemd-resolved[931]: Grace period over, resuming full feature set (UDP+EDNS0) for DNS server 192.168.1.1.
这些表明有时您正在以 UDP 上的精简功能集运行,并且大量输出可能会溢出通常的缓冲区。请参阅启动板错误 1804487 和 1805027。其他解决方法(例如将 /etc/resolv.conf 链接从 /run/systemd/resolv/stub-resolv.conf 重定向到 .../resolv.conf 文件)基本上将 systemd 排除在循环之外,直接提供名称服务器。
您已测试使用 1.1.1.1 进行解析,但未测试使用 67... ip。请尝试:
dig stephenreescarter.net @67.207.67.2
如果失败,则问题不在于使用该名称服务器的 systemd-resolvd。该名称服务器对我来说不起作用,但可能不是公开的。