我如何解决升级到Ubuntu 13.10后无法使用的DNS解析问题(Saucy)


64

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

加入我能暂时解决问题nameserver 8.8.8.8/etc/resolv.conf。但是之后Intranet主机仍然无法解析。

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

所以我的问题是:

  • 我应该输入什么resolv.conf(如果有的话)?
  • 如何找出我的计算机正在查询哪些名称服务器?
  • 接下来要查找的地方,为什么不使用DHCP接收的名称服务器?

2
从12.04升级到14.04时遇到相同的问题。
塔拉施

6
自几天前升级到16.10以来,我每天都遇到DNS故障。
WindRider

@WindRider有相同的问题,下面的dnsmasq技巧似乎起作用。
Suor 2016年

我在全新安装的Lubuntu 17.04上遇到问题,并通过将所需的url手动添加到主机文件中来解决了该问题:askubuntu.com/a/936972/34298
rubo77 '17

Answers:


83

首先,您需要了解自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        

非常感谢您提供此信息。在我的情况下,该命令显示正确的DNS服务器。但是resolf.conf文件没有更新。从我将值放到那里开始就有时间戳记。因此,我将不得不找出为什么resolvconf没有写入文件。
Witek

15
Resolvconf实际上写入文件/run/resolvconf/resolv.conf,而/etc/resolv.conf应该是到/run/resolvconf/resolv.conf的符号链接。如果删除了/etc/resolv.conf,则删除了符号链接。要重新创建符号链接,您可以运行sudo dpkg-reconfigure resolvconf或可以执行mv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
jdthood 2013年

7
除了“修复程序”之外,它什么都有。我该如何解决这个问题?
阿马尔·穆拉利

5
该修复程序可能按照sudo dpkg-reconfigure resolvconf答案的最后部分中的建议运行。
jdthood 2014年

谢谢!!!我不确定我的系统发生了什么,但是运行sudo dpkg-reconfigure resolveconf似乎效果很好!
meanbunny 2014年

49

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

4
注释掉dnsmasq之后,您需要重新启动网络管理器:sudo restart network-manager
Don Kirkby 2015年

2
在我的情况下(Xubuntu),命令是:sudo /etc/init.d/network-manager restart
aviram83 '16

如果您遇到了这种情况,即使没有安装dnsmasq,也没有什么可以注释掉的,请添加dns=default到本[main]节中。NetworkManager有自己的讨厌dnsmasq插件,否则将使用它。
dstibbe

1
我需要这样做重启network-manager-sudo service network-manager restart
Sungam

升级到17.10之后,我的其中一个盒子没有dns,结果发现/etc/resolv.conf不是符号链接。修复。另一个盒子没有完成升级,我在目录中找到一个.dpkg-new文件,与它们的区别主要是dnsmasq。将其复制并无需重新启动任何守护程序即可工作
fchen

20

编辑2:以前的帖子已被审核正确删除,我发布的是我发现的解决方案。抱歉

编辑:我刚刚找到了答案,并且它在此页面中-对不起我的忧郁。我在下面发布了我的发现,扩展了本页中的Richard Lindstedt的正确答案。我离开了早期的喧嚣,有了一些背景。请支持理查德的答案,他应得的。

这实际上非常容易。

只需打开您的接口配置文件-> 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不使用此类地址
  • 解决方法是在不希望的/ 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被(正确)卸载了。

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


这太棒了!
metadings

1
OMG解决了我过去三年来遇到的DNS问题!如果你有dnsmasqdnsmasq-base安装,NM将把127.0.0.1/etc/resolv.conf代替127.0.1.1。我只是卸载了dnsmasq(并启用了NM),一切正常。
user1129682 2015年

4
未来的Google员工应注意,sudo service network-manager restart此操作必须生效。
timelmer '17

服务网络管理员重启的好时机!
Henrique

7

这实际上非常容易。

只需打开您的接口配置文件-> 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服务网络重启”就可以了!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.