如何修复升级到Ubuntu 13.10后无效的DNS解析(Saucy)

升级到13.10后,我的DNS解析失败。 看来我没有使用DHCP(LAN)获得的DNS服务器。

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

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

所以我的问题:

  • 如果有的话,我应该把什么内容放到resolv.conf
  • 如何找出我的计算机正在查询哪些名称服务器?
  • 接下来要查看,为什么不使用DHCP接收的名称服务器?

首先,您需要了解一下自Ubuntu 12.04以来Ubuntu中名称解析的工作原理。

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

NetworkManager通过网络指示器>编辑连接进行配置 。 但是,对于由DHCP配置的网络接口,通常无需手动更改任何设置。 通常情况下,(远程)DHCP服务器向NetworkManager提供本地接口的IP地址和要使用的(远程)DNS名称服务器的地址。 NetworkManager启动转发名称服务器的实例,该实例在127.0.1.1本地侦听。 该地址127.0.1.1被发送到resolvconf,它将nameserver 127.0.1.1放在/etc/resolv.conf 。 NetworkManager还将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 

我在下面的链接中建议了更改(禁用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 

编辑2:以前的post被适度删除,我发布了我发现的解决方案。 对不起。

编辑:我刚刚找到答案,就在这个页面上 – 抱歉我的miopy。 我在下面发布了我的发现,扩展了Richard Lindstedt在本页中找到的正确答案。 我离开了我的早期隆隆声以获得一些背景。 请提出理查德的回答,他应得的。

这其实很简单。

只需打开你的界面conf文件 – > 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 /接口是:

 auto lo iface lo inet loopback 

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

简而言之:

  • 我没有乱用任何文件开始
  • 我已经运行了dpkg-reconfigure resolvconf
  • 正确的符号链接就位
  • NetworkManager从DHCP检索正确的DNS服务器
  • Ubuntu不会使用这样的地址
  • 解决方法是在/ etc / network / interfaces上放置固定的8.8.8.8,我不想这样做
  • 我想在任何和所有情况下使用DHCP提供的DNS服务器。

没有打开另一个线程,因为这是确切的问题,除了我现在在14.10(但是自从12.10升级到13.04以来这一直在唠叨我)。

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

问题似乎与冲突的dnsmasqresolvconf包有关。 直到12.10,使用了dnsmasq 。 从13.04开始,Ubuntu似乎转而使用dnsmasq / resolvconf混合,你已经安装了dnsmasq-baseresolvconf包,但不是dnsmasq本身。

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

问题是,升级脚本无法注释掉/etc/NetworkManager/NetworkManager.confdns=dnsmasq行。 因此,即使系统上不再存在dnsmasq守护程序,/ etc / resolv.conf仍然期望它。

这其实很简单。

只需打开你的界面conf文件 – > sudo vi / etc / network / interfaces

在您的界面(可能是eth0)下,您将看到所有常用的配置。

 address 192.168.22.71 netmask 255.255.255.0 gateway 192.168.22.1 

在网关之后只需添加’dns-nameservers 8.8.8.8 8.8.8.9’或您要使用的任何名称服务器。

所以你的配置应该是:

 address 192.168.22.71 netmask 255.255.255.0 gateway 192.168.22.1 dns-nameservers 8.8.8.8 8.8.8.9 

然后只是做一个’sudo服务网络重启’,你很高兴去!