У компании работают несколько контроллеров домена, но VPN и ERP обращаются к одному серверу LDAPS. Когда он недоступен, каталог остаётся цел, однако пользователи не проходят проверку учётных данных. Такой случай описал системный администратор Тим Атли: все контроллеры хранили один каталог, а внешние службы зависели от единственного адреса LDAPS.

Бэкап здесь не поможет. Данные не потеряны, восстанавливать нечего. Нужно направить запросы на два контроллера и автоматически исключать тот, который перестал отвечать.

Для этого потребуются два контура защиты:

Балансировщик не заменяет второй контроллер. Он лишь распределяет подключения между уже работающими узлами.

Сначала найдите единственную точку отказа

Active Directory обычно не требует балансировщика для доменных компьютеров. Клиент сам находит контроллер через DNS и служебные записи каталога. Это отметил инженер Microsoft Прабхаш Шарма в разборе вариантов балансировки Active Directory.

Проблема начинается с приложений, которые принимают только один адрес LDAP или LDAPS. К ним могут относиться VPN-шлюзы, ERP-системы, сетевые хранилища и внутренние веб-сервисы.

Проверьте настройки каждого такого приложения. Если там записано имя конкретного контроллера, отказоустойчивость каталога до приложения не доходит.

Рабочая схема для одного домена выглядит так:

Приложение → единый адрес LDAPS → балансировщик → DC1
 ↘ DC2

Citrix-инженер Карл Сталхуд рекомендует подключать к балансировке не меньше двух контроллеров каждого домена. Оба узла должны обслуживать один каталог и принимать LDAPS-подключения.

Один общий HAProxy тоже может остановить вход пользователей. В руководстве Тайлера Варна HAProxy работает локально, на том же сервере, что и приложение. При такой схеме отказ прокси затрагивает одного потребителя, а не весь контур.

Если нужен общий виртуальный адрес, дублируйте сам балансировщик. Второй вариант — ставьте локальный прокси рядом с каждым приложением.

Что отказалоЧто сохранит доступЧто нужно проверить
Один контроллер доменаВторой контроллер и исправное переключениеПриложение повторяет запрос через единый адрес
Общий экземпляр HAProxyВторой прокси или виртуальный адрес двух проксиАдрес остаётся доступен после остановки первого экземпляра
Каталог повреждён или ошибочно изменёнПроверенная резервная копияКопия разворачивается отдельно и содержит нужные объекты
Сервер приложений 1С или СУБДРезервирование контура 1СВход и рабочие сеансы переходят на резервный узел

Вывод: два контроллера закрывают отказ одного DC, но не отказ прокси, СУБД или сервера 1С.

Балансировку каталога стоит проверять вместе с отказоустойчивым кластером 1С. Доступный LDAPS не спасёт пользователей, если остановились ragent, rmngr, rphost или СУБД.

Не путайте доступность с восстановлением

Балансировка отвечает на вопрос: куда отправить новый запрос, если один узел недоступен. Резервная копия отвечает на другой: откуда вернуть данные после повреждения.

AWS Directory Service разводит эти задачи тем же способом. Сервис распределяет каталог между зонами доступности, а ручные снимки хранит для восстановления данных. Одна мера не подменяет другую.

Для локального Active Directory логика та же. Репликация переносит изменения между контроллерами, включая ошибочные. Если администратор удалил нужный объект, второй DC не станет независимой копией прошлого состояния.

Поэтому настройка балансировщика не отменяет резервное копирование 1С и каталога. Проверяйте восстановление отдельно от испытания отказа.

Рабочий контур ведите через LDAPS

LDAPS шифрует LDAP-трафик с помощью TLS. Для него используют TCP-порт 636. На контроллерах домена должны стоять подходящие сертификаты.

Открытый LDAP обычно работает через порт 389. Переводить на него рабочий контур ради простой настройки не стоит. Active Directory не принимает смену истёкшего пароля через незашифрованное LDAP-соединение, о чём пишет Карл Сталхуд в руководстве по Citrix ADC.

У балансировщика есть два способа передать LDAPS-трафик.

РежимГде завершается TLSКак проверяется сертификатЧто видит балансировщик
TCP pass-throughНа контроллере доменаКлиент проверяет сертификат DCЗашифрованный TCP-поток
SSL_TCPНа балансировщике, затем TLS создаётся заново до DCКлиент проверяет сертификат виртуального сервераРасшифрованный запрос внутри прокси
Открытый LDAPTLS не используетсяСертификата нетНезашифрованный LDAP-запрос

Вывод: TCP pass-through оставляет сертификаты на контроллерах, а SSL_TCP переносит часть управления TLS на балансировщик.

Для простой схемы с HAProxy подходит TCP pass-through. Тим Атли использовал mode tcp, чтобы передавать LDAPS до контроллеров без завершения TLS на прокси.

Не копируйте из его примера настройку ssl-server-verify none. Сам автор предупреждает: отключённая проверка сертификата открывает путь атаке посредника.

Если HAProxy сам подключается к контроллерам через TLS, укажите доверенный центр сертификации через ca-file. Тайлер Варн отдельно описывает такую проверку в своём руководстве по LDAP-бэкенду HAProxy.

Сертификат должен совпадать со способом подключения

При TCP pass-through клиент получает сертификат контроллера домена. Имя в сертификате должно соответствовать имени, которое клиент проверяет при TLS-соединении.

При SSL_TCP клиент получает сертификат виртуального сервера. Сертификаты контроллеров проверяет уже балансировщик.

Из-за этой разницы нельзя механически переключить режим с TCP на SSL_TCP. Сначала определите, кто завершает TLS и какую цепочку доверия проверяет каждая сторона.

Проверьте три соединения:

  1. приложение подключается к единому имени LDAPS;
  2. балансировщик достигает обоих контроллеров по порту 636;
  3. сертификатная цепочка проходит проверку без отключения контроля.

Если проверка работает только после отключения сертификатов, схема ещё не готова. Исправьте имя, цепочку или набор доверенных центров.

Открытый порт не доказывает работу каталога

TCP-проверка отвечает лишь на один вопрос: принимает ли сервер соединение на порту 636. Контроллер может открыть порт, но не выполнить LDAP-запрос.

Citrix ADC применяет LDAPS-monitor глубже. Монитор входит под служебной учётной записью, выполняет LDAP-запрос и проверяет ответ каталога. Для каждого домена Карл Сталхуд настраивает отдельный монитор.

Такую же логику стоит сохранить при другом балансировщике. Проверка должна повторять минимальную полезную операцию приложения:

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

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

ldap-check HAProxy не подходит Active Directory без проверки

В примере Тайлера Варна параметр ldap-check выполняет анонимный bind. Для OpenLDAP такая проверка может пройти.

Active Directory по умолчанию запрещает анонимный bind. Тим Атли столкнулся с этим ограничением и заменил штатный ldap-check проверкой, совместимой с AD.

Здесь легко получить ложную аварию. Контроллер отвечает настоящим пользователям, но HAProxy считает его недоступным из-за запрещённого анонимного входа.

Перед переносом конфигурации в рабочий контур выясните, какой bind выполняет установленная версия HAProxy. Затем проверьте его на обоих контроллерах.

Версия тоже имеет значение. Тим Атли описал ошибки проверки LDAPS в HAProxy 1.8 из репозитория Debian. Его экземпляр сообщал Not LDAPv3 protocol, хотя контроллеры обслуживали LDAPS.

Это не основание переносить HAProxy в контейнер при любой ошибке. Сначала зафиксируйте версию, текст сообщения и тип проверки. Затем сверяйте поведение с документацией именно этой версии.

Результат проверкиВероятная причинаЧто проверитьЧто изменить
TCP проходит, LDAP-запрос не выполняетсяСлужба принимает соединение, но каталог не отвечаетBind и короткий поисковый запросИспользовать прикладную LDAPS-проверку
Оба DC помечены недоступными одновременноИстёк пароль служебной записиВход этой записью на каждом DCЗаменить пароль и обновить монитор
AD отклоняет проверку, пользователи входятМонитор делает анонимный bindСпособ работы ldap-checkНастроить bind, совместимый с AD
Проверка сообщает Not LDAPv3 protocolВерсия HAProxy неверно проверяет LDAPSВерсию пакета и известные ошибкиОбновить пакет или сменить тип проверки
Один DC не проходит TLSОшибка сертификата или цепочки доверияИмя, срок, издателя и ca-fileИсправить сертификат, не отключать проверку

Вывод: монитор должен подтверждать LDAP-ответ, иначе балансировщик принимает открытый порт за исправный каталог.

Не начинайте с выбора продукта

Azure Load Balancer, Citrix ADC, F5, Kemp и HAProxy могут передавать TCP-трафик к контроллерам. Название продукта не исправляет ошибочную схему.

Azure Load Balancer работает на четвёртом сетевом уровне и может распределять подключения между DC в Azure. Azure Application Gateway ориентирован прежде всего на веб-приложения. Для LDAPS его расширенные функции не дают автоматического преимущества.

Сначала зафиксируйте требования:

После этого выбирайте инструмент, который закрывает эту схему. Для одного локального приложения может хватить HAProxy рядом с ним. Для общего адреса нескольких систем потребуется резервирование прокси.

Проверьте переключение настоящим входом

Испытание должно показать, что пользователь проходит проверку после отказа каждого контроллера. Зелёного статуса на панели балансировщика недостаточно.

Тайлер Варн проверял LDAP-бэкенд командой ldapsearch, затем останавливал службу на серверах по очереди. Для Active Directory используйте запрос с обычным bind и настройками своего домена.

Порядок проверки:

  1. Подключите тестовое приложение к единому имени LDAPS.
  2. Выполните вход при работающих DC1 и DC2.
  3. Остановите службу каталога на DC1.
  4. Дождитесь, пока монитор исключит DC1.
  5. Повторите вход через тот же адрес.
  6. Верните DC1 и дождитесь успешной проверки.
  7. Повторите испытание с остановкой DC2.
  8. Просмотрите журналы прокси и события контроллеров.

Не меняйте адрес приложения между попытками. Иначе вы проверите ручное переключение, а не работу балансировщика.

Во время испытания следите за временем исключения узла. Слишком редкая проверка задержит переход. Слишком частая создаст лишние входы служебной записи и заполнит журналы.

Готового интервала для любого контура нет. Выберите его по допустимой паузе входа, затем подтвердите результат остановкой каждого DC.

Что должно работать после настройки

Для одного домена минимальная схема включает два контроллера, LDAPS на порту 636 и единый адрес для приложения. Монитор выполняет AD-совместимый запрос, а резервная копия хранится отдельно.

Работу можно принять по пяти признакам:

Остановите ещё и HAProxy. Если вход оборвался, единственная точка отказа лишь сменила адрес. Дублируйте прокси либо размещайте локальный экземпляр рядом с каждым потребителем.

active-directory haproxy ldaps отказоустойчивость резервное копирование