升级到 Ubuntu 13.10(Saucy)后,如何修复 DNS 解析不起作用的问题

升级到 Ubuntu 13.10(Saucy)后,如何修复 DNS 解析不起作用的问题

升级到 13.10 后,我的 DNS 解析失败。似乎我通过 DHCP(LAN)获得的 DNS 服务器未被使用。

nameserver 8.8.8.8我可以通过添加来暂时解决问题/etc/resolv.conf。但是内网主机仍然无法解析。

点击连接信息网络指示器上的菜单项,主 DNS 和辅助 DNS 设置正确。但我的电脑似乎不使用它们。

我的问题是:

  • 如果需要的话我应该放什么进去resolv.conf
  • 如何找出我的计算机正在查询哪些名称服务器?
  • 下一步该查看哪里来找出为什么不使用 DHCP 接收的名称服务器?

答案1

首先,您需要了解自 Ubuntu 12.04 以来 Ubuntu 中名称解析的工作方式。

Stéphane Graber 去年在博客上发布了一些相关信息这里。最重要的是要知道 Ubuntu Server 和 Ubuntu Desktop 都使用 resolvconf 来管理文件resolv.conf。这意味着您不应再/etc/resolv.conf直接编辑;相反,您应该配置网络接口配置实用程序以向 resolvconf 提供正确的信息。对于 Ubuntu Server,网络接口配置实用程序是伊夫普该文件用于配置/etc/network/interfaces。Ubuntu Desktop 的网络接口配置实用程序是网络管理器。这就是你正在使用的。

NetworkManager 通过以下方式配置网络指示器 > 编辑连接。但是,对于由 DHCP 配置的网络接口,通常不需要手动更改任何设置。通常情况下,(远程)DHCP 服务器会向 NetworkManager 提供本地接口的 IP 地址和要使用的(远程)DNS 名称服务器的地址。NetworkManager 会启动一个转发名称服务器的实例,该实例在 127.0.1.1 处进行本地侦听。此地址 127.0.1.1 被发送到 resolvconf,后者会放入nameserver 127.0.1.1。NetworkManager/etc/resolv.conf还会将 DHCP 提供的 DNS 名称服务器的(远程)IP 地址提供给转发名称服务器。因此,在本地系统上运行的程序会要求解析器将主机名转换为 IP 地址;解析器查询位于 127.0.1.1 的本地转发名称服务器;转发名称服务器查询已告知的远程名称服务器,收到答复并将其发回上链。

NetworkManager 通过 D-Bus 与转发名称服务器进程进行通信。您可以通过运行以下命令查看 NetworkManager 告诉转发名称服务器的内容

nmcli dev list iface eth0 | grep IP4.DNS

根据评论进行更新:
请注意,resolvconf 实际上会将文件写入应该是符号链接/run/resolvconf/resolv.conf的文件。如果不是符号链接,则需要重新创建它。为此,您可以运行/etc/resolv.conf/etc/resolv.conf

sudo dpkg-reconfigure resolvconf

或者

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        

答案2

我按照以下链接的建议进行了更改(禁用 dnsmasq)。现在一切都很顺利! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

打开/etc/NetworkManager/NetworkManager.conf文件。

sudo gedit /etc/NetworkManager/NetworkManager.conf

注释掉以下行:

#dnsmasq deactivated
#dns=dnsmasq

答案3

编辑 2:上一篇帖子被管理员删除了,我发布了我找到的解决方案。对此深表歉意。

编辑:我刚刚找到答案,它就在这个页面上 - 抱歉我的眼花了。我在下面发布了我的发现,扩展了本页中 Richard Lindstedt 的正确答案。我留下了我早先的抱怨,以便提供一些背景信息。请为 Richard 的答案点赞,他值得点赞。

事实上这真的很容易。

只需打开你的接口配置文件 --> sudo vi /etc/network/interfaces

这肯定对 OP 没有帮助,现在对我也没什么帮助。我们不需要静态地址,我们想要使用 DHCP 服务器发送给我们的地址。NetworkManager 似乎可以识别它们,但 Ubuntu 却直接忽略了它们:

# nmcli dev list iface wlan0 | grep IP4.DNS
IP4.DNS[1]:          10.*.*.*
IP4.DNS[2]:          10.*.*.*
IP4.DNS[3]:          8.8.8.8

但...

# dig microsoft.com
; <<>> DiG 9.9.5-4.3-Ubuntu <<>> microsoft.com
;; global options: cmd
;; connection timed out; no servers could be reached

我的 /etc/network/interfaces 是:

auto lo
iface lo inet loopback

这有点奇怪,我希望所有接口都在这里声明(或者我遗漏了什么?)。

简而言之:

  • 我没有弄乱任何文件
  • 我已经跑了dpkg-reconfigure resolvconf
  • 正确的符号链接已到位
  • NetworkManager 从 DHCP 检索正确的 DNS 服务器
  • Ubuntu 不使用此类地址
  • 解决方法是将固定的 8.8.8.8 放在 /etc/network/interfaces 上,但我并不想这样做
  • 我想在任何情况下都使用 DHCP 提供的 DNS 服务器。

没有打开另一个线程,因为这是一个确切的问题,只是我现在使用的是 14.10(但自从从 12.10 升级到 13.04 以来,这个问题一直困扰着我)。

解决方案

最后这句话让我走上了正确的轨道,直到那时我才注意到理查德的回答。

dnsmasq问题似乎与冲突的和软件包有关resolvconf。直到 12.10 版本,dnsmasq仍在使用。从 13.04 版本开始,Ubuntu 似乎切换到 dnsmasq/resolvconf 混合版本,您已安装软件包dnsmasq-baseresolvconf,但没有安装dnsmasq其本身。

我不能说这是否是 13.04 升级脚本中的错误或其他什么,因为在升级(如全新安装)时,会安装 resolvconf,升级 dnsmasq-base 并且(正确地)卸载 dnsmasq。

问题是,升级脚本未能注释掉dns=dnsmasq中的行/etc/NetworkManager/NetworkManager.conf。因此,即使 dnsmasq 守护进程不再存在于系统中,/etc/resolv.conf 仍然期望它存在。

答案4

我正在使用 Pop!OS,但我认为我的解决方案也适用于 Ubuntu 用户。对我来说涉及 2 个问题。

首先,systemd-resolved没有配置使用 mdns。因此,应通过编辑/etc/systemd/resolved.conf 并启用选项 来启用此功能MulticastDNS=yes

更改后必须重新启动 systemd-resolved。

systemctl restart systemd-resolved.service

然后检查配置是否已更新 systemd-resolve --status

应该

Global
       LLMNR setting: no
MulticastDNS setting: yes

但是如果你检查特定的接口,它将禁用多播。

      Current Scopes: none
DefaultRoute setting: no
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no

问题是,无法从(至少我的) UI 网络接口配置器启用 MulticastDNS,因此您必须执行nmcli命令行配置。

nmcli connection edit enp4s0

您对属性 connection.mdns 感兴趣,您可以通过以下方式获取更多信息

describe connection.mdns   

所以 set connection.mdns reslove(或者你喜欢什么都可以)

那么 save persistent quit 现在 mdns 应该可以运行了

相关内容