Скажем, у меня есть два 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] ; ... ] };
в разделе вашей зоны. подробнее здесь