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


207

/etc/resolv.conf没用在Ubuntu的LTS 12.04(精确穿山甲)?

我看到DNS服务器信息现在存储在NetworkManager中。该nmcli命令行工具可以列出你。

如果我想再添加一台DNS服务器,可以/etc/resolv.conf使用resolvconf软件包帮助将其添加到其中吗?


2
我认为上述命令应该是nm-tool,不是nmcli
Jesse Glick

Answers:


139

如果/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版本说明,可在以下位置找到:

桌面和公用基础结构部分包含指向以下内容的链接:


1
@stgraber,请评论我在下面找到并发布的替代方法。与添加/etc/resolvconf/resolv.conf.d/tail文件或使用网络管理器相比如何?谢谢。
兰德尔·库克

3
@stgraber您对Ubuntu Server有何建议?我从您的博客和评论中注意到,Network-Manger似乎是管理此问题的最佳方法,但是在系统上安装network-manager会安装一大堆我不需要的东西(即GUI东西) )。
艾利·陈

1
怎样在/etc/resolvconf/resolv.conf.d/head中添加条目(根据您的博客文章)?
2013年

3
@AveryChan,使用@randallcook建议的“第三种方法”,只需将其添加dns-nameservers到中的eth0部分即可/etc/network/interfaces
mrm

1
/etc/resolvconf/update.d/libc在Ubuntu 14.04.1服务器上:( # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. 将其设置为/etc/default/resolvconf,如第23和24行/etc/resolvconf/update.d/libc所示。
immeëmosol2015年

134

我在这里找到了另一种方法该方法涉及将以下行添加到/etc/dhcp/dhclient.conf

prepend domain-name-servers x.x.x.x, y.y.y.y;

同样,我在这里找到了第三种方法该方法涉及在以下行添加行/etc/network/interfaces

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

更新:这是第三种方法的官方文档


18
我之所以投票,third approach是因为这是迄今为止最简单的方法。
比利·穆恩

1
@billy我根本无法使第三个方法起作用。.只有这里列出的第一个方法,编辑dclient.conf对我有用。
杰夫·阿特伍德

9
注意:仅当使用dhclient时,编辑dhclient.conf才有效(并且ifup和NetworkManager都使用它)。/ etc / network / interfaces编辑仅在使用ifup时才有效。仅当使用NetworkManager时,使用NetworkManager连接编辑器配置NetworkManager连接才有效。
jdthood 2012年

1
如果我没有记错的话,第三种方法是在DHCP返回的域名服务器之后添加另一个域名服务器。如果您希望它排在第一位,那么使用其他选项中的一个更为合适。我用过/etc/resolvconf/resolv.conf.d/head(克服了误导性的“请勿编辑”评论:)))
starfry 2014年

1
@ Mr.Hyde,这些不是命令行命令,它们是添加到/ etc / network / interfaces的行。
兰德尔·库克

90

听起来您在谈论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并回答“是”以保存文件。最后,重新生成/etc/resolv.conf,以便立即应用更改:

sudo resolvconf -u

然后检查/etc/resolv.conf的内容,以查看您添加的行现在在那里。此外,下次启动计算机或重新启动网络服务时,仍然会在那里,以先到者为准。


关于文件警告的信息正是我所需要的。我的印象是我不应该编辑文件!谢谢!
Xunnamius

这是对我最好的答案!
沉思玮申思思维

31

下面,我将向您展示自从我运行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地址,并将名称服务器和dns域全部添加到一个文件中:)


1
谢谢。这也成为我最喜欢的方法。偏离主题的注释:无需指定“网络”和“广播”地址,因为它们是根据“地址”和“网络掩码”自动计算得出的。您真正需要的只是“地址”,“网络掩码”和“网关”。
马丁·海姆斯

这是最干净的答案。只要确保正确拼写dns- *关键字即可。我的实际问题是拼写错误的“ dns-nameservers”。
John McGehee '18年

18

我的正在运行Ubuntu Server 12.04。我进行了以下更改,然后重新启动了服务器(通常可以仅通过关闭网络接口ifdown eth0或来完成此操作ifup eth0)。

在文件中,/etc/resolvconf/resolv.conf.d/base我添加了以下条目:

nameserver 8.8.8.8
nameserver 8.8.4.4

希望以上内容对您有所帮助!


12

您可以按照弗兰克答案中的说明使用NetworkManager,但如果您希望手动进行编辑/etc/resolv.conf,则可以通过删除它(实际上是一个符号链接),然后使用所需的内容创建一个新的纯文件来进行操作。该resolvconf实用程序仅写入文件/run/resolvconf/resolv.conf


9

注意:此答案针对的是问题的完全不同的预合并版本,仅侧重于预先添加所需的名称服务器。

这适用于04.12之前的版本:

编辑/etc/dhcp3/dhclient.conf并添加:
prepend domain-name-servers 127.0.0.1;

(实际上,该行已经存在;您只需取消注释即可。)


如果您没有DHCP分配的任何地址,此方法是否有效?
Azendale 2011年

如果要了解有关dhclient配置的更多信息,可以执行man dhclient.conf来访问dhclient手册页。(这不是对Azendale问题的答复。)
ChristianSkjødt2011年

这个答案是完全错误的。首先,问题提交者要添加外部namserver的地址,而不是地址127.0.0.1。外部接口的接口配置器不是为内部名称服务器添加地址的地方。其次,文件位于/ etc / dhcp,而不是/ etc / dhcp3。第三,从Ubuntu 12.04开始,使用resolvconf进行配置。
jdthood 2013年

1
首先-主持人合并极大地改变了最初的问题,所以我的回答当然很奇怪。dhcp3文件是我在2011年回答此问题的位置,即使它不是理想的,它也可以工作。我已经在多台机器上使用了该解决方案。显然,您可以将环回地址更改为要添加的地址。我假设大多数人都知道环回是什么,即使他们没有阅读RFC6890。
belacqua 2013年

@jdthood为什么不添加自己的答案?我个人并不熟悉bsd-ish resolvconf的处理方式。我更喜欢直接使用/etc/resolv.conf方法,但是我不确定新的Rube Goldberg系统的优点是什么。(与/ etc / motd类似)。
belacqua 2013年

7

resolvconf是没有用的。我在Linux服务器上,我的IP地址是静态的,而我的DNS服务器是静态的。我不需要resolvconfNetworkManager的

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

因此,我做了aptitude purge resolvconf手动确定/etc/resolv.conf不是符号链接,而是创建了一个静态文件。以防万一某个程序试图更改文件,我做了 chattr +i(不可变的)/etc/resolv.conf作为预防措施。


4
由于resolvconf是基本系统的一部分,因此删除它会在将来升级时提出问题。
jdthood 2012年

3
我同意评论和回答:考虑这引起了多少问题,修复了该“问题”有多少支持小时,有多少IT人员花了时间寻找答案。简单是最好的-我不需要服务器将DNS更改为不需要的内容。
2014年

6

上面的大多数内容都假设您具有原始系统,但现实情况常常是您安装了不同的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,它没有更新的域名服务器来我在网络管理器中设置的那些。存在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以查看其中的内容。


1
谢谢,这非常有帮助。我首先尝试了投票率较高的答案,但似乎没有一个解决之道。目录中没有任何其他文件/run/resolvconf/interface/,但是我的NetworkManager文件需要一些帮助。您的回答为我解决了这个问题。
mason81年

4

我只是删除了一个链接,/etc/resolv.conf并使用名称服务器的地址创建了一个常规文件。它可以正常工作,我看不出有任何理由使用Ubuntu开发人员创建的相当奇怪的构造。


1
是的,我不喜欢这种会影响服务器,增加复杂性和不透明性的更改。这是核心行为,不应因版本而异。
belacqua 2013年

这个答案有5年历史了,恕我直言,仍然是所有列出的最好的答案。它简单,快速且有效。有什么缺点吗?
Craig S. Anderson

3

您可以编辑连接“ AUTO ETH0”,也可以编辑用于连接NM的名称。您可以通过右键单击NM并选择“编辑连接...”来执行此操作。在IPv4选项卡上,您可以选择“仅自动(DHCP)地址”作为“方法”,并且NM将允许您手动设置名称服务器地址,即使地址是通过DHCP传递的也是如此。


3

将我添加到已经很长的列表中,这是另一种方式(已在12.04测试):

编辑/run/resolvconf/interface/NetworkManager以适应您的需求。这是一个例子:

search foobar.com example.com
nameserver 192.168.1.1

然后,如大多数其他示例所述,执行sudo resolvconf -u。现在,您将找到如下所示的resolv.conf外观:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

我仍然不喜欢它现在的实现方式(似乎Ubuntu为其生成的每个foo都需要一个服务),并且肯定会喜欢纯resolv.conf文本。但到目前为止,这种方法似乎是我最好的折衷方案。添加的“ localhost-NS”应该不会造成太大的伤害。


2

我通过更改源顺序来解决此问题。我提出的dns前源mdns/etc/nsswitch.conf

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

您可以保留设置,并且仍然可以通过这种方式使用本地缓存服务器。


而不是添加条目,而是修复已损坏的系统并为您提供所需的信息。+1。
nelaaro

2

怎么样:

sudo dpkg重新配置resolvconf

在此之前,使用网络管理器更改DNS地址并将方法更改为

仅自动(DHPC)地址

然后运行上面的命令并重新启动。那为我解决了。


2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp

2

这是一个非常受欢迎的问题,它提供了一系列可能的标准答案,而IMO都非常棘手。我曾经一度遇到问题,无法使Ubuntu尊重我在NetworkManager中设置的DNS设置-特别是使用“仅自动(DHCP)地址”设置静态DNS服务器-今天,我终于弄清了什么是错误的。

问题出在resolvconf和NetworkManager之间的交互中。resolvconf的文件名为/etc/resolvconf/interface-order。至少在我的系统上,NetworkManager 根本不在此文件中(除非文件末尾由*通配符覆盖)。因此,发生的是,dhclient关于resolvconf的最新报告优先于NetworkManager不得不说的话。

因此,至少就我而言,实际答案是添加

NetworkManager

在顶部或附近/etc/resolvconf/interface-order

(是的,我知道很多人对我来说只是说“ uninstall resolvconf”,这本身似乎是一个坏主意。但除此之外,至少有一点是明智的,xenial认为resolvconf是系统的重要组成部分[即ubuntu -minimal取决于它),因此如果没有resolvconf,将很难使您的系统保持一致,更新的状态。)

根据要求,我可以提供有关如何解决此问题的更多详细信息。编辑:很显然,当我被要求时我没有这样做,对不起。在这一点上,我不记得比我接下来说的还要多的细节:)简而言之,我用一个外壳包装器代替了resolvconf可执行文件将其参数,输入,输出和stderr转储到文件中;并将set -x添加到resolvconf的更新脚本中。

编辑:我可以说的第一部分是我用sudo移动了实际的resolvconf可执行文件,可以使用which命令或type命令找到它。然后创建一个最终只是执行被移动的shell脚本。 resolvconf,但也回显某些文件的参数,并使用shell重定向将stdin,stdout和stderr发送到其他文件。我不记得“ resolvconf的更新脚本”在哪里,目前无法轻松检查。许多Linux极客可以理解我的意思;也许一些优秀的撒马利亚人会在评论中提供更多细节。)


请“ 提供有关您如何解决此问题的更多详细信息
Pierre.Vriens


1

要更改DNS,请按照以下网址中的说明进行操作:https : //developers.google.com/speed/public-dns/docs/using

  1. 转到网络

  2. 选择要为其配置DNS的连接。

  3. 要更改无线连接的设置,请选择“无线”选项卡,然后选择适当的无线网络。

  4. 单击箭头(右),然后在出现的窗口中选择“ IPv4设置”或“ IPv6设置”选项卡。

  5. 如果选择的方法是自动(DHCP),请打开下拉列表,然后仅选择自动(DHCP)地址。如果方法设置为其他,请勿更改。

  6. 在“ DNS服务器”字段中,输入DNS IP地址,以逗号分隔。


0

0.添加临时DNS。编辑/etc/resolv.conf。

nameserver 4.4.4.4
nameserver 8.8.8.8

1.安装或更新resolvconf。

root@ubuntu:~# apt-get install resolvconf -y

2.将您的名称服务器添加到/etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3.重新启动计算机。

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.