问题描述
我终于从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在头部,尾部或底部处理这个问题?如果有的话,是否有任何我可以用来调整我的服务器的例子。
任何帮助深表感谢。
最佳解决方法
您的DNS服务器可以将’puppet’解析到正确的地址,或者让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
次佳解决方法
我认为答案是检查您的/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
(即使此脚本已被弃用,它仍然有效)。
第三种解决方法
这可能是由于首次安装Ubuntu时由DHCP配置引起的。尝试这3个步骤来处理这个自动配置问题。
First
编辑您的接口配置,位于:/etc/network/interfaces
在iface lo inet loopback
下面添加以下行:
dns-nameservers yourdns youraltdns
作为谷歌DNS的一个例子,你可能想要使用这个:
dns-nameservers 8.8.8.8 8.8.4.4
Second
编辑您的DHCP配置文件,位于:
/etc/dhcp/dhclient.conf
在每行上使用#
将语法标记为注释,或者直接删除每个请求name-server。在16.04,你可能不需要在这里做任何改变。
Third
使用以下命令重新启动您的网络:
/etc/init.d/networking restart
在16.04:
sudo ifdown -a
sudo ifup -a
第四种方法
请查看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.
还有其他特殊文件(头部和尾部),这些可以帮助你实现你想要的。
第五种方法
对我而言,上述答案不足以达到以下原因:
-
我没有使用
resolvconf
,只是简单的/etc/resolv.conf
。 -
使用
chattr +i
来锁定resolv.conf
似乎太过分了。我需要Puppet在必要时可以自由地进行更改。 -
AFAIK,编辑
/etc/network/interfaces
不会阻止resolv.conf
被覆盖;它只是指定了应该写入的名称服务器。对我而言,指定名称服务器不是重点。我试图在resolv.conf
文件中设置options timeout:1
和options attempts:1
。
我发现best solution覆盖了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上适用于我。
第六种方法
将你的域名服务器添加到/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/resolv.conf中的ISP名称服务器没有成功:
-
我将它们包含在
/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名称服务器。我无法解释这一点(可以有人吗?),但这可能会帮助有人陷入同一个位置。