如何在 Ubuntu 中禁用 systemd-resolved?

Bas*_*igt 141 dns systemd systemd-resolved

如何在 Ubuntu 17.04 中禁用 systemd-resolved?

禁用它systemctl disable不起作用,该服务似乎已重新启动(由 Networkmanager?)

Bas*_*igt 245

此方法适用于 Ubuntu 版本 17.04 (Zesty)、17.10 (Artful)、18.04 (Bionic)、18.10 (Cosmic)、19.04 (Disco) 和 20.04 (Focal):

禁用并停止 systemd-resolved 服务:

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
Run Code Online (Sandbox Code Playgroud)

然后将以下行放在[main]您的部分中/etc/NetworkManager/NetworkManager.conf

dns=default
Run Code Online (Sandbox Code Playgroud)

删除符号链接 /etc/resolv.conf

rm /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

重启网络管理器

sudo systemctl restart NetworkManager
Run Code Online (Sandbox Code Playgroud)

另请注意,禁用 systemd-resolvd 可能会破坏某些用户在 VPN 中的名称解析。在启动板上看到这个错误(谢谢,文森特)。

  • 谢谢你。SystemD 正在毁掉 Linux,使它从可靠和易于理解的东西变成可以通过魔法工作的东西。 (29认同)
  • 对于 Ubuntu 18.04,只需要运行命令 sudo systemctl disable systemd-resolved.service 和 sudo service systemd-resolved stop。那对我有用。 (12认同)
  • @LifeBoy 我不使用 dnsmasq。我只是不使用任何本地名称服务器,看不到它的价值。 (8认同)
  • 我认为您应该在上面的答案中添加“apt-get install dnsmasq”,一旦 systemd-resolved 被禁用,就应该完成。 (5认同)
  • 这似乎不适用于 Ubuntu 17.04。另外,配置文件是 /etc/NetworkManager/NetworkManager.conf 。当我执行上述操作时,名称解析中断。systemd-resolved 很费时间,现在 VPN DNS 解析对我来说根本无法正常工作。Bug 进度可以在这里找到:https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624317 (4认同)
  • 这个解决方案对我有用,可以解决 Ubuntu 17.10 上的 DNS 解析问题。 (3认同)
  • 刚刚在 17.04 上测试过并且开箱即用(当然还有 dnsmasq 部分) (2认同)
  • 谢谢,在 Ubuntu 18.10 上,我仍然需要在 `/etc/NetworkManager/NetworkManager.conf` 中的 `[main]` 下面添加 `dns=default`。 (2认同)
  • 我们在办公场所的 Ubuntu 18.04 也遇到了问题,DNS 间歇性停止工作。我们继续使用 `sudo systemctl restart systemd-resolved`。您的选项似乎有一些小的变化(`sudo systemctl restart NetworkManager` 而不是 `sudo service network-manager restart`) (2认同)

use*_*436 30

我最近升级到 (k) Ubuntu 17.04,我还偶然发现了对 systemd 的更改。

我认为我的设置相当典型,因为我的宽带 HUB 中有一个 DNS 提供商,这是我网络上所有设备的主要信息来源(我有一些)。

systemd 有一些美,它并不全是坏的,但真正糟糕的是文档、Ubuntu 团队缺乏沟通以及“让我们改变它尽管它对每个人都有好处”的心态。

撕掉一些头发后我的解决方案是编辑/etc/systemd/resolved.conf:

[Resolve]
DNS=192.168.1.254   # <-- change to your router address
#FallbackDNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Domains=lan         # <-- change to your localdomain name (maybe .local)
#LLMNR=yes  <-- I dabbled with this for a while but it doesn't matter
#DNSSEC=no
#Cache=yes
#DNSStubListener=udp
Run Code Online (Sandbox Code Playgroud)

在不明白为什么这行不通之后,我发现还需要将 /etc/resolv.conf 切换到 systemd 提供的那个。在开箱即用的安装中情况并非如此(原因我不知道)。

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

然后不使用本地 DNS 服务器,所有 DNS 请求都发送到我的 HUB。

我认为这是一个比删除并放入其他解决方案更好的解决方案,因为 systemd-resolv 现在是默认设置。

顺便说一句,一个相关的问题是 /etc/nsswitch.conf 已被绝育。

它应该是:

主机:文件 mdns4_minimal dns [NOTFOUND=return] 解析 [!UNAVAIL=return] dns

这是一个令人困惑的配置,因为 [NOTFOUND=return] 意味着处理在那里结束。它之后的条目将永远不会被使用。

  • 如果您正确设置了 netplan,我认为没有必要编辑 resolve.conf。即,netplan 将正确的值写入符号链接文件... PS SYSTEMD SUCKS! (2认同)
  • 我更喜欢把所有解析器-断路器都拿出来。在 10000 台服务器的 5 年生命周期中,合法的解析器更新通常不会超过 2-3 次,但人们不断针对笔记本电脑进行优化。如果公司因这些东西造成的长时间停机而损失数百万美元,对他们来说并不重要,而且对安全关键系统的影响只是被“那些人无论如何都会测试/优化它”所消除。是的。通过删除它。所以没有人死。 (2认同)

BIS*_*ISI 21

如果您使用的是 Ubuntu 18.04 Server(或 Ubuntu 20.04 Server),则这些答案都不适用。user2427436 的那个最接近。

问题是 systemd-resolved 是/运行一个存根解析器,我只需要完全禁用它(根据问题)。我需要这样做,因为 Zimbra 8.8.15 (FOSS) 带有自己的集成解析器(未绑定)。

在我的情况下,我从服务器 18.04 的库存(天真)安装开始,在裸机(实际上是 VM)上的选项最少。

所以这是食谱:

   vi /etc/systemd/resolved.conf
     edit line #DNSStubListener=yes
         to be DNSStubListener=no
   systemctl stop systemd-resolved
   systemctl status systemd-resolved
   rm /etc/resolv.conf
   reboot to test...
Run Code Online (Sandbox Code Playgroud)

这是 /etc/systemd/resolved.conf 现在的样子:

# See resolved.conf(5) for details
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
DNSStubListener=no
Run Code Online (Sandbox Code Playgroud)

这就是全部。

在此之后,请随意安装您想要的任何其他解析器。

  • 最后一个很好的答案......我只需要 Debian Buster/Ubuntu 20.04 LTS 才能与真正的 DNSServer 一起玩......没有简单的方法可以将 systemd-resolved 更新为允许公开它的转发、DNSoverTLS 和缓存到局域网。这正在成为一个严重的问题,即 SO 中 10 年的错误答案仍然优先于正确的最近答案 (3认同)