为什么需要“systemd-resolved”?

Sau*_*nda 4 systemd

我正在将生产服务器从 Ubuntu 14.04 升级到 18.04,并注意到systemd-resolved18.04 中有一个名为运行某种本地 DNS 缓存的东西。[1]

为什么需要这样做?nameserver 1.1.1.1简单地放入或nameserver 8.8.8.8放入/etc/resolv.conf然后就到此为止有什么问题吗?systemd-resolved禁用并恢复到更简单的配置是否安全?

[1] 我注意到只是因为它随机崩溃并导致所有主机名查找失败,从而有效地削弱了我的应用程序 - https://askubuntu.com/questions/1117842/systemd-resolved-crashing-with-failed-to-set-上挂载命名空间无效参数

Ove*_*ind 5

其逻辑是 Ubuntu 有一个内置的 DNS 缓存,它在尝试解析任何内容时首先检查该缓存。\n在此版本中,默认情况下,NetworkManager 不会更新 /etc/resolv.conf,而是\xe2\x80\x99s 调用名为 resolvconf 的应用程序。

\n\n

这种方法:

\n\n
service resolvconf disable-updates\nupdate-rc.d resolvconf disable\nservice resolvconf stop\n
Run Code Online (Sandbox Code Playgroud)\n\n

可能无法通过重新启动。

\n\n

为了解决这个问题,我们可以更加努力:

\n\n
systemctl disable systemd-resolved.service\nsystemctl stop systemd-resolved\n
Run Code Online (Sandbox Code Playgroud)\n\n

将以下行添加到NetworkManager.conf[main]部分:

\n\n
dns=default\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后重新启动网络管理器:

\n\n
service network-manager restart\n
Run Code Online (Sandbox Code Playgroud)\n\n

这应该使系统使用经典的 resolv.conf 。

\n\n

另一种肮脏的伎俩是使服务无法启动,直到您“揭开”它:

\n\n
systemctl mask systemd-resolved\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样做的不安全部分可能是禁用它可能会破坏某些 VPN 场景中的名称解析。因此,如果您想使用 VPN,请确保在摆脱 systemd-resolved 后对其功能进行适当的测试。

\n