Вопрос или проблема
У меня есть VM с centOS, где я пытаюсь настроить dnsmasq для обращения к 2 DNS серверам. Эти DNS серверы обслуживают только запросы для доменов, в которых они находятся.
- DNS1 – 10.10.10.10 – обрабатывает только запросы для *.domain1.com
- DNS2 – 10.20.20.20 – обрабатывает только запросы для *.domain2.com
centOS# nmcli device show | grep DNS
IP4.DNS[1]: 127.0.0.1
centOS# tail -n 5 /etc/dnsmasq.conf
server=/domain1.com/10.10.10.10
server=/domain2.com/10.20.20.20
no-resolv
Проблема в том, что я продолжаю получать ошибку NXDOMAIN, когда запускаю nslookup.
- nslookup 10.10.10.100 10.10.10.10, работает нормально — Ожидаемо
- nslookup 10.10.10.100 10.20.20.20, ошибка NXDOMAIN — Ожидаемо
- nslookup 10.10.10.100, ошибка NXDOMAIN — Почему это не работает основываясь на конфигурации?
Сделанные попытки:
- Я пробовал использовать no-negcache. По какой-то причине, все запросы продолжают отправляться на второй DNS сервер (подтверждено через лог-запросы)
- Также пробовал использовать strict-order. Опять же, все, что говорит второй DNS сервер, считается окончательным, в то время как первый игнорируется.
Ну, ни один из ваших примеров nslookup на самом деле не делает запросы для domain1.com
или domain2.com
. Во всех трех примерах вы делаете только ‘обратные DNS’ запросы для 10.10.10.100
, что, конечно, не является ни одним из этих доменных имен.
Даже если бы он вернул PTR к чему-то.domain1.com, Dnsmasq не может этого знать заранее до того, как он сделает запрос!
Фактическое доменное имя, которое запрашивается, имеет специальный формат in-addr: в DNS нет настоящих обратных проверок, поэтому nslookup 10.10.10.100
делает запрос для 100.10.10.10.in-addr.arpa
из отдельной обратной зоны. Поэтому, если вы хотите распределять запросы обратной зоны в дополнение к обычным запросам доменных имен, вам нужны дополнительные server=
записи для этого:
server=/10.10.in-addr.arpa/10.10.10.10
server=/20.10.in-addr.arpa/10.20.20.20
или “удобные” опции rev-server=
:
rev-server=10.10.0.0/16, 10.10.10.10
rev-server=10.20.0.0/16, 10.20.20.20
Ответ или решение
Конфигурирование dnsmasq для работы с двумя отдельными доменами Active Directory
Теоретическая часть
В современной IT-инфраструктуре часто возникает необходимость объединения и управления несколькими доменами, что актуально при наличии разных групп пользователей или серверов, требующих отдельного управления. В вашем случае на CentOS виртуальной машине используется dnsmasq для обращения к двум DNS-серверам, которые обслуживают разные домены Active Directory: .domain1.com и .domain2.com. Каждое имя домена обрабатывается соответствующим DNS-сервером, и необходимо, чтобы запросы корректно направлялись именно к нужным серверам.
Анализ задачи
Во-первых, ваша текущая конфигурация файлов dnsmasq включает следующие строки:
server=/domain1.com/10.10.10.10
server=/domain2.com/10.20.20.20
no-resolv
Эти строки указывают dnsmasq использовать 10.10.10.10 для домена domain1.com и 10.20.20.20 для домена domain2.com, при этом опция no-resolv
отключает использование настроек резолвера из конфигурационного файла системного решателя (/etc/resolv.conf).
Проблема
Возникает ситуация, когда запросы на резолвер по умолчанию (например, nslookup 10.10.10.100
) приводят к ошибке NXDOMAIN. Это связано с тем, что такие запросы являются обратными DNS-запросами (reverse DNS lookup), которые требуют дополнительных настроек для обработки. Dnsmasq по умолчанию не знает, к какому серверу отправлять PTR-запросы, поскольку такие запросы используют не стандартные доменные записи, а специальные обратные адреса в формате in-addr.arpa.
Практическая реализация
Чтобы обеспечить правильную работу обратных DNS-запросов, необходимо указать серверы, обрабатывающие соответствующие зоны in-addr.arpa. Пример конфигурации:
server=/10.10.in-addr.arpa/10.10.10.10
server=/20.10.in-addr.arpa/10.20.20.20
Либо, как альтернатива, можно использовать директиву rev-server
, которая автоматически распределяет зоны обратного разрешения адресов:
rev-server=10.10.0.0/16, 10.10.10.10
rev-server=10.20.0.0/16, 10.20.20.20
Эти настройки обеспечат правильную маршрутизацию запросов PTR к нужным сервером, что позволит корректно обрабатывать запросы на обратное разрешение IP-адресов.
Завершение и тестирование
После внесения изменений необходимо перезапустить сервис dnsmasq для применения новых настроек:
sudo systemctl restart dnsmasq
Теперь вы можете протестировать работу конфигурации:
- Выполнить прямой запрос для проверки резолвинга доменных имен.
- Провести тестовые запросы на обратное разрешение адресов (например,
nslookup 10.10.10.100
) для проверки, что сервер обрабатывает их корректно.
Заключение
Внедрение правильной конфигурации dnsmasq для поддержки нескольких доменов и обработки обратных DNS-запросов критично для многоуровневых сетевых архитектур, требующих доступа и контроля над несколькими пространствами имен. Указанная конфигурация позволяет эффективно управлять запросами, минимизируя ошибки связности и обеспечивая устойчивую работу сетевых сервисов.