В некоторых случаях вам нужно определить на каком контроллере домена вы аутентифицированы (ваш logonserver). Это может пригодиться при проблемах с применением групповых политик, когда пользователи жалуются на медленный вход в систему. Пользователь может аутентифицироваться на неверном контроллере домена из-за того, что ближайший к нему DC не доступен, доступ к нему блокируется межсетевым экраном, неверной настройки подсетей и сайтов в Active Directory или проблемами с DNS. В результате пользователь может получать все GPO, скрипты, и т.д., не с ближайшего контроллера домена, а с любого другого DC. Это может привести к долгому применению GPO, медленной установке программ, медленной загрузки перемещаемых профилей или файлов в перенаправленных папках.
Как узнать на каком контроллере домена вы залогинены?
Вы можете узнать контроллер домена, через который вы выполнили вход в домен несколькими способами:
- Из командной строки:
set log
LOGONSERVER=\\MSK-DC02
- Из результатов команды:
systeminfo | find /i “logon server”
- Из переменного окружения:
echo %logonserver%
- Из командной строки:
- Значение переменной окружения можно получить и с помощью PowerShell:
$env:LOGONSERVER
- В результатах команды gpresult /r:
Group Policy was applied from: DC02
- Утилита nltest показывает контроллер домена, на котором аутентифицировался компьютер при загрузке (logon server пользователя и компьютера иногда могут отличаться). Nltest позволяет также проверить наличие доверительных отношений между компьютером и контроллером домена и имя сайта Active Directory, к которому относится DC (Dc Site Name):
nltest /DSGETDC:winitpro.ru
Зная контроллер домена, можно различную информацию о пользователя из журналов безопасности DC (например, историю входов пользователя в домен и другие логи).
Можно автоматически записывать информацию, на каком контроллере домена авторизовался пользователь в описание компьютера в AD. Так можно узнать LogonServer для конкретного компьютера из AD, не обращаясь к конкретному компьютеру по сети или локально.
Как Windows определяет ближайший контроллер домена?
За определение LogonServer при загрузке Windows отвечает служба NetLogon. Она должны быть запущена:
get-service netlogon
Упрощенно процесс поиска контроллера домена клиентом Windows выглядит так:
- При загрузке Windows служба NetLogon делает DNS запрос за списком контроллеров домена (SVR записи
_ldap._tcp.dc._msdcs.domain_
; - DNS возвращает список DC в домене;
- Клиент делает LDAP запрос к DC для определения сайта AD по-своему IP адресу;
- DC возвращает сайт, которому соответствует IP клиента или наиболее близкий сайт (эта информация кэшируется в ветке реестра
HKLM\System\CurrentControlSet\Services\Netlogon\Parameters
и используется при следующем входе для более быстрого поиска); - Клиент через DNS запрашивает список контроллеров домена в сайте (в разделе _
tcp.sitename._sites...
); - Windows пытается связаться со всеми DC в сайте и первый ответивший используется для выполнении аутентификации и в качестве LogonServer.
nltest /SC_RESET:WINITPRO\MSK-DC02.winitpro.ru
Flags: 30 HAS_IP HAS_TIMESERV Trusted DC Name \\MSK-DC02.winitpro.ru Trusted DC Connection Status Status = 0 0x0 NERR_Success The command completed successfully
Если указанный DC не доступен, появится ошибка:
I_NetLogonControl failed: Status = 1311 0x51f ERROR_NO_LOGON_SERVERS
Если ни один из контроллеров домена не доступен, или компьютер отключен от сети, то при входе пользователя появится надпись:
There are currently no logon servers available to service the logon request.
Отсутствуют серверы, которые могли бы обработать запрос на вход в сеть.
Войти на такой компьютер можно только под сохраненными учетными данными доменного пользователя.
Найти ближайший к вам контроллер домена согласно иерархии сайтов, подсетей и весов можно с помощью командлета Get-ADDomainController из модуля Active Directory для PowerShell:
Get-ADDomainController -Discover -NextClosestSite
Так вы сможете определить имя контроллера домена, через который должен аутентифицироваться компьютер. Если он отличается от текущего, нужно понять почему.