如何在CentOS中保留诸如旋转,超时之类的resolv.conf选项?


9

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

因此,您的第一个DNS resolv.conf本质上是关键路径。如果失败,您可以等待10秒钟,然后再进行故障转移。

这些默认值是可调整的(请参见resolv.conf手册页),但是如何使任何更改在CentOS中成为永久性的并在重新启动后保持不变?

Answers:


12

答案可以在以下位置找到/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

1

可接受的答案是在使用旧版网络脚本时。如果使用NetworkManager,则可能甚至没有/etc/sysconfig/network,如果您这样做,则仍将不会用于NetworkManager管理的连接。

如果您使用NetworkManager

要添加选项,请添加rotatebond0

nmcli con mod bond0 +ipv4.dns-options rotate

要删除该选项:

nmcli con mod bond0 -ipv4.dns-options rotate

+是好事,更改选项太多; 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"

这意味着该值将被删除,甚至不再需要。要删除超时:

nmcli con mod bond0 -ipv4.dns-options timeout

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

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


1
在将旧答案添加到新答案时,最好注意一个问题和答案的年代。当问这个问题时,现在被认为是遗留的东西并不一定是4年前。如果您注意到默认值发生了更改(可能是哪个CentOS版本-8),然后继续添加您的信息,而不是将其标记为旧版,这将是一个非常有用的答案。或者,重新询问并回答您自己的版本(例如,对于较新的CentOS版本或使用网络管理器时),然后链接回该较早的版本以供参考。
亚当C

尽管旧方法可能仍然有效……NetworkManager已经存在很长时间了,但是您仍然可以在Debian和CentOS中配置旧方法。
Thomas Guyot-Sionnest,

0

如果您需要使用平面文件而不是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


0

您可以告诉NetworkManager不要一起管理/etc/resolv.conf文件。

  1. 创建/etc/NetworkManager/conf.d/90-dns-none.conf具有以下内容的文件:

    [main]
    dns=none
    
  2. 重新加载NetworkManager服务:

    systemctl reload NetworkManager
    

该文档来自第二个解决方案,其中涉及替换/etc/resolv.conf为文件的符号链接。

阅读以下内容:22.手动配置/etc/resolv.conf文件


-1

只需添加

resolv_conf_options=rotate\ timeout:1\ retries:1

在你的 resolvconf.conf


您确定这是CentOS中的一个选项(获得了指向docs / something的链接以显示它)吗?我将其视为FreeBSD选项和Ubuntu,但未在CentOS中找到它
Adam C

这是openresolv软件包的一部分
Evgeny F

1
那似乎不是标准软件包,因此不是CentOS的真正选择,尤其是在受控环境中,尽管在其他地方也不是坏选择
Adam C

-3

上次使用新订阅的Linux VPS时,我遇到了同样的问题。我如何解决的是使用chattr + i命令使文件不可变。在对resolv.conf文件进行必要的更改之后,只需转到/ etc文件夹并运行此命令:

chattr + i resolv.conf

如果您想还原设置,请执行以下操作:

chattr -i resolv.conf

完整指南供您参考:http : //boxtutor.com/fix-etcresolv-conf-is-not-saving-after-server-reboot/


这将是一个潜在的问题,因为它随后将无法从DHCP提取对名称服务器的更改-它不会经常更改,但我仍然希望它能够正常工作
Adam C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.