Связь Между Dhcpclient И Resolv.conf В Linux

Аннотация: описание того, как обновляется файл /etc/resolv.conf при работе DHCP-клиента, особенности разных ОС и варианты реализации.

Охват: Debian, Ubuntu, Centos/Fedora/RHEL; dhclient с resolvconf и без него.

NetworkManager не учитывается.

Слова: Я просто провел несколько дней (подробности на английском языке [ 1 ], [ 2 ]) выяснить, как правильно сохранить «опции вращения» в /etc/resolv.conf в разных дистрибутивах с работающим DHCP. Оказалось, что четкой документации по этому вопросу нет, и информацию приходилось собирать из различных источников, исходных текстов и экспериментальных данных.

Дальше будет сухо и по делу.

О чем мы говорим? Сетевой интерфейс компьютера можно настроить тремя способами: вручную/специализированным программным обеспечением, статически заданными настройками и через DHCP-клиент. (Есть и более экзотические способы, но эти три — основные).

Первый способ нам не интересен, со статической конфигурацией все просто — как написано, так и будет. DHCP интересен тем, что компьютер запрашивает настройки по сети у «кого-то».

Протокол DCHP имеет множество опций (настроек), которые могут изменить совершенно неожиданные настройки компьютера – часовой пояс, адрес сервера с точным временем, таблицу маршрутизации, имя сервера или домен и т.д. Из всего этого нас интересует возможность установки настроек DNS. .

Традиционно настройки преобразователя DNS хранятся в файле /etc/resolv.conf, и после продления аренды DHCP этот файл обновляется.

В этой статье объясняется, как именно «-» сделать этот файл.

DHCP-клиентское устройство Существует несколько реализаций DHCP-клиента, нас интересует ISC DHCP как наиболее распространенный.

Сам клиент называется /sbin/dhclient, однако стандартно для обновления настроек вызывается не он, а /sbin/dhclient-script. dhclient-script вызывает dhclient и использует его ответ для изменения различных частей системы.

Сам dhclient-скрипт содержит функцию make_resolv_conf, которая, собственно, и создает файл resolv.conf. Для простоты модификации (и путаницы для системных администраторов) в dhclient-script есть перехватчики.

Их положение варьируется (в Ubuntu Xenial и Debian Stretch это /etc/dhcp/dhclient-exit-hooks.d, в некоторых версиях Centos это /etc/dhclient-enter-hooks/ и т.д.).

Есть два типа крючков: вход и выход. Запись вызывается перед основной, когда dhclient-script, выход в конце.

Вы можете написать в хуках свою версию функции make_resolv_conf(), и тогда dhclient-script будет вызывать ее, а не встроенную.

Что именно происходит с арендой, определяется переменной причины (примеры значений: PREINIT, BOUND, RENEW, REBIND, REBOOT, EXPIRE, FAIL, RELEASE и т. д.).

Спасибо Максжуркин за указание (исправление) неточностей в данном разделе.

разрешение Этим активно пользуются авторы пакета resolvconf, который позволяет создавать файл /etc/resolv.conf по заданному шаблону (а не фиксированно, как в случае с нативной реализацией dhclient-script).

Они помещают файл (в Debian/Ubuntu) /etc/dhcp/dhclient-enter-hooks.d/resolvconf, который вызывает resolvconf -u (обновление) для создания новой версии resolvconf. Чтобы не мешать dhcpclient-скрипту, resolvconf управляет файлом /run/resolvconf/resolv.conf, а пакет resolvconf (не путать с предоставляемой им программой) во время установки заменяет /etc/resolvconf символической ссылкой.

.

/run/resolvconf/resolv .

conf. Типичная проблема при использовании resolvconf — отсутствие символической ссылки.

Если его нет, то dhclient-script просто перезапишет /etc/resolv.conf настройками DHCP-сервера, а resolvconf обновит свой файл в углу, лишь выдав предупреждение о том, что /etc/resolv.conf нет символическая ссылка.

Шаблоны resolvconf довольно просты:

  • /etc/resolvconf/resolv.conf.d/head
  • /etc/resolvconf/resolv.conf.d/base
  • /etc/resolvconf/resolv.conf.d/tail
head и Tail просто добавляются туда, где они должны быть, но base допускает всякие странные вещи, которые описаны в man resolvconf в разделе «ПОТРЕБИТЕЛИ ИНФОРМАЦИИ СЕРВЕРА ИМЕН»).

Особенности RHEL/Centos/Fedora Red Hat использует собственную версию скрипта dhclient-script, достаточно обширную и сложную, учитывающую множество настроек из ifcfg-ethXXX, в частности, заинтересовавшую меня опцию RES_OPTIONS. Debian и Ubuntu в основном используют исходную версию, в которой отсутствуют такие функции.

В Centos 7 в свое время в этом скрипте была ошибка, которая приводила к тому, что если в /etc/resolv.conf была строка 'options', то при перезагрузке из нее удалялись все остальные строки, кроме строки с опциями, а новые DNS-серверы в файл не добавлялись.

Теги: #Сетевые технологии #Системное администрирование #Администрирование серверов #Конфигурация Linux #Fedora #dns #centos #rhel #ubuntu #Debian #dhcp #resolv.conf

Вместе с данным постом часто просматривают: