/etc/resolv.conf 丢失,预期的填充方式是什么?

/etc/resolv.conf 丢失,预期的填充方式是什么?

我已经使用 Ubuntu Server 21.10 大约 6 个月了,没有发生过任何意外。最近,由于 DNS 解析失败,我的一些服务(包括容器中的服务以及 Docker 守护程序本身)突然遇到问题。

yoshie@vdocker:~$ systemd-resolve --status
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: missing

Link 2 (enp0s4)
Current Scopes: DNS
     Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
   DNS Servers: 8.8.8.8 8.8.4.4
    DNS Domain: localdomain

yoshie@vdocker:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=11.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=10.7 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms

yoshie@vdocker:~$ ping google.com
ping: google.com: Temporary failure in name resolution

我可以看到/etc/resolv.conf确实缺少了。但在网上查找,似乎不建议自己编写此文件。根据本网站resolvconf,该文件可以由、network-manager或 DHCP 客户端写入。

我没有resolvconf或者network-manager没有安装:

yoshie@vdocker:~$ resolvconf
Command 'resolvconf' not found, but can be installed with:
sudo apt install openresolv  # version 3.12.0-1, or
sudo apt install resolvconf  # version 1.84ubuntu1

yoshie@vdocker:~$ sudo service network-manager status
Unit network-manager.service could not be found.

我确实启用了 DHCP,但我的 DHCP 服务器配置了8.8.8.88.8.4.4,我认为systemd-resolve --statusDNS 地址就是从那里获取的。但解析仍然失败。

我尝试在我的 netplan 配置中指定 DNS 服务器,但是这样做导致我的服务器无法访问,因此我不得不通过控制台会话撤消更改。

我开始关注这些说明用于使用 systemd-resolved 配置 DNS,但似乎我需要的一些目录不存在,所以我放弃了该过程,因为我怀疑它不适合 Ubuntu。

我尝试重新启动服务器,但没有效果。

在原始 Ubuntu 21.10 安装中,DNS 解析的预期工作机制是什么?应该在哪个过程中写入 resolv.conf?为什么 DNS 解析过去一直有效,但现在却突然失败了?

答案1

由于您的系统已安装并正在运行 systemd-resolved,因此它将成为此处的首选机制。符号链接 /etc/resolv.conf 可/run/systemd/resolve/resolv.conf直接访问已配置的 DNS 服务器,或/run/systemd/resolve/stub-resolv.conf使用 systemd-resolved 作为本地 DNS 缓存。

Ubuntu 使用 systemd-networkd 进行 IP 配置和 DHCP(通过 netplan,但 netplan 只是一个转换器);networkd 通过 D-Bus 将 DNS 服务器地址上传到 systemd-resolved,并且不使用“resolvconf”工具。


如果系统有静止的IP 配置,那么手动创建具有静态 DNS 服务器地址的 resolv.conf 也是可以的。

相关内容