问题描述
Ubuntu 12.04 LTS(Precise Pangolin)中/etc/resolv.conf
是无用的吗?
我发现DNS服务器信息现在存储在NetworkManager中。 nmcli
命令行工具可以为您列出。
如果我想再添加一台DNS服务器,请使用resolvconf
软件包帮助将其添加到/etc/resolv.conf
中?
最佳解决办法
如果/etc/resolv.conf
包含nameserver 127.0.0.1
,则将条目添加到/etc/resolvconf/resolv.conf.d/tail
中并不会真的有用。
如果您使用的是NetworkManager,则应通过网络指示符静态添加名称服务器地址:编辑连接… |编辑… | IPv4设置|额外的DNS服务器。
如果您确实想要向/etc/resolv.conf
添加更多条目,请创建一个/etc/resolvconf/resolv.conf.d/tail
并将其添加到那里。
与所有Ubuntu发行版一样,建议阅读Ubuntu Release Notes,网址为:
桌面和公共基础结构部分包含一个链接
-
http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/覆盖12.04中对DNS基础结构的更改。
次佳解决办法
我发现了另一种方法here,其中包括向/etc/dhcp/dhclient.conf
中添加一行,如下所示:
prepend domain-name-servers x.x.x.x, y.y.y.y;
同样,我发现了第三种方法here,它涉及向/etc/network/interfaces
添加行:
auto eth0
iface eth0 inet static
. . .
dns-nameservers 8.8.8.8 8.8.4.4
更新:这是第三种方法的official documentation。
第三种解决办法
这听起来像你在谈论resolvconf软件包。
安装resolvconf包。
跑
cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig #backup copy, always do this
sudo nano head
该文件的顶部是一个可怕的警告。文件/etc/resolv.conf是从这个文件的内容中自动生成的;警告就在那里,所以当/etc/resolv.conf生成时它会被放到/etc/resolv.conf中。在文件末尾添加
nameserver <ip_of_nameserver>
按Ctrl
x
并回答yes以保存文件。完成后,重新生成/etc/resolv.conf,以便现在应用更改:
sudo resolvconf -u
然后检查/etc/resolv.conf的内容以查看您添加的行现在是否存在。此外,下次您的机器启动或您的网络服务重新启动时,它仍会在那里,以先到者为准。
第四种办法
下面我将向您展示从运行Ubuntu Server版本并使用ifup而不是NetworkManager以来发现的最佳方式。
实际上,对于我来说,他们通过将它们全部放入/etc /network /interfaces文件中,使它更简单。现在,您写入resolv.conf的相同配置现在可以与您的网络适配器配置位于同一个文件中,如下例所示:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 75.75.75.75 75.75.76.76
dns-search local
我希望这可以帮助我们,并且使它更容易,现在我们可以创建静态IP地址,并将nameservers和dns域添加到一个文件中:)
第五种办法
我正在运行Ubuntu Server 12.04。我做了以下更改并重新启动了服务器(通常这可以通过关闭网络接口,即ifdown eth0
或ifup eth0
)来完成。
在文件/etc/resolvconf/resolv.conf.d/base
中,我添加了以下条目:
nameserver 8.8.8.8
nameserver 8.8.4.4
我希望以上帮助!
第六种办法
您可以按Frank的答案中所述使用NetworkManager,但如果您想手动编辑/etc/resolv.conf
,可以通过删除它(它实际上是一个符号链接),然后使用所需内容创建一个新的纯文件来实现。 resolvconf
实用程序只写入文件/run/resolvconf/resolv.conf
。
第七种办法
注意:这个答案是针对问题的一个非常不同的pre-merge版本,只关注pre-pending中所需的name-server。
这在12.04之前工作:
编辑/etc/dhcp3/dhclient.conf
并添加:prepend domain-name-servers 127.0.0.1;
(事实上,这条线已经存在,你需要做的只是un-comment它。)
第八种办法
resolvconf
没用。我在Linux服务器上,我的IP address是静态的,我的DNS服务器是静态的。我不需要resolvconf
或NetworkManager。
保持简单是我在服务器上工作时的策略。复杂程度越低,事情发生时越容易管理/修复。
所以我做了aptitude purge resolvconf
,并手动确认/etc/resolv.conf
不是symlink,而是创建了一个静态文件。为了防止程序试图更改文件,我做了chattr +i
(不可变),以防止/etc/resolv.conf
。
第九种办法
上述大多数假设你有一个原始系统,但现实往往是这样的,你一直在安装不同的DHCP客户端,禁用某些以前的Ubuntu版本的网络管理器等等。了解以下情况可能是值得的。我一直在使用dnsmasq,但卸载它。目前我的系统有以下/etc/resolv.conf
(这是我系统上的/run/resolvconf/resolv.conf
的符号链接)的内容:
cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
无论多久我运行一次sudo resolvconf -u
或sudo dpkg-reconfigure resolvconf
,它都不会将名称服务器更新为我在NetworkManager中设置的名称服务器。 resolvconf从NetworkManager使用的信息存在:
cat /run/resolvconf/interface/NetworkManager
nameserver 8.8.4.4
nameserver 8.8.8.8
但是,事实证明,如果此目录中有多个文件,则可能根本没有使用该文件。罪魁祸首是一个未卸载dnsmasq的文件:
cat /run/resolvconf/interface/lo.dnsmasq
nameserver 127.0.0.1
删除这个文件(然后运行sudo resolvconf -u
)解决了我的dns问题:
cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.4.4
nameserver 8.8.8.8
我希望这可以帮助其他人调试(所有这些不同网络工具之间的复杂交互)。如果您使用resolvconf
,请确保运行ls /run/resolvconf/interfaces
以查看有哪些内容。
第十种办法
您可以编辑连接“AUTO ETH0”或任何用于在NM中连接的名称。您可以通过NM上的right-clicking执行此操作并选择“编辑连接…”。在IPv4选项卡上,您可以选择“仅自动(DHCP)地址”,因为”Method”和NM将允许您手动设置名称服务器地址,甚至通过DHCP提供地址。