![安装 resolvconf](https://linux22.com/image/1006323/%E5%AE%89%E8%A3%85%20resolvconf.png)
我最近升级到了 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