如何修复升级到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以来这一直在唠叨我)。
解
最后一句话让我走上正轨,直到那时我才注意到理查德的回答。
问题似乎与冲突的dnsmasq
和resolvconf
包有关。 直到12.10,使用了dnsmasq
。 从13.04开始,Ubuntu似乎转而使用dnsmasq / resolvconf混合,你已经安装了dnsmasq-base
和resolvconf
包,但不是dnsmasq
本身。
我不能说这是13.04或其他东西的升级脚本中的错误,因为在升级时(如在全新安装中)安装了resolvconf,升级了dnsmasq-base并且(正确)卸载了dnsmasq。
问题是,升级脚本无法注释掉/etc/NetworkManager/NetworkManager.conf
的dns=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服务网络重启’,你很高兴去!