当前位置: 首页>>技术教程>>正文


如何修复升级到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在博客上发表了一些关于它的信息here。最重要的是要知道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-provided 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:以前的帖子被适度删除,我发布了我发现的解决方案。对不起。

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

It’s actually really easy.

just open your interfaces conf file –> 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-provided 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.conf中的dns=dnsmasq行。因此,即使系统上不再存在dnsmasq守护程序,/etc /resolv.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服务网络重启’,你很高兴去!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1542.html,未经允许,请勿转载。