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


如何通过resolv.conf添加DNS服务器?

,

问题描述

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,网址为:

桌面和公共基础结构部分包含一个链接

次佳解决办法

我发现了另一种方法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 eth0ifup 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服务器是静态的。我不需要resolvconfNetworkManager

保持简单是我在服务器上工作时的策略。复杂程度越低,事情发生时越容易管理/修复。

所以我做了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 -usudo 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提供地址。

参考资料

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