Как сохранить такие параметры resolv.conf, как rotate, timeout в CentOS?

9

CentOS будет стирать любые ручные изменения, сделанные /etc/resolv.confпериодически. Значения по умолчанию в Linux невелики с точки зрения переключения при сбое в течение разумного времени (запросы к серверам имен в одинаковом порядке каждый раз, 5-секундный тайм-аут, 2 попытки).

Следовательно, первый DNS в вашем пути resolv.confявляется критически важным. Если это не удастся, вы можете посмотреть на 10 секунд, прежде чем переключиться.

Эти значения по умолчанию можно настроить (см. Справочную страницу resolv.conf ), но как сделать какие-либо изменения постоянными в CentOS и сохранить их после перезагрузок и т. Д.?

Адам С
источник

Ответы:

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 :

Чтобы добавить параметры, например, добавив rotateв bond0:

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также удалит любое другое значение тайм-аута.

NB. При просмотре я наткнулся на связанную ошибку, которая была исправлена ​​в network-manager v1.14.6 , v1.15.2-dev и v1.16 . Если вы столкнулись с какой-либо проблемой, сначала проверьте версию вашего сетевого менеджера .

Томас Гайот-Сионнест
источник
1
При добавлении нового ответа к принятому старому ответу полезно отметить, сколько лет вопросу и ответу. То, что считается наследием, не обязательно было так 4+ года назад, когда был задан вопрос. Вместо того, чтобы помечать как устаревшие, если вы заметили, когда изменились значения по умолчанию (какая версия CentOS - 8, может быть?), А затем продолжили добавлять свою информацию, это был бы гораздо более полезный ответ. В качестве альтернативы повторно спросите и ответьте на свою собственную версию (для более новых версий CentOS или, например, при использовании Network Manager) и свяжитесь с этой более старой версией для справки.
Адам С
Старый способ все еще может быть действительным, хотя ... NetworkManager существует уже давно, но вы все еще можете настроить старый способ как в Debian, так и в CentOS.
Томас Гайот-Сионнест
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 (есть ссылка на документы / что-то, чтобы показать это)? Я вижу это как вариант FreeBSD и Ubuntu, но не могу найти его в CentOS
Адам С
Это часть пакета openresolv
Евгений Ф
1
этот пакет, похоже, не является стандартным пакетом, так что на самом деле он не подходит для CentOS, особенно в контролируемых средах, но неплохой вариант в других местах
Adam C
-3

В прошлый раз я столкнулся с той же проблемой с моим новым подписанным VPS Linux. Я решил использовать команду chattr + i, чтобы сделать файл неизменным. Просто перейдите в папку / etc и запустите ее после того, как вы внесли необходимые изменения в файл resolv.conf:

chattr + i resolv.conf

Если вы хотите восстановить настройки, просто сделайте это:

chattr -i resolv.conf

Полное руководство для вашей справки: http://boxtutor.com/fix-etcresolv-conf-is-not-saving-after-server-reboot/

Chuichi
источник
Это может быть потенциальной проблемой, потому что тогда он не сможет получать изменения в серверах имен из DHCP - он будет меняться не часто, но я все равно хотел бы, чтобы он работал
Адам C