Рекомендации по настройке hostname & fqdn

Рекомендации по настройке hostname & fqdn#

Компьютеры в домене используют FQDN имена, поэтому администраторам крайне важно понимать механизм их формирования. В операционных системах Linux для получения ответа на этот вопрос используется информация сразу из нескольких источников.

Утилита hostname без параметров возвращает локальное имя машины из файла виртуальной системы ядра /proc/sys/kernel/hostname. Есть так же файл /etc/hostname, который позволяет менять имя, но изменения вступают в силу только после перезагрузки. Можно поменять имя хоста без перезагрузки, используя утилиту hostnamectl set-hostname <имя_машины>.

При использовании дистрибутивов Debian рекомендуют в качестве имени хоста устанавливать короткое имя, например, «pc-1», а не полное доменное имя FQDN, например, «pc-1.ald.company.local». В этом случае при вызове утилиты hostname без параметров будет отображаться значение «pc-1». Но можно в качестве имени хоста установить и полное имя FQDN, т. е. «pc-1.ald.company.local», тогда очевидно, что вызов hostname без параметров будет уже выдавать «pc-1.ald.company.local», а не «pc-1». Разница проявит себя в тех ситуациях, где используется имя хоста, например:

  • утилита hostname с ключом -f в соответствии с настройками /etc/nsswitch.conf сначала ищет FQDN хоста по файлу /etc/hosts, который содержит строки вида:

    IP-адрес каноническое_имя_узла [псевдонимы...]
    

    Алгоритм берет локальное имя хоста и ищет в файле /etc/hosts строку с этим именем, если оно было найдено, возвращает каноническое имя из строки, как FQDN хоста.

    Если в качестве hostname будет выступать FQDN, то поиск сработает, но не по псевдониму из строки, а по каноническому имени узла.

  • если в файле hosts искомая запись не найдена, то в соответствии с настройками /etc/nsswitch.conf выполняется поиск хоста по DNS. Так как имя hostname, например, «pc-1», не содержит точек (см. параметр ndots), то к нему добавляется суффикс search из файла /etc/resolv.conf, например, «ald.company.local» и получает полное имя fqdn «pc-1.ald.company.local», и запрашивает A- и AAAA-записи для этого FQDN у DNS сервера. Если DNS сервер вернет какую-нибудь запись, пусть даже с IP-адресом, который не назначен ни одному из интерфейсов этого компьютера, то этот FQDN будет считаться валидным.

При вводе машины в домен инструментами ПКД именем хоста устанавливается FQDN. При вводе в домен ванильного Debian с помощью ванильного freeipa клиента поведение продукта в части hostname аналогичное — именем хоста устанавливается FQDN машины. Такой подход принят в Red Hat, и он наследуется при использовании FreeIPA, т. к. она сейчас разрабатывается как upstream Red Hat IdM.

При данном подходе вызов команды hostname без параметров будет выдавать FQDN хоста. Для серверов будет правильно указать в файле /etc/hosts строку, которая будет соответствовать этому FQDN, чтобы hostname -f работал без обращения к DNS, это и быстрее и надежнее.

На серверах предпочитаемая форма hosts выглядит следующим образом.

127.0.0.1 localhost
10.0.1.2 dc-1.ald.domain.local dc-1
# 127.0.1.1 dc-1 --- данную строку нужно закомментировать или удалить, т.к. адрес локальной петли будет иметь приоритет по отношению к любому другому локальному адресу

На клиентских машинах и серверах, где нет служб, настроенных на конкретный адрес локальной сети, можно разрешать доменное имя в IP-адрес локальной петли.

127.0.0.1 localhost
127.0.1.1 pc-1.ald.domain.local pc-1

Если в hosts есть две записи для имени сервера, то при разрешении имени сервера предпочтение отдается адресу 127.0.1.1, так как он имеет больший приоритет. Настройки приоритетов указаны в файле /etc/gai.conf.

127.0.0.1 localhost
127.0.1.1 pc-1.ald.domain.local pc-1
10.0.1.2 pc-1.ald.domain.local pc-1