![如何正确禁用 systemd-resolved](https://linux22.com/image/1169517/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E7%A6%81%E7%94%A8%20systemd-resolved.png)
在我的 Ubuntu Eoan 笔记本电脑上,我发现 systemd-resolved 偶尔会莫名其妙地无法响应对 127.0.0.53 的本地 DNS 请求,即使对我路由器的 DNS 服务器的请求仍然有效,所以我想保持简单并切断 systemd-resolved。
(具体来说,在 WiFi 断开连接然后重新连接后,/etc/resolv.conf 中 systemd-resolved 提供的位于 127.0.0.53 的本地 DNS 服务器将停止响应请求,直到我手动“systemctl restart systemd-resolved”。)
我正在使用带有 DHCP 的无线网络和 wicd,通常使用 wicd-gtk 进行控制。如何正确配置我的系统,以便在使用 DHCP 的 WiFi 连接下,我将使用 DHCP 分配的 DNS 服务器?我已禁用 systemd-resolved 服务,但这似乎不够。它只留下了一个 /etc/resolv.conf 符号链接到不存在的 /run/systemd/resolve/stub-resolv.conf。即使我删除它,当我重新连接到 WiFi 时,NetworkManager 也会创建一个指向无用的 127.0.0.53 的 /etc/resolv.conf 文件。即使我删除该文件并停止 NetworkManager,然后重新连接到 WiFi,我也不会得到 /etc/resolv.conf,因此 DNS 查找没有可用的服务器。
除了在 WiFi DHCP 下设置本地 IP 地址、子网和网关之外,如何正确配置 wicd 或系统的网络设置以正常设置 DNS 服务器?我通常使用 wicd-gtk 手动选择要连接的 WiFi。此外,WiFi 也没有问题,因为其他设备也没有问题,以前运行 systemd-resolved 时有时有效,有时无效。此外,我试图避免使用 NetworkManager,因为我使用的是没有系统托盘的 xmonad,所以我无法轻松使用 NetworkManager 系统托盘 GUI。
在我连接到 WiFi 后,系统日志中有一件事对我来说非常可疑,那就是 dhclient 收到 DHCPACK 后 systemd-resolved 没有重新启动。systemd-resolved 在那之前就启动了,当时大概网络还没有准备好。所以,似乎 /etc/dhcp/dhclient-enter-hooks.d/resolved 没有按预期工作。
编辑:似乎通过禁用 systemd-resolved,我遇到了一个已知的错误:https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1745463
答案1
要禁用 systemd-resolved:
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved
删除符号链接 /etc/resolv.conf,以便您可以编辑它。
sudo rm /etc/resolv.conf
创建一个新的 resolv.conf 文件,并输入您想要使用的 DNS 服务器。
如果您使用 dhclient,它将不会使用服务器发送的值(或您自己的客户端配置中的 supersede/prepend 指令!!!)更新 /etc/resolv.conf除非您删除以下文件:
sudo rm /etc/dhcp/dhclient-enter-hooks.d/resolved
我已经尝试过,可以确认它在 Ubuntu Focal 中有效。请注意,这涵盖了单独使用 dhclient 和 ifupdown 的情况,而不是与 Netplan、NetworkManager、wicd 甚至 resolvconf 一起使用的情况。所有这些配置都需要不同的步骤才能在没有 systemd-resolved 的情况下或禁用 systemd 网络堆栈的其他组件时工作。
参考:
答案2
我认为可以在这里找到正确答案: https://www.turek.dev/posts/disable-systemd-resolved-cleanly/
总之,要干净地禁用 systemd-resolved 的 DNS 存根,请不要禁用 systemd-resolved 服务,而是正确配置它并将DNSStubListener=no
/run/systemd/resolve/resolv.conf 符号链接到 /etc/resolv.conf。
答案3
这个偶尔出现的问题听起来像是错误 1396379、1805027 和 1804487。我发现解决偶尔出现的 18.04 名称解析失败问题的方法是添加 libnss-resolve 软件包。这会将 /etc/nsswitch.conf 主机行更改为:
hosts: files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns myhostname
默认安装无需进行其他更改。将 /etc/resolv.conf 链接保留为默认的 stub-resolv.conf。