DNS设置为systemd的127.0.0.53-如何永久更改?


38

我最近升级到了17.10。当我尝试浏览到网站或对域执行ping操作时,无法显示该站点无法解析。

network-admin显示的内容/etc/resolv.confnameserver: 127.0.0.53

如果我将其更改为8.8.8.8或208.67.222.222,则一切正常。直到我重新启动。

重新启动或恢复后,名称服务器将重置为127.0.0.53。

如何将域名服务器永久设置为有效的名称服务器?


对于系统风扇,如果我跑步systemd-resolve --status我会得到

Link 3 (wlo1)
      Current Scopes: LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

如果我按照此问题的建议进行操作-DNS在重新启动后会保持重置状态。Ubuntu 17.10 -DNS仍然无法解析。


systemctl stop systemd-resolved并且systemctl mask systemd-resolved应该做到这一点:)
Shayan

Answers:


28

您可以安装软件包resolvconf,该软件包将修改/etc/resolv.conf系统引导时建立的方式。

sudo apt install resolvconf

然后,您可以创建或修改文件/etc/resolvconf/resolv.conf.d/tail。如果在该文件中放入line nameserver 8.8.8.8,则该行将/run/resolvconf/resolv.conf在启动时末尾添加。 /etc/resolv.conf现在将是指向该文件的符号链接。


4
这有效-谢谢!您是否知道有没有办法让127.0.0.53自行工作?
特伦斯·伊甸园

1
我对此事还很陌生。在过去的几周内,打开/关闭vpn时一直试图摆脱dns问题。你可以试试看sudo dpkg-reconfigure resolvconf。我最近尝试了此操作,清除了文件尾部,起初看来似乎可行。
oscar1919

@TerenceEden,如果您希望使127.0.0.53自行工作(应该如此),请看一下我的答案:askubuntu.com/a/1083843/281191
intelfx

9

正确的解决办法是要修复systemd分辨,而不是试图用断头台来治偏头痛。

如果使用正确,它确实是一个不错的工具。

从您的systemd-resolve --status输出来看...

Link 3 (wlo1)
      Current Scopes: LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

...您的网络管理器工具未将每个接口的DNS配置传递给systemd-resolved。

例如,如果/etc/resolv.conf是指向内部/run/systemd/resolve或的符号链接,则NetworkManager的最新版本将自动执行此操作/usr/lib/systemd/resolv.conf。另外,systemd-resolved的最新版本会通过安装以下版本来尝试与历史resolvconf接口兼容:resolvconf与systemd-resolved对话二进制文件,。

虽然最好使用这两种解决方案中的任何一种,但是如果您正在寻找一种快速且肮脏的解决方案,则只需将systemd-resolved配置为全局使用DNS服务器:

$ cat /etc/systemd/resolved.conf
<...>
[Resolve]
DNS=8.8.8.8 8.8.4.4
<...>

然后重新启动systemd-resolved.service或重新启动。


至少对我来说这个答案不工作,使用Ubuntu 18.04,变更后的“DNS”条目保持它的USINT 127.0.0.53
安德烈·M.法里亚

1
@AndréM.Faria了解解决方案的工作原理。127.0.0.53是本地缓存存根解析器的地址。它将DNS请求转发到您指定的任何上游DNS服务器。
intelfx

有时您知道一些东西而只是忽略它,是的,您是对的。
安德烈·M.法里亚

1
还要注意的是,默认情况下会systemd-resolved缓存DNS响应。尽管有时这可能很有用,但在某些情况下可能会引起问题。cache=yes在答案的配置文件中取消注释该行,并将其设置为no
Quentin Skousen

究竟是什么导致/etc/resolve.conf(或实际上是, /run/resolvconf/resolv.conf前者指向)更新?无需进行重新引导就可以知道如何进行测试。我只能说重启systemd-resolved.service似乎并没有解决问题
bbarker

8

我使用Lubuntu和Kubuntu 18.04。我可以通过2个步骤克服DNS问题:

第一步:安装unbound并设置它来替换systemd-resolved格雷Ç显示在这里

sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable unbound-resolvconf
sudo systemctl enable unbound

重启

以root身份打开文件 /etc/NetworkManager/NetworkManager.conf

sudo leafpad /etc/NetworkManager/NetworkManager.conf在Lubuntu 18.04或Kubuntu 18.04中SUDO_EDITOR=kate sudoedit /etc/NetworkManager/NetworkManager.conf

在下面[main]放这行:

dns=unbound

再次重启

第二步:如果重新启动后问题仍然没有解决,就我而言,请以root身份启动文件管理器,转到/etc,删除resolv.conf并创建一个新文件resolv.conf。将其保留为空,然后重新启动操作系统。就我而言,重启后问题消失了。

在Kubuntu 18.04中,您不能以root用户身份启动Dolphin,因此您可以先从其中启动/etc并打开终端,然后键入sudo su并按Enter以将其用作root用户,然后resolv.conf使用命令进行删除rm resolv.conf。然后,您可以在桌面上创建一个新的空文件,为其命名resolv.conf并从那里打开一个终端。使用sudo su命令输入终端根模式,然后复制到新的resolv.conf从桌面到/etc与命令cp resolv.conf /etc

我必须补充一点,在安装之前,我没有尝试执行第二步unbound,因此下次我将这样做,只是看它是否足够。


为什么不以root用户身份对其进行编辑并删除内容呢?
Ballie

@Ballie我最初尝试过此方法,但没有帮助。我认为,原始的resolv.conffrom /etc也显示为某种捷径,这是不正常的。这就是为什么我决定删除它并通过创建一个新的空文件并命名来重新创建它的原因resolv.conf。而且有效。因此,我在上面写道,下次必须重新安装操作系统时,我将首先尝试执行此操作,而无需执行“第一步”,以查看是否足够。但原来resolv.conf/etc需要移除并重新反正-这个我相信。
КалоянГрънчаров

我刚刚禁用了systemd-resolved.service并删除了resolv.conf的链接并手动创建了一个链接,它起作用了!
安德烈·M.法里亚

8

systemd范例中工作将DNS添加到链接/设备

使用Ubuntu 17.10+添加*.network文件:

sudo nano /lib/systemd/network/100-somecustom.network

100-somecustom.network(100可以是任意数字,优先级为,并且需要.network文件扩展名):

[Match]
Name=wlo1 # the device name here

[Network] # add multiple DNS 
DNS=8.8.8.8
DNS=208.67.222.222

然后重新启动:

sudo service systemd-networkd restart

另请注意:

netplan apply

然后检查:

systemd-resolve --status wlo1

从信息页面info systemd.network

/etc/systemd/network插入式“.D”目录可以被 放置在/ lib / systemd /网络或/运行/ systemd /网络目录。/ etc中的嵌入式文件优先于/ run中的文件,后者又优先于/ lib中的文件。这些目录中任何一个下的直接插入文件都优先于主netdev文件,无论其位于何处。(当然,由于/ run是临时的,而/ usr / lib是针对供应商的,因此不太可能在这两个位置中的任何一个中都使用插件。)

另一种方法禁止DNSStubListener使用dnsmasq

sudo nano /etc/systemd/resolved.conf

#
DNSStubListener=false

有关:


奇怪的是,您说DNSStubListener = false,但是实际注释的配置是DNSStubListener = yes,通常,“ yes”值的取反是“ no”,而不是“ false”,在“ false”的情况下通常是“真正”。
安德烈·M.法里亚

您创建扩展名为.network的文件的答案无效。
安德烈·M.法里亚

2

这就是我在接口配置上更改dns记录的方式。

$ vi /etc/netplan/50-cloud-init.yaml

更改名称服务器地址,以前是.4,然后将其更改为.3:

...
            nameservers:
                addresses:
                - 192.168.1.3
...

保存配置,然后应用配置:

$ sudo netplan apply

之后,重新启动resolvectl服务。

$ sudo systemctl restart systemd-resolved.service

注意:我确实重新启动了服务器,所做的更改仍然完好无损。我使用resolvctl dns命令来验证dns记录。


这实际上是正确的答案。我很惊讶这不是被接受的。
Toumal

0

NordVPN遇到了一些问题,因此决定对此进行补充。

结果:
NordVPN /run/systemd/resolve/resolv.conf在连接时设置DNS设置。断开连接时,
NordVPN会删除所有DNS设置/run/systemd/resolve/resolv.conf
这将导致DNS服务器不再工作(因为没有一组)。

系统需要重新启动才能将其设置回所有值。标准重启服务(sudo systemctl restart systemd-resolved.service)不起作用。

解决此问题的解决方案:

sudo apt install resolvconf

转到/etc/resolvconf/resolv.conf.d/

cd /etc/resolvconf/resolv.conf.d/
sudo nano tail

添加名称服务器

nameserver 1.1.1.1
nameserver 1.0.0.1

检查以下地方可能已设置的名称服务器:

/run/resolvconf/interface/original.resolvconf
/run/resolvconf/interface/systemd-resolved
/etc/resolvconf/resolv.conf.d/tail
/etc/resolvconf/resolv.conf.d/head
/etc/systemd/resolved.conf
/run/systemd/resolve/resolv.conf
/run/systemd/resolve/stub-resolv.conf

测试哪些DNS服务器与以下服务器一起使用:

nslookup google.com

Server:         1.1.1.1
Address:        1.1.1.1#53

0

也许有点晚,但是我遇到了这个问题。我确实必须承认,我之前一直通过cli而不是通过内置的networkmanager手动配置网络设置。我运行ubuntu 18.04。

因此,在我禁用然后重新启用systemd.resolved.service之后,这种随机丢失DNS配置的行为为我解决了。

systemctl disable systemd.resolved.service
reboot

重新启动后:

systemctl enable systemd.resolved.service
reboot

我是一个相对较新的Linux用户,因此必须有人可以解释这种方式对我有用的方式和原因,但是似乎值得一提的是它是否可以帮助他人。


真令人失望,但是您必须在中间进行一些操作才能真正解决问题。您在此处建议的操作只能使系统保持原样。
tishma

-1

使用dhcp时,名称解析可以在Ubuntu中按预期工作。当您想静态化时,问题就开始了。cat /etc/resolv.conf将显示您的dns是127.0.0.53,而不是您/etc/netplan/.yaml文件中的dns 。要解决此问题,您需要删除/etc/resolve.conf链接并创建一个新的指向/run/resolve/resolve.conf


请编辑您的答案并修复某些格式...
Yufenyuy Veyeh Dider '18

-2

这需要一些玩耍。更新设置后,我重新启动了。使用:

ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

/etc/systemd/resolved.conf
DNS=8.8.8.8
Cache=no

System resolved failed
systemctl stop systemd-resolved
systemctl disable systemd-resolved

当注释掉“请求”时

# domain-name, domain-name-servers, domain-search, host-name,

将此行添加到您的/etc/dhcp/dhclient.conf

 supersede domain-name "cwillenterprise.com";

编辑配置文件并添加条目。额外的将不会取代。

将条目添加到 /etc/resolvconf/resolv.conf.d/tail

nameserver 8.8.8.8
search "cwillenterprise.com"

运行以实施更改

resolvconf -u

1
欢迎来到Ask Ubuntu!请编辑您的答案以对应该在文件或终端中输入的代码使用代码格式。不要#在代码前加上“注释”,这意味着Markdown中的标头。发送之前,请务必先检查帖子的预览。
Melebius
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.