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

Как клиентская система в сети Active Directory определяет, на каком сайте она находится?

Когда я готовил презентацию для начинающих администрировать Windows, меня поразил вопрос, который я не задал раньше.

Я знаю это:

Это сообщение в блоге намекает, что клиентские компьютеры в сети AD могут «знать», членом какого сайта они являются. У меня вопрос: если это так, как они это узнают?

Если сам клиент не знает, как DC помогает машине в процессе выбора ближайших к этому клиентскому компьютеру служб AD?

Ответ заключается в том, что когда клиент впервые проходит аутентификацию в Active Directory, он не знает, на каком сайте он находится.

При первом присоединении к домену клиент выполняет общие запросы DNS и LDAP и получает список всех контроллеров домена в домене и спускается по списку, пытаясь выполнить привязку LDAP, и первый успешный DC, к которому он привязан, то есть первый DC, с которым он аутентифицируется.

После того, как клиент присоединился к домену, Active Directory сообщит клиенту, к какому сайту он принадлежит. Active Directory знает об этом, потому что администратор поместил IP-подсеть клиента в AD Sites & Services и связал ее с сайтом.

Active Directory сообщает клиенту, что это за сайт AD, и клиент сохраняет это в собственном реестре в HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DynamicSiteName значение реестра. Таким образом, в следующий раз, когда клиент загрузится, он будет знать, какой DNS-запрос конкретного сайта сделать, чтобы получить только контроллеры домена, находящиеся на этом сайте.

Конечно полное поведение задокументировано в KB247811, но если вы хотите убедиться в этом сами, вы можете запустить Wireshark или NetMon и выполнить трассировку пакетов, а затем присоединиться к домену во время трассировки. Вы увидите точную последовательность DNS-запросов и привязок LDAP. Последующие DNS-запросы и привязки LDAP выполняются к подзонам, зависящим от сайта, потому что клиенту было сказано AD, к какому сайту он принадлежит.

Служба Netlogon будет периодически обновлять информацию о своем сайте AD, поэтому, если вы перейдете в другую сеть, ваш клиент автоматически получит свой новый сайт. Это можно настроить в HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\SiteNameTimeout значение реестра. (Ссылка на сайт)

На самом деле существует несколько взаимосвязанных функций / API. Несмотря на то, что они длинные, на самом деле это одно из наиболее интересных чтений по Active Directory.

Независимо от приведенного ниже объяснения, вам необходимо знать о двух вещах:

  • Если контроллер домена на локальном сайте не отвечает по какой-либо причине, ожидается, что клиент свяжется с любым контроллером домена в домене. Это нормально и всегда по умолчанию. Иногда неясно, почему это происходит.

  • Это может быть неоптимально. Рассмотрим следующий сценарий: три сайта: Нью-Йорк (хаб / центр обработки данных - быстро), Лос-Анджелес (говорил с Нью-Йорком - быстро) и Казахстан (разговаривал с Нью-Йорком - определенно не быстро). Если ваш клиент на сайте в Лос-Анджелесе не может связаться с местным DC по какой-либо причине, не исключено, что он пройдет аутентификацию в Казахстане.

Есть несколько решений. Вы можете сделать одно или оба.

  • Корпорация Майкрософт создала параметр групповой политики / реестра, удачно названный TryNextClosestSite. Это означает, что клиент из Лос-Анджелеса должен попробовать Нью-Йорк, прежде чем бродить по планете в поисках DC. Гениально! На это ушло восемь лет, но, наконец, мы получили это с Vista / 2008. Помните, что по умолчанию этот параметр не включен, поэтому для его включения необходимо создать объект групповой политики.

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


Поиск контроллера домена на ближайшем сайте (API DsGetSiteName)
http://technet.microsoft.com/en-us/library/cc978016.aspx

Сопоставление IP-адресов с именами сайтов

«Во время запуска Net Logon служба Net Logon на каждом контроллере домена перечисляет объекты сайта в контейнере Configuration. Net Logon на каждом контроллере домена также уведомляется обо всех изменениях, внесенных в объекты сайта. Net Logon использует информацию сайта для создания структура в памяти, которая используется для сопоставления IP-адресов с именами сайтов.

"Когда клиент, который ищет контроллер домена, получает список IP-адресов контроллеров домена от DNS, клиент начинает, в свою очередь, опрашивать контроллеры домена, чтобы выяснить, какой контроллер домена доступен и подходит. Active Directory перехватывает запрос, который содержит IP-адрес клиента и передает его в Net Logon на контроллере домена. Net Logon ищет IP-адрес клиента в своей таблице сопоставления подсети-сайта, находя объект подсети, который наиболее точно соответствует IP-адресу клиента, а затем возвращает следующую информацию:

  • Имя сайта, на котором находится клиент, или сайта, наиболее точно соответствующего IP-адресу клиента.

  • Имя сайта, на котором расположен текущий контроллер домена.

  • Бит, указывающий, находится ли найденный контроллер домена (установлен бит) или нет (бит не установлен) на ближайшем к клиенту сайте.

«Контроллер домена возвращает информацию клиенту. Ответ также содержит различные другие фрагменты информации, описывающие контроллер домена. Клиент проверяет информацию, чтобы определить, следует ли пытаться найти лучший контроллер домена. Решение принимается следующим образом:

"Если возвращенный контроллер домена находится на ближайшем сайте (возвращаемый бит установлен), клиент использует этот контроллер домена.

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

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

"Если домен, к которому обращается компьютер, совпадает с доменом, к которому компьютер присоединен, сайт, на котором находится компьютер (по данным контроллера домена), сохраняется в реестре компьютера. Клиент сохраняет это имя сайта в записи реестра DynamicSiteName в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Netlogon \ Parameters. Таким образом, API DsGetSiteName возвращает сайт, на котором находится компьютер ».

Функция DsGetDcName
http://msdn.microsoft.com/en-us/library/ms675983%28VS.85%29.aspx

Типы локаторов
http://technet.microsoft.com/en-us/library/cc978019.aspx

Функции службы каталогов
http://technet.microsoft.com/en-us/subscriptions/ms675900%28v=vs.85%29.aspx

Как работает поддержка DNS для Active Directory
http://technet.microsoft.com/en-us/library/cc759550%28v=ws.10%29.aspx

Как оптимизировать расположение контроллера домена, находящегося за пределами сайта клиента
http://support.microsoft.com/kb/306602