如何在 CentOS 中保留 resolv.conf 选项(例如 rotate、timeout)?

如何在 CentOS 中保留 resolv.conf 选项(例如 rotate、timeout)?

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,即使你这样做了,它仍然不会用于由网络管理器

如果你使用网络管理器

要添加选项,例如添加rotatebond0

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.6v1.15.2-devv1.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 后,将执行该脚本,并用您自己的文件替换该文件。

https://access.redhat.com/solutions/61921

相关内容