我终于从7.10迁移到12.04。我还有最后一部分要完成,但是我很困惑。我在每台服务器上都使用Puppet,过去我在resolv.conf中包含了名称服务器地址和puppetmaster的搜索域名。

search puppetmaster.com
nameserver 192.168.1.XXX


在12.04中,重新启动时resolv.conf被覆盖。我不能为这些使用静态IP,因此使用/ etc / network / interfaces来帮助我是一个小问题。

# 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


是否有一种获取方法resolvconf可以在头,尾或基中处理此问题?如果有,可以使用任何示例来调整服务器上的内容。

非常感谢您的帮助。

评论

resolvconf是一个不好的软件,只需删除它,然后使用旧方法即可管理/etc/resolv.conf。

#1 楼

最好让您的DNS服务器能够将“人偶”解析为正确的地址,或者让您的DHCP服务器分发DNS名称服务器地址和搜索列表,或者(如果您有静态IP地址)使用类似以下内容/ etc / network / interfaces中的以下内容。

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10


但是如果您确实想通过resolvconf配置文件来执行此操作,则需要编辑/etc/resolvconf/resolv.conf.d/base。在该文件中,像在resolv.conf中一样输入您的信息。

nameserver 192.168.1.XXX


,然后告诉resolvconf重新生成resolv.conf

sudo resolvconf -u


评论


尽管此答案具有投票权,并且第一部分或多或少是正确的,但答案的第二部分却不正确。 (1)不要在/etc/resolvconf/resolv.conf.d/head中放置“搜索”行。如果在此处放置“搜索”行,如果resolvconf在resolv.conf文件的动态部分中包含“搜索”行,则该行将被忽略。除了最后的“搜索”或“域”行外,glibc解析器将忽略所有内容。参见resolv.conf(5)。 (2)如果更改了resolvconf配置,则不应重新启动resolvconf作业,而应运行更新“ resolvconf -u”。

– jdthood
2012年10月27日18:46



我已经删除了行。另一种选择是使用尾部而不是头部。

–tgm4883
2012年10月30日11:44

@tishma:嗨。首先,为了防止任何误解:基本文件,头文件或尾文件都不会写入。在运行时,什么都不会写入/etc/resolvconf/resolv.conf.d/中的任何文件。这些文件由resolvconf读取,resolvconf将它们的内容组装到它写入的文件--- /run/resolvconf/resolv.conf ---符号链接/etc/resolv.conf指向的文件中。其次,关于更改/ etc / network / interfaces中的dns- *选项后的操作。不要运行“ /etc/init.d/networking restart”;现在已弃用。取而代之的是ifdown所讨论的接口并再次ifup。

– jdthood
2012年11月1日下午13:18

在14.04中,这个答案对我没有任何帮助。

–杰伊·沙利文(Jay Sullivan)
14年6月30日,0:55

如果其他所有方法都失败了.. $ sudo resolveconf -u似乎并没有为我改变任何事情,因此重新启动了计算机。

–MSpreij
2015年4月9日15:25

#2 楼

我认为答案是检查您的/etc/dhcp/dhclient.conf,即不要从您的dhcp客户端请求dns-nameservers

然后更新您的/etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip


然后您的resolv.conf将按照您想要的方式自动配置。

添加到dns-search中,然后运行/etc/init.d/networking restart(即使此脚本已弃用,它仍然可以工作)。

评论


dhclient统治所有resolvconf设置,因此这应该是最佳答案。

– Alex R
13年4月4日在9:35

/etc/init.d/networking restart在我的机器上不起作用,但是sudo ifdown -a和sudo ifup -a可以。 (而且,我花了一点时间才意识到我必须用8.8.8.8之类的东西替换dnsserverip;我觉得有点傻。)

–Jason Gross
2013年12月9日下午5:21

尝试systemctl重新启动networking.service

– Pavel Sayekat
17年12月8日14:42

#3 楼

第一次安装Ubuntu时,这可能是由DHCP配置引起的。尝试执行此三步过程来解决此自动配置问题。

首先

编辑接口配置,该文件位于:/etc/network/interfaces

添加iface lo inet loopback下面的这一行:

dns-nameservers yourdns youraltdns


作为Google DNS的示例,您可能要使用此代码:

dns-nameservers 8.8.8.8 8.8.4.4


第二

编辑位于以下位置的DHCP配置文件:

/etc/dhcp/dhclient.conf


在每行上使用#将语法标记为注释
或仅删除每个请求名称服务器。
在16.04中,可能不需要在此处进行任何更改。

第三

重新启动网络通过使用以下命令:

/etc/init.d/networking restart


在16.04中:

sudo ifdown -a
sudo ifup -a


评论


/etc/init.d/networking restart在我的机器上不起作用,但是sudo ifdown -a和sudo ifup -a可以。

–Jason Gross
2013年12月9日下午5:22

这很简单,即使有点黑,它也可以工作! ubuntu之类的问题有1000种方法可以做一件事情!

– Willa O Ng'wana
16年7月18日在12:52

然后,您可以检查/etc/resolv.conf在第一个有用的行中是否包含这两个新的DNS条目。

– ROMANIA_engineer
16 Dec 20'在16:31

#4 楼

正如许多其他答案所言,这与系统中安装的resolvconf有关。这些文件位于:

/etc/resolvconf/resolv.conf.d/


其中有resolv.conf文件。无论您放在哪里,都将写在head的顶部

,所以一切都会变成这样:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u


评论


这是实际的正确答案!最后!

–user77232
18年11月9日在19:12

感谢您的回答。提示:如果您不希望它们成为主要对象(例如您在AWS上),则将它们附加到/etc/resolvconf/resolv.conf.d/base而不是/etc/resolvconf/resolv.conf.d/head 。

– Mike Q
20年1月14日在17:57

#5 楼

请查看resolvconf的手册页。您可以通过以下方式强制包含某些DNS设置: /etc/resolvconf/resolv.conf.d/base

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.


还有其他特殊文件(头文件和尾文件),这些文件可以帮助您实现所需的目标。

评论


您可以在/etc/resolvconf/resolv.conf.d/base中添加行,但是由于每个名称服务器都可以通过接口访问,并且仅当该接口启动时才可以访问,因此最好将名称服务器信息与该接口关联。如果接口配置了ifup,则意味着:将信息放在/ etc / network / interfaces节的“ dns-search”和“ dns-nameservers”行中。如果接口是通过DHCP配置的,则意味着:将DHCP服务器配置为向客户端提供搜索名称和名称服务器地址。等等。仅将“基本”文件用作临时hack或不得已的手段。

– jdthood
2012年10月27日18:56

是的我在/etc/resolvconf/resolv.conf.d/base中添加了“名称服务器1.2.3.4”

–堡垒
19年6月13日在3:50

#6 楼

对我来说,由于以下原因,上述答案是不够的:


我没有使用resolvconf,而只是使用/etc/resolv.conf
使用chattr +i锁定resolv.conf似乎太过分了。我需要Puppet在必要时可以自由进行更改。
AFAIK,编辑/etc/network/interfaces不会阻止resolv.conf被覆盖;它只是指定应写入的名称服务器。对我来说,指定名称服务器不是重点。我试图在我的options timeout:1文件中设置options attempts:1resolv.conf

我发现的最佳解决方案是使用记录在案的钩子覆盖dhclient的默认行为。

创建一个新文件在/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate上具有以下内容:

#!/bin/sh
make_resolv_conf() {
    :
}


,然后使文件可执行:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate


现在当dhclient时运行-重新启动或手动运行sudo ifdown -a ; sudo ifup -a时-它会加载此脚本nodnsupdate。该脚本覆盖了一个称为make_resolv_conf()的内部函数,该函数通常会覆盖resolv.conf而不执行任何操作。

此功能在Ubuntu 12.04上对我有用。

评论


在Debian 8上运行良好。优雅的解决方案!

– Artur Bodera
2015年10月15日在7:19

仅出于完整性考虑:手册页dhclient-script包含上面提到的DHCP客户端网络配置脚本的信息。

–hecke
16年5月5日在19:36

这在16.04上不起作用,我也将内容添加到/etc/network/interfaces.d,没有任何效果,添加了此处推荐的make_resolv_conf空覆盖,没有效果..但未修改/ etc / dhcp / dhclient.conf-我真的需要修改静态配置文件来解决此问题吗?

– Silververjam
17年1月30日在20:57

#7 楼

这可能只是我机器上的一些怪异现象,但其他人可能也有同样的情况。

我尝试了多种方法将ISP名称服务器包含在/etc/resolv.conf中,但没有成功:


我将它们包含在/etc/network/interfaces中并重新启动了网络。它们没有出现在/etc/resolv.conf中。
我明确地将它们放在/etc/resolv.conf中,但它们被覆盖了。
它们确实出现在/run/resolvconf/interface/eth0.inet中,但从未出现在/etc/resolv.conf中。
我尝试配置resolvconf以进行动态更新。没变化。

最后我读到某个地方,如果本地计算机(127.0.0.1)在/etc/resolv.conf中出现,则不包括任何其他名称服务器。

无奈地我编辑了/run/resolvconf/interface/lo.named,删除其中唯一的一行(nameserver 127.0.0.1),然后重新启动:ifdown eth0 && ifup eth0

/etc/resolv.conf,然后第一次包含我的ISP名称服务器!我运行service network-manager restart来查看它是否稳定,并且/etc/resolv.conf仍然包括​​我的ISP名称服务器。重新启动只是为了确保它仍然存在,但是/run/resolvconf/interface/lo.named重置为:nameserver 127.0.0.1

奇怪地重新启动网络仍然有效:/etc/resolv.conf仍然包含我的ISP名称服务器。我无法解释这一点(有人可以吗?),但这可能有助于某人停留在同一地点。

评论


这可能是由dnsmasq引起的。您可以使用apt-get remove dnsmasq或在/etc/dnsmasq.conf中更新配置来简单地将其删除。

–唐巴
16年1月8日在22:44

#8 楼

将您的名称服务器添加到文件/etc/resolvconf/resolv.conf.d/head。该文件包含您收到的消息:

添加8.8.8.8后该文件应如下图所示:

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# 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.8.8


评论


在/etc/resolvconf/resolv.conf.d/head中添加行是一个糟糕的解决方案,甚至比在/etc/resolvconf/resolv.conf.d/base中添加行更糟糕。使用ifup配置的接口的正确解决方案是在/ etc / network / interfaces中的节中添加“ dns-search”和“ dns-nameservers”行。另请参阅我对其他答案的评论。

– jdthood
2012年10月27日19:01

这是唯一对我真正有用的东西……而且似乎很难弄清楚为什么所有“正确”的解决方案都不起作用。

– Silververjam
17年1月30日在20:54

#9 楼

在最后一行添加例如:

nameserver 8.8.8.8


打开一个终端并输入

sudo chattr +i /etc/resolv.conf


+ i请注意不要在引导时重置文件。

撤消上述操作

sudo chattr -i /etc/resolv.conf


更多信息

man chattr


#10 楼

/etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head


中添加条目,然后运行以下命令

sudo resolvconf -u


评论


将搜索___和名称服务器___放在该文件中,终于使我能够将我的openVPN连接到内部网络以使用该网络的DNS了!

–马西森(Will Matheson)
20 Mar 20 '20 at 20:31

#11 楼

其他解决方案对我的Fedora 20系统不起作用。我的特殊问题是/etc/resolv.conf中的“搜索”行被覆盖。这是修复它的方法。 (这假定NetworkManager正在生成该行
,并且您希望将其设为
search rn.yourcompany.com

1。使用“ ifconfig”命令找出接口的含义兴趣:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>


2.成为root并更改为系统配置网络设备目录:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`



使用您喜欢的可用编辑器添加带有要搜索的其他域的search rn.yourcompany.com yourcompany.com intnet.yourcompany.com行:

Domain

保存,注销并重新登录。NetworkManager现在应该在DOMAIN="yourcompany.com intnet.yourcompany.com"中有一​​行:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com


评论


不要下雨了,但是这是Ask Ubuntu,所以Fedora是题外话。

– Flimm
2014年12月3日,0:05

#12 楼

对于Ubuntu Server 18,Netplan是用于配置网络的新实用程序。

# cd /etc/netplan


然后编辑名称服务器地址yaml文件中的条目(使用正确的缩进)。例如,如果您使用Google的DNS服务器:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]


重新启动服务

# netplan apply


请参阅https ://netplan.io/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/

评论


设置netplan.io/examples看起来非常复杂

– Greg Benner
20-11-22在7:30

#13 楼

如果您使用的是DHCP,请编辑/etc/dhcp/dhclient.conf以添加其他DNS服务器:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;


DHCP客户端会覆盖dns-nameservers中的etc/network/interfaces,我也想覆盖/etc/resolvconf/resolv.conf.d/base

这在Ubuntu服务器14.04.3。中对我有用。

有关详细信息,请参见Debian NetworkConfiguration Wiki。

#14 楼

只需备份您的resolve.conf并删除resolvconf pacage并编辑/etc/resolv.conf文件即可。

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf


我们应该有权选择不要使用诸如resolvconf之类的不良软件。

顺便说一句,/etc/resolv.conf中的搜索字段是无用的。

#15 楼

使用resolvconf并禁用systemd-resolved.service(适用于我的ubuntu 19.04):



安装resolvconf

sudo apt install resolvconf



添加名称服务器

用您的文本编辑器打开/etc/resolvconf/resolv.conf.d/base,我使用vim

sudo vim /etc/resolvconf/resolv.conf.d/base


然后,在打开的文件中添加名称服务器,例如:

nameserver 1.1.1.1
nameserver 1.0.0.1



更新resolv.conf

sudo resolvconf -u



禁用systemd-resolved.service然后重启。 nameserver 127.0.0.53未写入/etc/resolv.conf

sudo systemctl disable systemd-resolved.service
sudo reboot



完成!



评论


您能指定您针对哪个Ubuntu版本执行此操作吗?最初的问题是针对ubuntu 12.04的,因为它已被长期淘汰。

– Marc Vanhoomissen
19年6月27日在13:15

#16 楼

我找到了最简单的解决方法。如果您有resolv.confresolvconf文件,它们将彼此步进。您需要删除每次重新启动时获取并覆盖的resolv.conf文件。

nameserver 1.1.1.1 1.0.0.1放在resolvconf文件的底部,然后运行

sudo rm /etc/resolv.conf


摆脱文件。然后重新启动,一切都会正常。

评论


resolvconf是目录,而不是文件(即/ etc / resolvconf)

– mahemoff
20-04-26在23:33

#17 楼

在12.04上的Mi解决方案:

我注意到,如果在不采用名称解析服务器的接口中添加dns-nameserver

resolvconf手册页

要使resolv.conf在我们手动编辑时不更改,请在终端上执行以下操作:

sudo resolvconf –disable-updates


之后:

sudo resolvconf -a eth0 # or your network interface


然后手动编辑/run/resolvconf/resolv.conf,最多添加两个DNS服务器。

然后重新启动服务:

sudo /etc/init.d/networking restart


评论


这不是解决问题的正确方法。

– jdthood
2012年10月27日18:57

@jdthood作为浏览此内容的人,您可以详细说明为什么这不是正确的方法吗?对我来说似乎合乎逻辑,但对此我一无所知。

– ErikPerik
2014年3月25日下午6:09

#18 楼

另一种方法是,在查询DHCP提供的搜索域和名称服务器之前,将resolvconf(8)配置为使用本地搜索域和名称服务器。这是通过创建/etc/resolvconf.confsudo nano /etc/resolvconf.conf)来完成的:

search_domains="nono.com"
name_servers="1.1.1.1 1.0.0.1"


谢谢您在关键博客上的Brian Cunnie

#19 楼

以上都不适合我在Ubuntu 20.4上运行
我最终在根目录的crontab中添加了以下条目
@reboot sleep 20 && /root/restoreDNS>/etc/restoreDNS.out 1> 2&
基本上在启动20秒后;它执行一个shell脚本,将我的版本复制到/etc/resolv.conf
,这对我有好处。

#20 楼

只需在您的/etc/network/interfaces配置上输入一个

dns-search google.com && dns-nameservers (sample: 8.8.8.8)


命令。然后重新启动网络。

它应该可以工作。

#21 楼

该配置在/etc/default/bind9中声明

RESOLVCONF=no|yes


否=不在init.d中应用条件bind9

是,否则其他值=覆盖resolv.conf

安装bind9时,会出现此问题,并且不关心检查所有conf。