我使用云中的“虚拟专用服务器”,其中安装了 Ubuntu 20.04。
我注意到 - 偶尔 - 当我重新启动服务器时,我无法 ping 任何东西:
$ ping yahoo.com
ping: yahoo.com: Temporary failure in name resolution
$ resolvectl query yahoo.com
yahoo.com: resolve call failed: No appropriate name servers or networks for name found
据我所知,由于这是 Ubuntu 20.04,/etc/resolv.conf
实际上不再使用,并且systemd
超越了 DNS 的处理。
但是,无论如何,我都不想手动指定 DNS 服务器(就像在 中输入 Google 的 8.8.8.8 的老把戏一样/etc/resolv.conf
)——显然,DNS 在大多数情况下都是有效的:当服务器启动时,它会以某种方式“获得”DNS 服务器。所以,我想重复这个过程,只是我不知道怎么做。
(打个比方,如果我想刷新/获取一台机器的新 IP 地址,我知道该机器应该向 DHCP 服务器询问 - 因此最终很容易查找,为了做到这一点,我应该这样做sudo dhclient -r eth0
)
还要注意,当 DNS 名称解析不起作用时,我没有DNS Servers
在此输出中列出:
$ systemd-resolve --status
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 2 (eth0)
Current Scopes: none
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
我已经看到,为了清除 DNS 缓存,他们(https://unihost.com/help/how-to-clear-the-dns-cache/) 推荐:
sudo /etc/init.d/networking restart
...但是,我宁愿不运行此命令,因为我已通过 连接到服务器ssh
,因此我想象整个网络的重新启动也会终止我的ssh
终端会话,并且可能产生其他意想不到的后果。
所以,我想知道:是否有一个命令可以在会话中运行ssh
,它可以刷新或获取此机器的新 DNS 服务器 - 使用启动时使用的类似机制,当 DNS 实际在此机器上工作时?
答案1
嗯,我刚刚发现https://unix.stackexchange.com/questions/328131/how-to-troubleshoot-dns-with-systemd-resolved其中指出:
... 有时重新启动
sudo systemctl restart systemd-resolved
是一个好主意。
因此,我尝试了这个命令:
sudo systemctl restart systemd-resolved
...事实上,出现在(或,似乎显示相同的报告)DNS Servers
的输出中systemd-resolve --status
resolvectl status
其他可能性:
在 Ubuntu 20.04 上,
systemd-resolved
包含一个本地 DNS 服务器,systemd
它充当存根解析器,并且它应该自动/etc/resolv.conf
使用正确的配置进行编辑。...
该文件包含来自 DHCP 租约的 DNS 服务器,但请注意,您将不会受益于存根解析器缓存功能。
啊,如果 DNS 服务器是从 DHCP 租约中获得的 - 那么sudo dhclient -r eth0
也有可能起作用。
最后,我终于鼓起勇气跑了:
$ sudo /etc/init.d/networking restart
Restarting networking (via systemctl): networking.service.
...事实证明,这并没有破坏我的ssh
会话,所以这也很好。