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

Как сделать AD высокодоступным для приложений, которые используют его как службу LDAP

Наша ситуация

В настоящее время у нас есть много веб-приложений, которые используют LDAP для аутентификации. Для этого мы указываем веб-приложение на один из наших контроллеров домена AD, используя порт LDAPS (636).

Когда нам нужно обновить контроллер домена, это вызывает у нас проблемы, потому что еще одно веб-приложение может зависеть от любого контроллера домена.

Что мы хотим

Мы хотели бы указать нашим веб-приложениям на «виртуальный» IP-адрес кластера. Этот кластер будет состоять как минимум из двух серверов (чтобы каждый сервер кластера мог быть заменен и обновлен). Затем серверы кластера будут проксировать LDAPS-соединения с контроллерами домена и смогут определить, какой из них доступен.

Вопросы

Для всех, кто имел опыт создания кластера высокой доступности для интерфейса LDAP AD:

  1. Какое программное обеспечение вы использовали для кластера?
  2. Есть предостережения?
  3. Или, возможно, совершенно другая архитектура для достижения чего-то подобного?

Обновить

Возможно, мой вопрос изначально был недостаточно ясен. Мои извинения за это.

Эти веб-приложения не разрабатываются нами и не поддерживают AD. Они запрашивают только имя хоста / IP-адрес LDAP-сервера. К сожалению, с этим ограничением приходится работать. Я понимаю как SRV records работают, но, поскольку это не наши приложения, в этом случае нам не помогает.

Для нас также нереально заставлять разработчиков модифицировать свои приложения, чтобы они знали AD.

Единственный вариант - решить эту проблему в рамках инфраструктуры, а не программного обеспечения. Мои вопросы адресованы всем, кто этим занимался.

Вы должны иметь возможность просто указать серверам своих веб-приложений на полное доменное имя домена Active Directory. Это должно подключить их к доступному DC.

Например, в вашем домене может быть несколько контроллеров домена:

dc1.example.com

dc2.example.com

Вместо того, чтобы явно указывать свои веб-серверы на dc1 или dc2, просто укажите их на example.com (попробуйте телнетинг на example.com через порт 636 - вы получите соединение с DC). Я думаю, что это в основном круговой DNS.

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

Правильный способ сделать это - использовать DNS SRV записи, чтобы найти имена и порты контроллеров домена, а также выяснить, какие серверы использовать в каком порядке. К сожалению, не многие приложения LDAP поддерживают поиск записей SRV.

Запись SRV для контроллеров домена Active Directory: _ldap._tcp.domain.tld. Это вернет список хостов и портов, а также приоритет и вес для каждого (эти значения можно установить с помощью групповой политики), которые вместе указывают, какой сервер использовать.

Мы используем Балансировщик нагрузки сервера Cisco IOS (SLB) для этого против наших серверов OpenLDAP.
LDAP, будучи LDAP, должен работать и для Microsoft Active Directory.
Другие производители предлагают аналогичные продукты / возможности. Балансировка tcp 389/636 такая же, как балансировка tcp 80/443 (или любого другого tcp в этом отношении).

Однако у вас могут возникнуть проблемы с сертификатом. Вы могли бы указать приложению, чтобы оно было менее бдительным. (Возможно, вы уже не знаете, как подписаны ваши сертификаты AD или каким центрам сертификации вы доверяете.) Или пусть ваши серверы AD используют сертификаты с соответствующими subjectAlternativeName поля.

Возможное решение - прокси-сервер LDAP. Их не так много, но они определенно помогут. Вот один, немного перебор - http://www.unboundid.com/products/directory-proxy-server.php. Я уверен, что есть гораздо более дешевые альтернативы этому прокси-серверу с открытым исходным кодом.

РЕДАКТИРОВАТЬ: просто подумайте, в вашем приложении есть ли у вас место для ввода URI LDAP? В таком случае нельзя вводить последовательность серверов, разделенных пробелом, например: ldap: //123..456.789.111 ldap: //123.456.789.222 ldap: //123.456.789.444

Приложение должно быть достаточно надежным, чтобы делать то, что клиенты Windows делают внутри, если один контроллер домена недоступен - он пытается подключиться к другому контроллеру домена.

Это будет работать следующим образом: при запуске приложения компонент доступа к службе каталогов приложения будет выполнять следующие действия:

  • Составьте список всех контроллеров домена на сайте (и любых соседних сайтах, если желательно)
  • Выполните серию тестов для проверки возможности подключения (ping, тест 389/3268/636). Это также подтвердит, что это DC, GC или RODC.
  • Выполните простой запрос, чтобы убедиться, что служба каталогов работает и аутентификация работает.
  • Сохраните список заведомо исправных контроллеров домена, а также список автономных контроллеров домена.

Затем вы используете эти заведомо исправные серверы при выполнении привязки, встраивая сервер в путь привязки. Если возникает исключение одного из типов, указывающих на проблему с постоянным током (сервер не работает, занят, тайм-аут и т. Д.), Вы добавляете этот постоянный ток в автономный список и пытаетесь выполнить операцию, используя один из других постоянного тока.

Поскольку сертификаты станут основной проблемой после того, как вы либо решите использовать балансировщик нагрузки, либо полагаться на циклический перебор DNS (т.е. ldap.contoso.com будет разрешать несколько IP-адресов), Рассел Томкинс (MSFT) опубликовал руководство для эти варианты использования здесь: Создание настраиваемых безопасных сертификатов LDAP для контроллеров домена с автоматическим продлением

Он также отмечает, что эта конфигурация не поддерживается. Как отмечается в других ответах, приложения должны использовать записи SRV, но часто этого не делают.

По сути, вам нужно добавить новый шаблон для выдачи сертификатов, в котором вы переключаетесь на «Поставка в запросе» на вкладке свойств «Имя субъекта». Вам нужно будет выпустить первый сертификат самостоятельно, указав имя балансировщика нагрузки (ldap.contoso.com) в качестве дополнительного SN, и с этого момента автоматическая регистрация вступит во владение.