Синхронизация split-brain DNS

Последнюю версию скрипта вы всегда можете найти на GitHub.

Множество компаний использует одну и ту же доменную зону, как во внутренней инфраструктуре, так и во внешней. В случае, если внутренняя зона, по совместительству, является именем домена Active Directory и внутренние пользователи должны обращаться к некоторым серверам из этой зоны с использованием их внешних IP-адресов, возникает проблема: Каким то образом все такие записи должны присутствовать в синхронизированном состоянии и на внешних, и на внутренних DNS-серверах.
Существует несколько способов решения такой проблемы:

1. Использовать контроллеры домена Active Directory для разрешения имён и внешними, и внутренними пользователями.

За:

  • Единая точка управления.
  • Не требуется никакого дополнительного ПО на контроллерах домена.

Против:

  • Невозможно сделать так, чтобы для одного и того же имени внешним и внутренним пользователям возвращалась разная информация.
  • Необходимо предоставить внешним пользователям доступ во внутреннюю инфраструктуру, что может быть невозможно по политикам безопасности. Злонамеренный пользователь может получить информацию о внутренней инфраструктуре.
2. Использовать два независимых набора DNS-серверов: внутренние и внешние.

За:

  • Можно сделать так, чтобы для одного и того же имени внешним и внутренним пользователям возвращалась разная информация.
  • У внешних пользователей отсутствует доступ к внутренней инфраструктуре.
  • Не требуется дополнительного ПО на контроллерах домена.

Против:

  • Две точки управления. DNS-записи могут стать рассинхронизированными.
3. Использовать новую функциональность Windows Server 2016 – политики DNS.

(https://blogs.technet.microsoft.com/teamdhcp/2015/08/31/split-brain-dns-in-active-directory-environment-using-dns-policies/)
За:

  • Единая точка управления.
  • Можно сделать так, чтобы для одного и того же имени внешним и внутренним пользователям возвращалась разная информация.

Против:

  • Контроллеры домена должны быть обновлены на новейшее ПО, что подходит не для всех организаций.
  • Необходимо предоставить внешним пользователям доступ во внутреннюю инфраструктуру, что может быть невозможно по политикам безопасности. Злонамеренный пользователь может получить информацию о внутренней инфраструктуре.

 

Лично я пока предпочитаю второй способ, с различными внешними и внутренними DNS-серверами. В этом случае появляется еще одна проблема: Как обеспечить своевременную синхронизацию тех DNS-записей, которые должны быть одинаковыми для внутренних и внешних пользователей?

Избавимся, для таких записей, от двух точек управления. Я выбрал внешние DNS-серверы в качестве основных — информация с них будет синхронизироваться на внутренние.

Для автоматизации синхронизации, я написал скрипт, который вы можете найти ниже и на моём ГитХабе. Скрипт поддерживает несколько доменов и требует для работы два конфигурационных файла:

  • Файл со списком полных доменных имён, которые вы хотите синхронизировать. (Synchronize-DNSZones-REC.txt)
  • Файл со списком доменных зон и DNS-серверов для каждой зоны. Вы можете объявлять в нём и поддомены — для каждой записи автоматически выбирается наиболее подходящий ей домен. (Synchronize-DNSZones-NS.txt)

 

Например, файл доменных зон у вас следующий:
Zone;ExtIP;IntIP
example.com;192.0.2.2;198.51.100.2
example.net;192.0.2.3;198.51.100.3
foo.example.net;192.0.2.4;198.51.100.4

А список записей для синхронизации выглядит так:
foo.bar.example.com
foo.example.com
foo.example.net
bar.example.net
bar.foo.example.net

В таком случае, записи и доменные зоны будут сопоставлены следующим образом:
foo.bar.example.com - example.com
foo.example.com - example.com
foo.example.net - example.net
bar.example.net - example.net
bar.foo.example.net - foo.example.net

По умолчанию, скрипт создаст новый журнал событий с именем «DNS Zones Synchronizer». В него будут записываться ошибки и предупреждения — вы можете нацелить вашу систему мониторинга на этот журнал.
В дополнение к журналу событий, каждый день сценарий создаёт новый текстовый журнал, куда подробно записывает ход своей работы.

Если вы знаете другие способы синхронизировать split-brain DNS, или у вас есть предложения по этому скрипту, или проблемы с его использованием, пожалуйста, оставляйте комментарии или присылайте пулл-реквесты.

Leave a Reply

Your email address will not be published. Required fields are marked *