Назад | Перейти на главную страницу

PowerDNS: пересылать запросы на несуществующие записи на другой сервер того же домена?

Скажем, у меня есть два DNS-сервера, предоставляющих записи для частного домена.

DNS1: 192.168.1.10 - PowerDNS on Linux, primary authoritative
DNS2: 192.168.1.11 - Windows DNS for a custom application, acting as authoritative
Domain: mydomain.com

DNS1 - это «статический» сервер, на котором размещается несколько записей A, которые редко или никогда не меняются:

server-01.mydomain.com
gateway.mydomain.com
test.mydomain.com

DNS2 - это сервер, принимающий динамические обновления, который подключается к настраиваемому приложению, требующему Windows DNS, и размещает записи A, которые могут изменяться в реальном времени:

dyn-100.mydomain.com
dyn-101.mydomain.com
iot-lights.mydomain.com
...

Как есть, оба сервера являются "авторитетными" для mydomain.com. Однако у каждого из них есть разные записи. На обоих серверах также находится домен обратного просмотра с соответствующими записями PTR для известных им A-записей.

Я не хочу настраивать несколько DNS-серверов на клиентах.

Могу ли я настроить сервер PowerDNS для автоматического запроса другого сервера, если он сам не имеет записи, которая может выполнить запрос?

Пример: если я запрашиваю DNS1 для поиска dyn-100.mydomain.com, у него нет записи для этого хоста, поэтому обычно NXDOMAIN ответ будет доставлен. Вместо этого я бы хотел, чтобы DNS1, обнаружив, что он не может выполнить запрос, запросил DNS2; если DNS2 отвечает допустимой записью, DNS1 должен переслать эту запись клиенту. Если DNS2 также не имеет записи, DNS1 должен отправить NXDOMAIN.

Я понимаю, что в этом случае DNS1, вероятно, будет кэшировать для DNS2 - это нормально, если DNS1 подчиняется TTL. Таким образом, я могу настроить динамические записи с низким TTL.

То же должно работать и для PTR-записей в обратной зоне - если dyn-100.mydomain.com Я сидел 192.168.1.100, затем запрос DNS1 для 100.1.168.192.in-addr.arpa должен вернуться dyn-100.mydomain.com. из DNS2.

Запись SOA настроена на совпадение на обоих хостах, так что это не проблема, но в экземпляре (не очень хорошей идее), который отличается от SOA, запрашиваемый сервер должен вернуть свой SOA, поскольку он у него есть. Другими словами, DNS1 должен обращаться к DNS2 только в том случае, если он не может выполнить сам запрос для домена.

Это возможно?

РЕДАКТИРОВАТЬ: Я был бы в порядке с идеей некоторой формы репликации, но я не знаю, возможно ли это между Windows и PowerDNS. То есть я был бы доволен сценарием, в котором сервер PowerDNS раз в час односторонне синхронизирует данные с сервера Windows, добавляя, обновляя и удаляя записи по мере необходимости, а затем отправляя все запросы с сервера PowerDNS. Предостережение заключается в том, что записи, которые существуют локально на сервере PowerDNS, никогда не должны удаляться, но записи, удаленные сервером Windows, должны быть удалены с сервера PowerDNS. Помещение статических записей на DNS-сервер Windows не будет работать, так как это будет мешать работе пользовательского приложения.

Если вы поместите каждый из своих статических As (которых у вас не так много) в отдельную зону (так что по одной зоне на имя!), Вы можете просто AXFR mydomain.com из Windows при каждом обновлении. PowerDNS позволит более конкретным зонам переопределять контент в mydomain.com.

В качестве альтернативы настройте явную пересылку в любом используемом вами рекурсоре, поместив в него список статических записей, указывающих на DNS1, а остальную зону - на DNS2.

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

Да, вы можете это сделать, но какой смысл иметь несколько DNS-серверов, если клиенты просто собираются получить один!

ты можешь использовать forward ( only | first ); с участием
forwarders { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] };
в разделе вашей зоны. подробнее здесь