Определить на каком контроллере домена (Logon Server) вы аутентифицировались
05.03.2022
itpro
Active Directory, Windows 10, Windows Server 2019
Комментариев пока нет
В некоторых случаях вам нужно определить на каком контроллере домена вы аутентифицированы (ваш logonserver). Это может пригодиться при проблемах с применением групповых политик, когда пользователи жалуются на медленный вход в систему. Пользователь может аутентифицироваться на неверном контроллере домена из-за того, что ближайший к нему DC не доступен, доступ к нему блокируется межсетевым экраном, неверной настройки подсетей и сайтов в Active Directory или проблемами с DNS. В результате пользователь может получать все GPO, скрипты, и т.д., не с ближайшего контроллера домена, а с любого другого DC. Это может привести к долгому применению GPO, медленной установке программ, медленной загрузки перемещаемых профилей или файлов в перенаправленных папках.
Как узнать на каком контроллере домена вы залогинены?
Вы можете узнать контроллер домена, через который вы выполнили вход в домен несколькими способами:
-
- Из командной строки: set log
- Из результатов команды: systeminfo | find /i “logon server”
- Из переменного окружения: echo %logonserver%

- Значение переменной окружения можно получить и с помощью PowerShell: $env:LOGONSERVER
- В результатах команды gpresult /r:
Зная контроллер домена, можно различную информацию о пользователя из журналов безопасности DC (например, историю входов пользователя в домен и другие логи).
Можно автоматически записывать информацию, на каком контроллере домена авторизовался пользователь в описание компьютера в AD. Так можно узнать LogonServer для конкретного компьютера из AD, не обращаясь к конкретному компьютеру по сети или локально.
Как Windows определяет ближайший контроллер домена?
За определение LogonServer при загрузке Windows отвечает служба NetLogon. Она должны быть запущена:
Упрощенно процесс поиска контроллера домена клиентом Windows выглядит так:
- При загрузке Windows служба NetLogon делает DNS запрос за списком контроллеров домена (SVR записи _ldap._tcp.dc._msdcs.domain_ ;
- DNS возвращает список DC в домене;
- Клиент делает LDAP запрос к DC для определения сайта AD по-своему IP адресу;

Если указанный DC не доступен, появится ошибка:
Если ни один из контроллеров домена не доступен, или компьютер отключен от сети, то при входе пользователя появится надпись:
Найти ближайший к вам контроллер домена согласно иерархии сайтов, подсетей и весов можно с помощью командлета Get-ADDomainController из модуля Active Directory для PowerShell:
Get-ADDomainController -Discover -NextClosestSite
Так вы сможете определить имя контроллера домена, через который должен аутентифицироваться компьютер. Если он отличается от текущего, нужно понять почему.
Предыдущая статья Следующая статья
Find name of Active Directory domain controller
How can I find out the name/IP address of the AD domain controller on my network?
9 Answers 9
On any computer, that has DNS configured to use AD’s DNS server do:
Start -> Run -> nslookup
Replace DOMAIN_NAME with the actual domain name e.g. example.com. Read more here.
For a computer that is a member of a domain the Environment Variable LOGONSERVER contains the name of the DC that authenticated the current user. This is obviously not going to be all DC’s in a multi-DC environment but if all you want is a quick way to find the name of a Domain Controller then from a command shell:
Will return all Environment variables that start with «L» including the name of a DC.
An unmentioned, super easy, and quick option is to run this from a command prompt:
Just replace ‘domainname’ with your domain
You can also run some other options to find out more:
/dcname:domainname gets the PDC name for the domain /dsgetdc:domainname has flags for other information
Try nltest /? in your prompt to get more options! 🙂
This will return your closest Domain Controller in Powershell:
From a Windows command prompt, run gpresult . You will get:
- General workstation and domain information
- For both the computer and the user:
- Distinguished name in AD and which DC the policy was applied from
- Applied Group Policy objects
- List of security groups a member of
Here is some analysis of gpresult output. You can also specify gpresult /z to get more detailed information.
DNS and DHCP are the best way to check since there can be Unix/Linux machines on the network managed by the AD domain controller or acting as the domain controller.
Plus, considering active directory is nothing more than Microsoft’s version of Kerberos, LDAP, dhcp and dns. It would be better to understand and debug things at lower layers than layer 7+. This is because the operating system would preform these same requests and the underlining RFC for each protocol actually operates at a OSI level not the "insert favorite tool here" level.
One can go a step further and query the dhcp for options 6, 15, and 44 to get the domain name, domain name server, and Wins/NetBIOS name server.
Then using dns to check for the _kerberos._tcp, _kpasswd._tcp, _LDAP._TCP.dc._msdcs, and _ldap._tcp SRV records:
This breaks down into three areas, two are protocol supported DNS-SD records:
Как найти все контроллеры домена
Как вы думаете, сколько есть способов получить список контроллеров домена? Давайте посчитаем. Для примера возьмет тестовый домен с оригинальным именем TEST.LOCAL, в котором есть один контроллер домена с еще более оригинальным именем DC-TEST.
Первый способ, которым я обычно пользуюсь — утилита командной строки Netdom. Для получения списка контроллеров домена воспользуемся командой:
Netdom query DC

Второй пойдет утилита Nltest. Выведем список контроллеров командой:

Способ третий — утилита DSQUERY, специально предназначенная для поиска объектов в Active Directory. Найти контроллеры домена с ее помощью можно так:
DSQUERY server -o rdn

Перейдем к PowerShell. Поименно вывести контроллеры домена можно командой:
Get-ADDomainController -Filter * | select Name

Переходим к нестандартным методам поиска. Выведем список контроллеров с помощью утилиты Nslookup. Каждый контроллер домена регистрирует в DNS запись SRV вида _ldap._tcp.dc._msdcs.domain.com, по которой его и можно найти. Для поиск по DNS воспользуемся командой:
Nslookup -type=all _ldap._tcp.dc._msdcs.test.local

С помощью WMI в Windows можно сделать практически все, в том числе и получить список контроллеров домена. Для этого нам потребуется класс Win32_NTDomain, в котором помимо прочего хранятся имена контроллеров домена. Получить их можно из командной строки:
wmic NTDOMAIN GET DomainControllerName
или из PowerShell:
Get-WmiObject -Class win32_NTDomain | ft -a DomainControllerName

Ну и последний из известных мне способов. Все домен контроллеры являются членами группы «Domain Controllers», и для их получения остается только вывести список членов этой группы. Сделать это можно из командной строки:
What Domain Controller Am I Connected To – CMD & PowerShell
Windows Domain Controller (DC) is a server that responds to security authentication requests within a Windows Domain (group of networked computers controlled by domain controller).
In this short note i will show how to find out which DC a computer is authenticated to using Windows CMD and PowerShell.
Cool Tip: Check if the computer is in a domain! Read more →
What Domain Controller Am I Connected To
Get domain controller name in Windows CMD:
Get domain controller name in PowerShell:
To find out the FQDN and IP address of the domain controller, you can use nslookup command that works both in Windows CMD and PowerShell:
Cool Tip: How to determine whether the current user is a Domain User account or a Local User account! Read more →