Мы настроили разделенный DNS для нашего домена, что заставляет внутренние клиенты разрешать различные записи DNS от внешних клиентов.
На данный момент эти две зоны управляются отдельно. Для записей, которые различаются между внутренними и внешними, это не проблема, но для всего остального все записи должны дублироваться в обоих местах. Большинство записей CNAME, записей MX, записей SPF и некоторых записей A необходимо вводить и поддерживать в обоих местах.
Пока это не по своей сути недопустимо, такое дублирование данных далеко не идеально с точки зрения дизайна. Я считаю, что в идеале внутренний сервер имен просто пересылает результаты с внешнего сервера имен, но позволяет нам переопределить или добавить дополнительные записи. Хотя похоже, что я мог бы использовать назначенного пересылки (например, dnsmasq), чтобы сделать что-то подобное, конфигурация плоского файла затруднила бы продажу идеи остальной части команды.
Кроме того, лучшее решение, которое я смог придумать, состоит из PowerDNS с сервером MySQL и веб интерфейс. Это позволяет довольно легко добавить зона и корневая запись A для каждого поддомена, который мы хотели бы переопределить (например, www.example.com), что означает, что другие записи в корневом домене (например, example.com) по-прежнему будут пересылаться с внешнего сервера имен.
Это все еще кажется, что я отклоняюсь от нормы в отношении чего-то, что предположительно очень распространено, верно? Есть ли более чистый способ управления разделенным DNS без сохранения повторяющихся записей? Или что-то мне не хватает?
В сети, где один из авторитетных серверов имен находится на границе внутренней сети, я использую bind
взгляды и $INCLUDE
директива:
mydomain-global.zone
:
@ IN SOA ns1 hostmaster ( 12345; 1D; 2M; 1M; 3H )
IN NS ns1
IN NS ns2
IN MX 10 mail
www IN A 1.2.3.4
other-public-host IN A 1.2.3.5
mydomain-internal.zone
:
$INCLUDE mydomain-global.zone
an-internal-record IN A 10.20.30.40
_kerberos IN SRV 0 0 88 dir
Зоны выбираются на основе определений видов:
view "internal" {
match-clients { 10.0.0.0/8; };
zone "mydomain" {
type master;
file "mydomain-internal.zone";
};
include "named.conf.internalzones";
}
view "global" {
match-clients { any; };
zone "mydomain" {
type master;
file "mydomain-global.zone";
};
Чтобы иметь возможность назначать записи разные цели для внутренних / внешних запросов, добавьте еще два фрагмента зоны и $INCLUDE
в нижней части mydomain-(internal|global).zone
.
Тот факт, что зоны должны иметь единую авторитетную точку администрирования, является неотъемлемой частью работы DNS; шансов, что это изменится в ближайшее время, очень мало.
Лучший (и официальный) способ автоматизировать это - использовать ddns и nsupdate. DDNS имеет определенный формат и может быть защищен и написан любым удобным для вас способом.