如何在 Ubuntu Server 20.04 上刷新/获取新的 DNS 服务器?

如何在 Ubuntu Server 20.04 上刷新/获取新的 DNS 服务器?

我使用云中的“虚拟专用服务器”,其中安装了 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 --statusresolvectl 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会话,所以这也很好。

相关内容