Назад | Перейти на главную страницу

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

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 этот сценарий будет выполнен, заменив файл своим собственным.

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

Вы можете указать 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

Поскольку этот ответ появился в моих поисках, как это сделать на моей машине (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/