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

Поиск ближайшего контроллера домена через LDAP

Я нахожусь на хосте Unix и ищу программный способ определения ближайшего DC. У Microsoft отличный статья объясняя, как выполнить поиск DNS, и я могу легко найти список доступных контроллеров домена следующим образом:

dig -t SRV _ldap._tcp.dc._msdcs.example.com

Но что касается поиска ближайшего, он объясняет:

После того как клиент обнаруживает контроллер домена, он устанавливает связь с помощью LDAP для получения доступа к Active Directory. В рамках этого согласования контроллер домена определяет, на каком сайте находится клиент, на основе IP-подсети этого клиента. Если клиент взаимодействует с контроллером домена, который не находится на ближайшем (наиболее оптимальном) сайте, контроллер домена возвращает имя сайта клиента.

Пока мне не удалось найти, где это «возвращает имя сайта клиента» происходит во время запросов LDAP. Есть ли конкретный запрос, который я должен выполнить, чтобы получить это, или какой-либо другой метод, который можно выполнить на хосте Unix, не присоединенном к домену?

РЕДАКТИРОВАТЬ: Благодаря указателю Сима я узнал, как найти правильный DC, как только я узнаю свой сайт (в этом примере "mysite" как часть example.com):

dig -t SRV _ldap._tcp.mysite._sites.dc._msdcs.example.com

Но при этом остается открытым вопрос, как определить мой сайт. Неоднократно в документации указывается, что любой DC, к которому я подключаюсь, решит эту проблему за меня, но я не могу найти документ, в котором говорится, как он возвращает мне информацию. Я даже пробовал отправлять DNS-запросы напрямую контроллерам домена, чтобы узнать, будут ли они заказывать результаты SRV с моим сайтом наверху, но они этого не делают.

Эта статья TechNet проведет вас через логику Поиск контроллера домена на ближайшем сайте если это поможет.

Поскольку вы работаете в Unix, вы смотрели, как это делает Samba? Похоже, это сделано с помощью CLDAP. это запись в блоге - Присоединение к домену Samba может дать еще несколько ответов.

Весь алгоритм выглядит как

  1. Разрешить _ldap._tcp.dc._msdcs.example.com
  2. Выберите один в соответствии с RFC-2782
  3. Отправьте на него пинг LDAP и прочтите сайт клиента, если он вернулся
  4. Разрешить _ldap._tcp.Client-Site._sites.dc._msdcs.example.com
  5. Выберите один в соответствии с RFC-2782

Готово!

LDAP Ping - это

ldapsearch -H CLDAP://server -b '' -s base '(&(NtVer=\06\00\00\00)(AAC=\00\00\00\00))' netlogon

затем прочтите его как NETLOGON_SAM_LOGON_RESPONSE_EX. Посмотреть здесь https://msdn.microsoft.com/en-us/library/cc223807.aspx

Вы можете найти реализацию cldap в исходном коде Samba в этом файле *. / Examples / misc / cldap.pl. Просто позвони с ./cldap.pl -d домен -s контроллер домена и вы получите SITENAME, которое сможете использовать в дальнейших DNS-запросах. Документ MSDN: Ответ контроллера домена на эхо-запрос LDAP

Прежде всего получите список контроллеров домена в сети (может быть, а может и не быть ближайшим).

nslookup -query=srv _ldap._tcp.example.net.local

Затем вы можете запросить один из них, чтобы найти имя вашего сайта на основе вашей подсети.

ldapsearch -H ldap://dc123.example.net.local -b 'CN=Subnets,CN=Sites,CN=Configuration,dc=net,dc=local' '(cn=10.10.10.0/24)' siteObject

Обязательно замените IP-адрес и маску подсети на одну из машин, к которой вы хотите определить ближайший DC.

Затем вы можете найти контроллеры домена, принадлежащие этому сайту.

nslookup -query=srv _ldap._tcp.sitename._sites.example.net.local