Вопрос или проблема
Я не могу найти ничего (Google, man-страницы) о том, в каком порядке следует использовать строку поиска при поиске хоста в DNS с несколькими уровнями поддоменов.
Команды host и dig работают нормально и будут работать в любом случае, однако при попытке пинговать или подключаться по SSH к хосту ищется только первый домен если это поддомен более высокого уровня.
Итак, приведённый ниже запрос не работает при пинге, ищется только server.internal.company.com, а не server.yyz.internal.company.com
search internal.company.com yyz.internal.company.com
Однако, если их поменять местами, как показано ниже, разрешение будет работать как для server
, так и для server.yyz
search yyz.internal.company.com internal.company.com
Так что мой вопрос: это баг или я что-то пропустил в документации/RFC, где указано, в каком порядке должны быть домены поиска?
Это баг/ограничение в старых версиях Linux.
Ответ или решение
Вопрос о порядке доменов поиска в файле resolv.conf в операционной системе Red Hat Enterprise Linux (RHEL) и других дистрибутивах Linux действительно является важным как для системных администраторов, так и для IT-специалистов. Давайте рассмотрим это более подробно.
Понимание resolv.conf и доменов поиска
Файл resolv.conf отвечает за конфигурацию резолвера DNS и задает параметры, необходимые для разрешения имен. Основные параметры в этом файле включают:
- nameserver – указывает IP-адреса DNS-серверов.
- search – задает список доменных имен, которые будут автоматически добавляться к запрашиваемым именам хостов при их разрешении.
Порядок доменов поиска
Вы правы в том, что порядок, в котором перечисляются домены в строке search, имеет значение. При попытке разрешить имя хоста, система будет последовательно добавлять указанные доменные имена из строки search, начиная с первого. Однако здесь возникает один важный момент: если первый домен в списке является высшим по иерархии (например, internal.company.com), то запросы к более низким поддоменам (например, yyz.internal.company.com) могут обрабатываться неправильно или не обрабатываться вообще.
Пример работы
-
Если у вас следующая конфигурация:
search internal.company.com yyz.internal.company.com
При попытке разрешения имени server будет производиться поиск server.internal.company.com, но запрос к server.yyz.internal.company.com будет игнорироваться, так как система остановится на первом результате.
-
Когда порядок изменен:
search yyz.internal.company.com internal.company.com
Теперь запрос к server будет обрабатываться корректно, так как система сперва попытается разрешить server.yyz.internal.company.com, прежде чем вернуться к более высокому уровню.
Причины такой работы
Причиной такого поведения считается реализация DNS-резолвера на уровне ядра Linux, который изначально не учитывает поддомены, если основной домен уже был найден. Таким образом, более ранние версии Linux имеют ограничение, заключающееся в том, что резолвер ищет только по первому указанному домену, если он совпадает по более высокой иерархии.
Решения
Для устранения этой проблемы рекомендуется:
- Переставить порядок доменов в строке search, как уже было указано.
- Обновить программное обеспечение до более поздней версии, где эти ограничения могут быть устранены.
- Использовать полные имена при обращении к ресурсам, что позволяет избежать проблем с порядком доменов.
Заключение
Проблема, о которой вы упоминаете, не является ошибкой, а следствием ограничения старых версий системы. Это важно учитывать при настройке сети и конфигурации DNS в RHEL и других дистрибутивах Linux. Рекомендуется всегда проверять документацию и читывать обновления, чтобы избежать подобных ситуаций. Если вам требуется более детальная информация, вы можете обратиться к Red Hat knowledge base.
Соблюдение правильного порядка доменов в файле resolv.conf — это важный аспект, который может значительно упростить администрирование вашей инфраструктуры и повысить эффективность работы сетевых приложений.