如何在 CentOS 中保留 resolv.conf 选项,例如旋转、超时?

Ada*_*m C 11 domain-name-system resolv.conf centos

CentOS 会/etc/resolv.conf定期清除任何手动更改。Linux 中的默认值在合理时间内进行故障转移方面很差(每次以相同的顺序查询名称服务器,5 秒超时,2 次重试)。

因此,您的第一个 DNSresolv.conf本质上是关键路径。如果失败,您可以在故障转移前查看 10 秒。

这些默认值是可以调整的(请参阅resolv.conf手册页),但是如何使 CentOS 中的任何更改永久化并通过重新启动等保持不变?

Ada*_*m C 13

答案可以在/sbin/dhclient-script

if [ -n "${RES_OPTIONS}" ]; then
    echo "options ${RES_OPTIONS}" >> ${rscf}
fi
Run Code Online (Sandbox Code Playgroud)

但是,您可以在何处设置RES_OPTIONS以使脚本拾取它并不是很明显- 可以在ifcfg-ethX文件中设置搜索域等某些内容,但在其他地方设置解析器选项。您想要的文件实际上是/etc/sysconfig/network. 要设置相关选项,请将此行添加到该文件中:

RES_OPTIONS="rotate timeout:1 retries:1"
Run Code Online (Sandbox Code Playgroud)

这会将超时设置为 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
Run Code Online (Sandbox Code Playgroud)


Tho*_*est 6

公认的答案是使用旧版网络脚本时。如果您使用NetworkManager,您可能甚至没有/etc/sysconfig/network,并且即使您这样做,它仍然不会用于由NetworkManager管理的连接。

如果您使用NetworkManager

要添加选项,例如添加rotatebond0

nmcli con mod bond0 +ipv4.dns-options rotate
Run Code Online (Sandbox Code Playgroud)

要删除该选项:

nmcli con mod bond0 -ipv4.dns-options rotate
Run Code Online (Sandbox Code Playgroud)

+改变选项也很好;NetworkManager足够智能,可以检测现有选项并更新它们。例如,更改超时值:

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"
Run Code Online (Sandbox Code Playgroud)

这意味着该值在删除时会被忽略,甚至不需要。要删除超时:

nmcli con mod bond0 -ipv4.dns-options timeout
Run Code Online (Sandbox Code Playgroud)

它也可以使用超时值,但该值将被忽略,因此删除timeout:5也将删除任何其他超时值。

注意:在研究这个问题时,我遇到了一个相关的错误,该错误已在network-manager v1.14.6v1.15.2-devv1.16中修复中修复。如果您遇到任何问题,请先检查您的网络管理器版本。