CentOS 将定期清除所做的任何手动更改/etc/resolv.conf
。Linux 中的默认设置无法在合理的时间内进行故障转移(每次都按相同顺序查询名称服务器,5 秒超时,2 次重试)。
因此,您的第一个 DNSresolv.conf
本质上是关键路径。如果它发生故障,您可能需要等待 10 秒钟才能进行故障转移。
这些默认值是可调整的(请参阅解析配置文件请参阅手册页 (man page),但如何才能使任何更改在 CentOS 中永久生效,并在重启等情况下依然有效?
答案1
答案可以在以下位置找到/sbin/dhclient-script
:
if [ -n "${RES_OPTIONS}" ]; then
echo "options ${RES_OPTIONS}" >> ${rscf}
fi
但是,您可以在哪里设置以使脚本拾取它并不十分明显RES_OPTIONS
- 某些内容(例如搜索域)可以在文件中设置ifcfg-ethX
,但解析器选项则在其他地方设置。事实上,您想要的文件是/etc/sysconfig/network
。要设置相关选项,请将类似以下行的内容添加到该文件:
RES_OPTIONS="rotate timeout:1 retries:1"
这会将超时设置为 1 秒,使用一次重试,并告诉客户端根据请求轮换其解析器,而不是每次都按顺序浏览列表。
如果您希望更改立即生效,请发出命令service network restart
并检查您的新/etc/resolv.conf
内容。以下是我测试时的样子:
# cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search example.com
options rotate timeout:1 retries:1
nameserver 10.1.1.2
nameserver 10.1.1.1
答案2
可接受的答案是使用旧式网络脚本。如果您使用网络管理器你甚至可能没有/etc/sysconfig/network
,即使你这样做了,它仍然不会用于由网络管理器。
如果你使用网络管理器:
要添加选项,例如添加rotate
到bond0
:
nmcli con mod bond0 +ipv4.dns-options rotate
要删除该选项:
nmcli con mod bond0 -ipv4.dns-options rotate
+
改变选择也很好;网络管理器足够智能,可以检测现有选项并更新它们。例如,更改超时值:
root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options: "rotate,timeout:5"
root@debian:~# nmcli con mod bond0 +ipv4.dns-options timeout:3
root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options: "rotate,timeout:3"
这意味着删除时会忽略该值,甚至不需要该值。要删除超时:
nmcli con mod bond0 -ipv4.dns-options timeout
它也可以与超时值一起工作,但是该值将被忽略,因此删除timeout:5
也会删除任何其他超时值。
注意:在研究这个问题时,我偶然发现了一个相关错误已修复网络管理器 v1.14.6,v1.15.2-dev和v1.16。如果您遇到任何问题,请检查您的网络管理器版本优先。
答案3
由于这个答案出现在我关于如何在我的计算机上执行此操作(MX Linux,Debian 衍生产品)的搜索中,并且它没有针对该发行版的答案,因此我想添加如何针对该发行版执行此操作:
编辑此文件:
/etc/resolvconf/resolv.conf.d/head
答案4
如果您需要使用平面文件而不是nmcli
命令(例如使用配置管理工具)执行此操作,Red Hat 提供了另一种解决方案。
创建一个脚本/etc/NetworkManager/dispatcher.d/15-resolv
,将自定义复制/etc/resolv.conf
到位。
#!/bin/bash
#
# Description : script to override default resolv.conf file
# with customized file.
cp -f /etc/resolv.conf.custom /etc/resolv.conf
重新启动 NetworkManager 后,将执行该脚本,并用您自己的文件替换该文件。