安装 resolvconf

安装 resolvconf

我最近升级到了 17.10。当我尝试浏览网站或 ping 域名时,系统提示无法解析该网站,因此失败。

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

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

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

我如何永久将名称服务器设置为可用的名称吗?


对于 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 不断重置。Ubuntu 17.10- DNS 仍然无法解析。

答案1

您可以安装 resolvconf 包,它将修改/etc/resolv.conf系统启动时建立的方式。

sudo apt install resolvconf

然后,您可以创建或修改文件/etc/resolvconf/resolv.conf.d/tail。如果您在此文件中输入一行,则此行将在启动 nameserver 8.8.8.8时添加到末尾。现在将成为此文件的符号链接。/run/resolvconf/resolv.conf/etc/resolv.conf

附言:

在我发表答案近两年后,我偶然发现了https://bugs.launchpad.net/ubuntu/+source/ppp/+bug/1778946这恰恰解释了为什么仅仅安装resolvconf就能解决我当时遇到的 DNS 问题。我觉得我必须在这里分享这一点。

虽然我的回答正确地解决了这个问题,但确实应该添加一个警告,如果您想要/需要这样做,那么可能是其他问题。@intelfx 当时已经说过了,127.0.0.53 应该可以自行工作。

根据该错误报告,PPTP VPN 断开后,resolv.conf会使用错误的访问权限恢复。 ping ubuntu.com不起作用,sudo ping ubuntu.com起作用。安装resolvconf解决了这个问题,因为它接管了resolv.conf,并使用正确的权限恢复了它。systemd-resolve在这种情况下,更改设置不是解决方案,因为错误在ppp。但另一种可能更简单的解决方案是sudo chmod a+r /etc/resolv.conf在 VPN 断开后。这可以通过在 /etc/NetworkManager/dispatcher.d 中放置一个可执行脚本来自动完成,其内容如下:

#!/bin/sh
if [[ "$1"="ppp0" && "$2"="vpn-down" ]]; then  
    /bin/chmod a+r /etc/resolv.conf
fi

在所有情况下,的内容resolv.conf都不会改变。是的,我知道由于安全问题必须避免使用 PPTP,但当时我认为这对 Ubuntu 新手来说是一个很好的练习。我想象它会开箱即用。我几乎不知道它会让我头疼,正如 @intelfx 所诊断的那样。

答案2

正确的解决方案是修复 systemd-resolved,而不是尝试用断头台来治疗偏头痛。

如果使用得当,它确实是一个很好的工具。

根据你的输出来判断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。

NetworkManager 的最新版本将检测是否/etc/resolv.conf是指向已解析生成文件的符号链接(/run/systemd/resolve/*.conf/usr/lib/systemd/resolv.conf),如果是,则直接与已解析文件通信。

resolvconf或者,systemd-resolved 的最新版本尝试通过安装执行正确操作的二进制文件来与历史 resolvconf 接口兼容。

虽然这两种解决方案都是首选,但如果您正在寻找一种快速而粗糙的解决方案,您只需配置 systemd-resolved 即可全局使用您的 DNS 服务器:

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

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

答案3

在范例中工作,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/network 或 /run/systemd/network 中目录。/etc 中的插入文件优先于 /run 中的文件,而 /run 中的文件又优先于 /lib 中的文件。这些目录中的插入文件优先于主 netdev 文件(无论位于何处)。(当然,由于 /run 是临时的,而 /usr/lib 是用于供应商的,因此不太可能在这两个地方使用插入文件。)

另一种方法是禁用DNSStubListener使用dnsmasq

sudo nano /etc/systemd/resolved.conf

#
DNSStubListener=false

有关的:

答案4

我使用的是 Ubuntu 18.04 LTS。我不知道我的操作系统怎么会突然出现这个问题,而我的 DNS 已经运行了好几个月了。这是我的解决方案:

安装 resolvconf

$ sudo apt install resolvconf

找到 的源头/etc/resolv.conf

$ ls -al /etc/resolv.conf 显示这/etc/resolv.conf/run/resolvconf/resolv.conf

我发现:该文件/run/resolvconf/resolv.conf由以下部分组成:

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

$ cat /run/resolvconf/interface/systemd-resolved显示nameserver 127.0.0.53,重启后将会重置。

添加 DNS

看来nameserver <my DNS>需要在前面nameserver 127.0.0.53才能工作。

所以我nameserver <my DNS>在末尾添加了/etc/resolvconf/resolv.conf.d/head

更新 resolvconf

$ sudo resolvconf -u

相关内容