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

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

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

评论

我认为上面提到的命令应该是nm-tool,而不是nmcli。

#1 楼

如果/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发行说明,可在以下位置获取:


https://wiki.ubuntu.com/PrecisePangolin/ReleaseNotes/UbuntuDesktop

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



http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/涵盖了DNS的更改12.04中的基础结构。


评论


@stgraber,请评论我在下面找到并发布的替代方法。与添加/etc/resolvconf/resolv.conf.d/tail文件或使用网络管理器相比,它有何不同?谢谢。

–兰德尔·库克(Randall Cook)
2012年5月8日23:02

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

–陈慧琳
2012年6月22日,下午3:17

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

–sup
13年3月12日在16:15

@AveryChan,使用@randallcook建议的“第三种方法”,只需在/ etc / network / interfaces中的eth0部分中添加dns-nameservers。

–mrm
13年8月26日在5:15

在Ubuntu 14.04.1服务器上的/etc/resolvconf/update.d/libc:#设置TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS = no#允许在初始回送地址127. *或:: 1之后的#resolv.conf中列出其他名称服务器地址。 (在/ etc / default / resolvconf中进行设置,如/etc/resolvconf/update.d/libc的第23和24行所示。

–immeëmosol
2015年2月14日在4:07



#2 楼

我在这里找到了另一种方法,其中涉及向/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


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

评论


我之所以投票,是因为到目前为止,第三种方法是最简单的方法。

–比利·穆恩(Billy Moon)
2012年7月17日在9:27

@billy我根本无法使第三个方法起作用。.只有这里列出的第一个方法,编辑dclient.conf对我有用。

–杰夫·阿特伍德
2012年10月17日在21:49

注意:仅当使用dhclient时,编辑dhclient.conf才有效(ifup和NetworkManager都使用!)如果使用ifup,则编辑/ etc / network / interfaces才有效。仅当使用NetworkManager时,使用NetworkManager连接编辑器配置NetworkManager连接才有效。

– jdthood
2012年10月29日14:26

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

– starfry
2014年9月15日上午10:46

@ Mr.Hyde,这些不是命令行命令,它们是添加到/ etc / network / interfaces的行。

–兰德尔·库克(Randall Cook)
15年7月7日在5:49

#3 楼

听起来您在谈论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的内容以查看您添加的行现在在那里。此外,下次启动计算机或重新启动网络服务时,仍然存在,以先到者为准。

评论


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

– Xunnamius
17-10-22在5:51

这是对我最好的答案!

–沉思玮申思
18年11月1日在11:23

#4 楼

下面,我将向您展示自从我运行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域:)

评论


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

–马丁·海默斯(Martijn Heemels)
2014年2月21日在10:16

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

– John McGehee
18年4月13日在21:28

#5 楼

我的正在运行Ubuntu Server 12.04。我进行了以下更改并重新启动了服务器(通常只能通过关闭网络接口ifdown eth0ifup eth0来完成此操作)。

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

nameserver 8.8.8.8
nameserver 8.8.4.4


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

#6 楼

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

#7 楼

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

此方法在04.04之前的版本有效:

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

(实际上,此行已存在;您需要做的就是取消注释。)

评论


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

–阿岑代尔
2011年6月30日23:34

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

–克里斯汀·斯科约德(ChristianSkjødt)
2011年8月31日在16:01



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

– jdthood
13-10-3在8:29

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

– Belacqua
2013年10月4日15:11



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

– Belacqua
2013年10月4日15:46



#8 楼

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

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

所以我做了aptitude purge resolvconf并手动确保/etc/resolv.conf不是符号链接,只是创建了一个静态文件。以防万一某个程序试图更改文件,为了预防起见,我将chattr +i(不可变)设置为/etc/resolv.conf

评论


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

– jdthood
2012年10月29日14:30在

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

–美
14年7月30日在16:40

#9 楼

上面的大多数内容都假定您具有原始系统,但是现实常常是您安装了不同的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问题:
<我希望这也可以帮助其他人进行调试(所有这些不同网络工具之间的复杂交互)。如果使用resolvconf,请确保运行ls /run/resolvconf/interfaces以查看其中的内容。

评论


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

–mason81
15年7月2日在14:40



#10 楼

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

评论


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

– Belacqua
13-10-4在15:32

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

–克雷格·安德森(Craig S. Anderson)
19 Mar 9 '19 at 4:02

#11 楼

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

#12 楼

将我添加到已经很长的列表中,这是另一种方式(在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”应该不会造成太大的伤害。

#13 楼

我通过更改源顺序来解决此问题。我将dns的源代码移到了
mdns/etc/nsswitch.conf之前:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4


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

评论


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

–nelaaro
13年2月5日在12:30

#14 楼

怎么样:


sudo dpkg-reconfigure resolvconf


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


仅自动(DHPC)地址


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

#15 楼

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


#16 楼

这是一个非常受欢迎的问题,提供了一系列可能的标准答案,而IMO都非常棘手。我曾经一度遇到问题,无法让Ubuntu尊重我在NetworkManager中设置的DNS设置-特别是使用“仅自动(DHCP)地址”设置静态DNS服务器-今天,我终于弄清了什么是错误的。 br />
问题在于resolvconf和NetworkManager之间的交互。 resolvconf的文件名为/etc/resolvconf/interface-order。至少在我的系统上,NetworkManager根本不在此文件中(除非文件末尾由*通配符覆盖)。因此,发生的是,dhclient的最新resolvconf报告优先于NetworkManager必须说的任何事情。

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

NetworkManager
/etc/resolvconf/interface-order的顶部或顶部附近。

(是的,我知道很多人只是说“卸载resolvconf”,这本身似乎是一个坏主意,但是,更重要的是,至少有经验的人认为resolvconf是系统的重要组成部分(即ubuntu-minimal依赖于此),因此如果没有resolvconf,将很难保持系统处于一致的更新状态。 )

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

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

评论


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

– Pierre.Vriens
16年5月31日在19:49

#17 楼

另一种方法是在以下位置定义Docker特定的dns服务器:

/etc/docker/daemon.json


如果没有这样的文件,只需创建它即可:

{
    "dns": ["1.1.1.1", "1.0.0.1"]
}


来源,另请参见。

#18 楼

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


转到网络
对于要配置DNS的连接,请单击齿轮。
单击“ IPv4或IPv6设置”选项卡。
如果选择的方法是“自动”,则选择“仅自动(DHCP)地址”。如果该方法设置为其他方法,请不要更改。
在DNS服务器字段中,输入DNS IP地址,以逗号分隔。

编辑:因为这似乎不是在较新的ubuntu上正常运行,我将:

sudo systemctl disable systemd-resolved.service
sudo gedit /etc/resolvconf/resolv.conf.d/head 
# add
nameserver 8.8.8.8
nameserver 8.8.4.4

sudo resolvconf --enable-updates
sudo resolvconf -u


来源:https://pchelp.ricmedia.com/set-custom-dns-servers-linux-network- manager-resolv-conf /

#19 楼



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

nameserver 1.1.1.1
nameserver 1.0.0.1



安装或更新resolvconf。

sudo apt-get install -y resolvconf



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

nameserver 1.1.1.1
nameserver 1.0.0.1


重新启动计算机:reboot


评论


你是谁?我习惯从零开始。

–小流子
19年11月18日在11:28