Устранение проблем с разрешением DNS-имен для домена .local в современенных дистрибутивах Linux

То, что мы сегодня будем разбирать - это не проблема, а просто "песня". Такого рода вопросы очень любят мои коллеги, так как они предоставляют им возможность поспорить на тему баг это или фича, перетряхнуть древние записи на Stack Overflow, разлиться мыслью по древу или банально затеять обсуждение на пару сотен комментариев под заданным в профильной группе вопросом.

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 26 Фев 2018 (последние правки 1 месяц, 1 неделя)

active directory dev ldap network manager

То, что мы сегодня будем разбирать - это не проблема, а просто "песня". Такого рода вопросы очень любят мои коллеги, так как они предоставляют им возможность поспорить на тему баг это или фича, перетряхнуть древние записи на Stack Overflow, разлиться мыслью по древу или банально затеять обсуждение на пару сотен комментариев под заданным в профильной группе вопросом.

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

Итак, как я уже говорил - это не проблема, а просто "песня" какая-то и сейчас я объясню почему... Как вы знаете, в Windows-среде, почему-то, принято создавать внутренний домен Active Directory вида <имя-компании>.local и вот только недавно от такой практики стали немного отходить из-за конфликта, как раз таки, с доменом .local. А домен .local, в современном понимании - это понятие из терминологии Zeroconf для автоматически конфигурируемых сетей и "родила" его корпорация Apple и ,так как в яблоках эта штука работает на ура, производители принтеров и ряда другого оборудования стали его активно пользовать.

Если вы решите почитать Википедию на эту тему, то найдете там вот такую запись:

Существует два способа разрешения имен. Apple Computer использует Multicast DNS (mDNS), а Microsoft — Link-local Multicast Name Resolution (англ.) (LLMNR). Эти протоколы имеют мало отличий. mDNS выбирает имя в пространстве «.local» и объявляет его на некоторый мультикаст-адрес. Это приводит к специальной семантике для пространства имен .local, что считается проблемой для некоторых членов IETF. Текущий черновик LLMNR позволяет устройству выбрать любое доменное имя, что рассматривается как недостаток в безопасности некоторыми членами IETF . mDNS совместим с DNS-SD как описано ниже, а LLMNR не совместим.

Википедия Zeroconf

Теперь вы ,наверное, поняли из-за чего происходит этот конфликт интересов. Как мы знаем, Active Directory довольно ответственно относиться к обновлению DNS-записей и хранит сведения о записях домена в LDAP, а mDNS - это некий безбашенный субпродукт, созданный без оглядки на безопасность, но безопасность это еще меньшая из зол, так как рабочей станции надо будет разобраться с чем в этом хаосе ей работать и запрашивать у "виртуальной принтерной сети" сведения о контроллерах домена бесполезно.

Все описания пространных ситуаций с выстраиванием цепочек для передачи запросов сначала домену mDNS, а если там не помогло, то уже DNS-серверам домена иногда работают, а иногда нет. Причем, совершенно непонятна может быть точка отказа. И если в Windows это было решено набором внутренних "костылей", то запрос DNS в современных дистрибутивах Linux производиться максимально извращенно, чтобы системный администратор сошел с ума окончательно.

Сначала система смотрит nsswitch.conf на предмет правил разрешения имен и, когда доходим до правил разрешения dns (отправить запрос к DNS), отправляем запрос не тому DNS который мы получили по DHCP, а локальному mdns-серверу, который уже перешлет вышестоящему (если перешлет конечно). Проблема может проявляться в нескольких вариантах и в первом случае DNS-запрос nslookup для .local домена не вернет данных, а во втором случае DNS-запрос вернет данные, но ,например, команда ping не сможет обнаружить домен .local.

Я противник использования в корпоративных сетях разного рода mdns, а если уж вам так захотелось дать имя принтеру, то соизвольте его завести в виде записи в оснастке управления DNS-сервером. Как я уже говорил, я рекомендую начать с "приведения в порядок" /etc/nsswitch.conf.

Изначально интересующий нас раздел содержит следующие записи:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

Соответственно, в этом режиме сначала производится поиск в файле /etc/hosts, затем запрос идет к mdns, после чего возвращается ответ "не найдено". Теоретически mdns чего-то там кэширует, работает с демоном Avahi и производит много прочей хипстерской дичи, без которой жили раньше. Я сразу же модифицирую эту "схему" к классическому виду:

hosts:          files dns

Это схема "Здорового системного администратора", и я рекомендую использовать ее для сохранения вашего "душевного здоровья". Но тут кроется еще один сюрприз, а именно, то что это сработает только на "серверных системах", где не установлен пакет Avahi, а попытка удалить пакет Avahi на современной рабочей станции утащит за собой в ад половину системы. В независимости от полученных по DHCP-настроек в /etc/resolv.conf будет записан адрес DNS-сервера 127.0.0.1, а сам файл resolv.conf автоматически пересоздается отдельным демоном.

Можно, кстати, поинтересоваться у Network manager, что он вообще думает по этому поводу при помощи команды:

# nmcli dev show | grep DNS

Следовательно, при использовании NetworkManager и копать надо в эту сторону, а разгадка обычно находится в параметре dns=dnsmasq и для отключения использования mdns службой NetworkManager можно закомментировать в файле /etc/NetworkManager/NetworkManager.conf параметр:

#dns=dnsmasq

Он может быть и не в этом файле и в расположение этого параметра издевательски изменяется от версии к версии, поэтому я рекомендую использовать поиск.

Похожие статьи

Автоматическое обновление DNS-записи рабочей станции Linux при вводе в DNS-домен (No DNS domain configured for computer. Unable to perform DNS Update)

Автоматическое обновление DNS-записи рабочей станции Linux при вводе в DNS-домен (No DNS domain configured for computer. Unable to perform DNS Update)

После выхода Samba 4 ввести рабочую станцию под управлением Linux в Windows домен стало гораздо проще, но все еще переодически всплывают нестандартные ситации такие как ошибка No DNS domain configured for computer. Unable to perform DNS Update.


Настройка основного и резервного DNS-серверов с автоинкрементом серийного номера зоны на базе PowerDNS

Настройка основного и резервного DNS-серверов с автоинкрементом серийного номера зоны на базе PowerDNS

Как вы наверное знаете, вам совсем не обязательно использовать DNS-сервера провайдера для управления вашим доменом и вы можете осуществлять хостинг DNS-записей на своих собственных DNS-серверах. Такой подход дает большую гибкость в управлении DNS-зоной, но и настройка DNS-серверов работающих в режиме MASTER-SLAVE это не самая тривиальная задача. Если вы все же решили изучить этот вопрос, то вы наверное обратили внимание, что 90% статей сводятся к настройке двух DNS-серверов Bind в режиме ведущий-ведомый и может показаться, что bind это единственный Opensource DNS-сервер.


ON-Line утилиты тестирования DNS-серверов

ON-Line утилиты тестирования DNS-серверов

Так же как и в случае в почтовыми серверами, при настройке собственных DNS-серверов, вам иногда может понадобится взгляд на вашу инфраструктуру так сказать со стороны и для этого существует несколько web-сервисов которые протестируют ваши SOA-записи, проверят соответствие NS-серверов, серийные номера зоны и много других рутинных операций.


Сборка Power DNS рекусора из исходных кодов

Сборка Power DNS рекусора из исходных кодов

Сборка DNS-рекурсора особой сложности не представляет и я написал эту заметку исключительно для того чтобы в дальнейшем не мучаться с подбором необходимых для сборки зависимых пакетов


Отзывы и комментарии