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

Разделенный DNS - самое чистое решение для простого обслуживания?

Мы настроили разделенный 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 имеет определенный формат и может быть защищен и написан любым удобным для вас способом.