CentOS удалит любые ручные изменения, внесенные в /etc/resolv.conf
периодически. Значения по умолчанию в Linux неудовлетворительны с точки зрения переключения при сбое в разумные сроки (запросы серверов имен в одном и том же порядке каждый раз, тайм-аут 5 секунд, 2 попытки).
Следовательно, первый DNS в вашем resolv.conf
по сути критический путь. Если это не удается, вы можете смотреть за 10 секунд до отказа.
Эти значения по умолчанию можно настроить (см. resolv.conf man-страницу), но как сделать какие-либо изменения в CentOS постоянными и сохранить их после перезагрузки и т. д.?
Ответ можно найти в /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
Принятый ответ - при использовании устаревших сетевых сценариев. Если вы используете Сетевой менеджер у тебя может даже не быть /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
также удалит любое другое значение тайм-аута.
NB: Изучая это, я наткнулся на связанная ошибка это было исправлено в сетевой менеджер v1.14.6, v1.15.2-dev и v1.16. Если вы столкнулись с какой-либо проблемой, проверьте свой сетевой менеджер версия первая.
Если вам нужно сделать это с плоскими файлами, а не 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 этот сценарий будет выполнен, заменив файл своим собственным.
Вы можете указать NetworkManager не управлять /etc/resolv.conf
файл все вместе.
Создать
/etc/NetworkManager/conf.d/90-dns-none.conf
файл со следующим содержанием:[main] dns=none
Перезагрузите службу NetworkManager:
systemctl reload NetworkManager
В документации есть второе решение, которое включает замену /etc/resolv.conf
с символической ссылкой на ваш файл.
Прочтите это: 22. Ручная настройка файла /etc/resolv.conf
Поскольку этот ответ появился в моих поисках, как это сделать на моей машине (MX Linux, производная от Debian), и у него не было ответа для этого дистрибутива, я хочу добавить, как это сделать для этого дистрибутива:
Отредактируйте этот файл:
/etc/resolvconf/resolv.conf.d/head
просто добавь
resolv_conf_options=rotate\ timeout:1\ retries:1
в твоем resolvconf.conf
В прошлый раз я столкнулся с той же проблемой с моим новым подписанным Linux VPS. Как я решил, это было использовать команду chattr + i, чтобы сделать файл неизменяемым. Просто перейдите в папку / etc и запустите ее после того, как вы внесли необходимые изменения в файл resolv.conf:
chattr + я resolv.conf
Если вы хотите вернуть настройку, просто сделайте следующее:
chattr -i resolv.conf
Полное руководство для справки: http://boxtutor.com/fix-etcresolv-conf-is-not-saving-after-server-reboot/