16.10 解析DNS失败

awe*_*ell 36 networking dns resolv.conf systemd 16.10

将我的 16.04 安装升级到 16.10 后,DNS 出现问题。

首先,我在连接到 WiFi 时遇到了几次问题,而它在以太网上工作。现在它似乎也适用于 WiFi。不知道为什么,如果它与我现在面临的问题有任何关系:

当使用Cisco Anyconnect VPN连接到 VPN 主机时,它会在 '/etc/resolv.conf' 中添加一行。我知道 Ubuntu 现在正在使用systemd-resolve,并且手册页说有三种不同的模式来处理 /etc/resolv.conf。我的 /etc/resolv.conf 不是符号链接,也没有将 127.0.0.53 列为 DNS 服务器,所以据我所知 systemd-resolved 应该“读取它以获取 DNS 配置数据”。不过,它似乎并不在意。

奇怪的事情(对我来说)是dig host.customer.tld,返回一个很好的答案,其中包含一个显示所请求主机的 ip 的 ANSWER SECTION,它指的是由 vpn 客户端添加到 /etc/resolv.conf 的 dns 服务器作为服务器。当 vpn 连接被禁用时,我没有得到答复。即dig 读取 /etc/resolv.conf

另一方面,浏览器无法访问 /etc/resolv.conf,并且无法解析主机名。顺便说一下,ping/curl 也不是。

nmcli

我找到了一个相关的帖子,并尝试运行

nmcli device show <interfacename> | grep IP4.DNS
Run Code Online (Sandbox Code Playgroud)

但它没有列出 cscotun0 设备的 dns。(不过,它在 16.04 中也没有。)此外,nmcli 将我的 dhcp 服务器(我的路由器)列为我的 eth/wlan 连接的 IP4.DNS 主机。使用dig @192.168.0.1 xxx任何公共领域工作正常。

配置

我的 /run/systemd/resolve/resolv.conf 中还列出了一些其他 DNS 服务器:

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
# Too many DNS servers configured, the following entries may be ignored.
nameserver 2001:4860:4860::8844
Run Code Online (Sandbox Code Playgroud)

这些不是由我的 DHCP 服务器提供的。文件 /etc/systemd/resolved.conf 仅包含注释行,部分标题除外:

[Resolve]
#DNS=
#FallbackDNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Run Code Online (Sandbox Code Playgroud)

对于该名男子页resolved.conf说,

DNS = 用作系统 DNS 服务器的 IPv4 和 IPv6 地址的空格分隔列表。... 出于兼容性原因,如果未指定此设置,则使用 /etc/resolv.conf 中列出的 DNS 服务器,如果该文件存在并且其中配置了任何服务器。此设置默认为空列表。

FallbackDNS = 用作后备 DNS 服务器的 IPv4 和 IPv6 地址的空格分隔列表。从 systemd-networkd.service(8) 获得的任何每个链接的 DNS 服务器都优先于这个设置,任何通过 DNS= 以上或 /etc/resolv.conf 设置的服务器也是如此。因此,仅在不知道其他 DNS 服务器信息时才使用此设置。如果未给出此选项,则使用已编译的 DNS 服务器列表

在我的情况下,似乎后备最终在 /run/systemd/resolve/resolv.conf 中。

编辑:我不确定是什么问题,老实说我仍然不知道这是如何工作的,但至少在我的情况下,解决方案是禁用该systemd-resolved服务。我认为该服务是必需的,它是为所有本地应用程序提供 DNS 服务的组件,但显然还有其他东西在做这项工作。

krl*_*mlr 36

当我遵循ubuntuforums 上的建议时,OpenVPN 连接期间的 DNS 行为立即得到改善:

  1. /etc/NetworkManager/NetworkManager.conf在具有 root 权限的编辑器中打开。
  2. 删除(或用散列注释掉#)读取的行dns=dnsmasq
  3. 通过以下方式重新启动 NetworkManager sudo service NetworkManager restart


Vin*_*ris 15

我遇到了类似的问题,例如添加额外的 USB wifi 加密狗。首先,我如上所述在网络管理器中禁用了 dnsmasq,然后停止了 dnsmasq(服务 dnsmasq 停止)

我注意到在 VPN 连接期间解析中断时,路由表看起来略有不同(路由命令的输出)。网关的名称是 DD-WRT,如果它不起作用,则在它起作用时简单地称为“网关”。这个的输出没有改变:

nmcli device show wlp1s0 | grep IP4.DNS
Run Code Online (Sandbox Code Playgroud)

它一直显示我的路由器IP。让它工作一段时间的解决方法是重新启动 systemd-resolvd:

sudo service systemd-resolved restart
Run Code Online (Sandbox Code Playgroud)

由于 dnsmasq 不在等式之外,它要么是 systemd-resolvd 是问题的原因,要么是任何更改路由表的东西。

所以这是我看到的唯一区别:

ubuntu@ubuntu-Lenovo-Yoga-2-11:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    601    0        0 
Run Code Online (Sandbox Code Playgroud)

哪个有效。当它不起作用时:

ubuntu@ubuntu-Lenovo-Yoga-2-11:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         DD-WRT          0.0.0.0         UG    601    0        0 wlp1s0
Run Code Online (Sandbox Code Playgroud)

和同名VPN线路上的区别:

vpn-dns.name gateway         255.255.255.255 UGH   0      0        0 wlp1s0
Run Code Online (Sandbox Code Playgroud)

谁知道什么会影响路由表?如果我们能够识别这一点以便提交错误报告,那就太好了。我对追求所有这些错误感到非常厌烦和厌倦,但我想修复它们,这样未来的用户和我们都会很高兴:)。

[更新] 似乎停止 systemd-resolved 可能会解决此问题,并且不会对其他内容产生负面影响。你可以尝试一下,让它知道它是否会破坏东西。我在调试中运行 systemd-resolvd 时看到它坏了:

Removing scope on link wlp1s0, protocol llmnr, family AF_INET
Removing scope on link wlp1s0, protocol llmnr, family AF_INET6
Removing scope on link *, protocol dns, family *
Run Code Online (Sandbox Code Playgroud)

要禁用:

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

我用建议更新了 Ubuntu 报告。[/update] 添加:注意:错误报告:https : //bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624317 针对某些问题提供了 17.04 的补丁。请检查错误报告,并在可能的情况下测试补丁。谢谢!

[更新]

请检查上述错误报告,该问题似乎已在 17.10 中解决,并且也可以使用简单的命令禁用 DNS 泄漏。

[/更新]