如何在Ubuntu中禁用systemd-resolved?


86

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

禁用systemctl disable无效,该服务似乎已重新启动(通过Networkmanager?)


10
systemd-resolved不仅很大,而且还不总是按客户端配置中指定dns服务器的顺序尝试解析,这也打破了dns解析的工作方式。当服务器无法解析域时,列表中的下一个将移至顶部(Poettering称为“内存”)。有关详细信息,请参见此线程
LifeBoy

7
它还绕过了iptables规则,这是一个糟糕的主意。
Spongman '18 -10-23

Answers:


149

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

禁用并停止systemd解析的服务:

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved

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

dns=default

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

rm /etc/resolv.conf

重新启动NetworkManager

sudo systemctl restart NetworkManager

另请注意,禁用systemd-resolvd可能会破坏某些用户在VPN中的名称解析。请在启动板上查看此错误(感谢Vincent)。


4
这似乎在Ubuntu 17.04上不起作用。另外,配置文件是/etc/NetworkManager/NetworkManager.conf。执行上述操作时,名称解析会中断。systemd-resolved花费了大量时间,现在VPN DNS解析对我来说根本无法正常工作。Bug的进展可以在这里找到:bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624317
Vincent Gerris

5
我认为您应该添加到以上答案中,即一旦禁用systemd-resolved,就应该执行“ apt-get install dnsmasq”。
LifeBoy

5
@LifeBoy我不使用dnsmasq。我只是不使用任何本地名称服务器,看不到它的值。
巴斯蒂安·福伊特

9
对于Ubuntu 18.04,所需要做的就是运行命令sudo systemctl disable systemd-resolved.service和sudo service systemd-resolved stop。那对我有用。
丹尼尔·伊格尔

12
谢谢。SystemD破坏了Linux,使其从可靠且易于理解的功能转变为通过魔术起作用的功能。
Forbesmyester

18

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

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

systemd有一些美,并不是全部都不好,但是真正不好的是文档,Ubuntu团队缺乏沟通以及gung-ho的心态,“尽管改变它,但只要改变它”。

对我来说,解决办法是编辑/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

在不理解为什么这种方法行不通之后,我发现还需要将/etc/resolv.conf切换到systemd提供的那个。即装即用情况并非如此(出于我未知的原因)。

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

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

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

另一个相关的问题是/etc/nsswitch.conf已被绝密。

它应显示为:

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

这是一个令人困惑的配置,因为[NOTFOUND = return]表示处理在此结束。后面的条目将永远不会被使用。


1
然后我每次连接到新的WIFI时都必须在配置中更改路由器地址吗?你认真吗?-1
巴斯蒂安·福伊特

我没意识到你正在漫游。如果是,则将配置项保留为注释状态。然后,您应该获得一个/etc/resolv.conf文件,内容为:名称服务器8.8.8.8名称服务器8.8.4.4
user2427436

1
我认为,如果正确设置了netplan,则无需编辑resolve.conf。也就是说,netplan将正确的值写入符号链接的文件中……PS系统吸!
g33kz0r

3

如果您的VPN出现泄漏问题,并且不知道如何设置systemd(像我一样),则可以按照第一个答案中所述的方式将其删除,但不要添加该dns=default行,因为它将激活名称服务器127.0 .0.1。要将路由器设置为dns,请在文件/etc/resolvconf/resolv.conf.d/ 夹中创建“ tail” 文件,并添加以下行nameserser 192.168.1.1

ln -sf /var/run/resolved/resolv.conf /etc/resolv.conf如果您弄乱了此文件,该怎么办。


1
真?对我来说,它的工作原理与我的回答完全相同。绝对不使用名称服务器127.0.0.1。我还认为将您的域名服务器的IP硬编码到配置文件中不是很方便。至少我经常切换无线网络,每个无线网络都有一个不同的名称服务器
Bastian Voigt

是的'默认'启用127.0.0.1作为dns
Yvain
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.