问题描述
升级到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以来这一直在唠叨我)。
解
最后一句话让我走上正轨,直到那时我才注意到理查德的回答。
该问题似乎与冲突的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仍然期望它。
第四种方法
这其实很简单。
只需打开您的界面配置文件 – > 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服务网络重启’,你很高兴去!