· 16 мин чтения · Семёнов Е.С., руководитель ITfresh

Развёртывание Active Directory с нуля для компании на 30 человек

К нам в ITfresh регулярно приходят молодые компании, которые выросли с пяти человек до тридцати и поняли, что управлять учётками в режиме «у каждого свой пароль на ноутбуке» больше нельзя. Этот материал — пошаговый план, по которому мы за рабочую неделю превращаем хаос рабочих групп в управляемый домен Active Directory на Windows Server 2022. Без воды, со всеми командами PowerShell и реальными значениями параметров, которые мы используем у клиентов.

Зачем малой компании Active Directory

Когда сотрудников 5-10, можно жить на peer-to-peer: расшаренные папки, локальные учётные записи, общая почта в облаке. Но при 25-30 сотрудниках начинается боль:

AD решает всё это разом: единая база пользователей, групповые политики, централизованное управление сетевыми ресурсами, понятный аудит. Дополнительный бонус — корректная работа сервера 1С, файлового сервера на DFS, сетевых принтеров через Print Management и почтового сервера (если у вас on-premise Exchange или альтернатива).

Подготовка: что должно быть на столе до начала работ

Перед началом проекта я согласовываю с заказчиком:

По железу: для офиса 30 человек я ставлю два виртуальных контроллера на разных физических хостах гипервизора. Минимальные требования к каждому DC: 4 vCPU, 8 GB RAM, 80 GB SSD под систему + 40 GB под NTDS, SYSVOL и логи. Это с запасом на 5-7 лет роста.

Этап 1. Базовая настройка первого сервера

Ставлю Windows Server 2022 Standard в редакции Desktop Experience. Server Core я люблю, но для малого офиса, где админ заказчика тоже будет иногда заходить — GUI удобнее. После установки выполняю первые команды:

# Переименовать сервер
Rename-Computer -NewName "DC01" -Restart

# После перезагрузки — настроить статический IP
New-NetIPAddress -InterfaceAlias "Ethernet0" `
  -IPAddress 192.168.20.10 `
  -PrefixLength 24 `
  -DefaultGateway 192.168.20.1

# DNS пока на самого себя через 127.0.0.1 (заменим после установки роли)
Set-DnsClientServerAddress -InterfaceAlias "Ethernet0" `
  -ServerAddresses ("127.0.0.1")

# Часовой пояс Москва
Set-TimeZone -Id "Russian Standard Time"

# Все доступные обновления — критично перед dcpromo
Install-Module PSWindowsUpdate -Force
Get-WindowsUpdate -AcceptAll -Install -AutoReboot

После всех обновлений я выполняю проверку дисков, отключаю IPv6 на интерфейсе (если он не используется в инфраструктуре — иначе AD начнёт выдавать предупреждения о динамической регистрации) и убеждаюсь, что Windows Defender активен и базы свежие.

Этап 2. Установка роли AD DS

Установка происходит в два шага: сначала добавляем роль, потом запускаем повышение до контроллера домена.

# Установка роли AD DS вместе с инструментами управления
Install-WindowsFeature -Name AD-Domain-Services `
  -IncludeManagementTools

# Установка роли DNS — без него dcpromo всё равно поставит, но явно лучше
Install-WindowsFeature -Name DNS -IncludeManagementTools

Теперь повышаем сервер до DC и создаём новый лес. Это эквивалент классического dcpromo, но в современной форме:

$DSRMPassword = ConvertTo-SecureString "СложныйПарольDSRM!2026" -AsPlainText -Force

Install-ADDSForest `
  -DomainName "corp.company.ru" `
  -DomainNetbiosName "CORP" `
  -DomainMode "WinThreshold" `
  -ForestMode "WinThreshold" `
  -InstallDns:$true `
  -DatabasePath "C:\Windows\NTDS" `
  -LogPath "C:\Windows\NTDS" `
  -SysvolPath "C:\Windows\SYSVOL" `
  -SafeModeAdministratorPassword $DSRMPassword `
  -NoRebootOnCompletion:$false `
  -Force:$true

Параметр WinThreshold — это уровень функциональности «Windows Server 2016», который остаётся максимальным для лесов AD до сих пор (даже на Windows Server 2025). Microsoft не повышала функциональный уровень с 2016 года — все новые фичи едут отдельно, а не через раздутие FFL.

После перезагрузки сервер становится контроллером домена. Проверяю работоспособность:

# Состояние DC
dcdiag /v /c

# Проверка SYSVOL и DFSR
Get-DfsrState
Get-DfsrMembership -GroupName "Domain System Volume"

# Проверка репликации (для одного DC покажет, что реплицировать не с кем)
repadmin /replsummary

# Проверка DNS
nslookup corp.company.ru
nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.company.ru

На этом моменте у нас есть рабочий домен с одним контроллером. Дальше — структура и второй DC.

Этап 3. Проектирование OU и групп безопасности

Хорошая структура OU — это половина успеха проекта. Я никогда не оставляю пользователей в дефолтном контейнере CN=Users, потому что на него нельзя привязать GPO. Стандартный шаблон, который я разворачиваю для офиса 30 человек:

$Domain = "DC=corp,DC=company,DC=ru"

# Корневые OU
New-ADOrganizationalUnit -Name "Sotrudniki" -Path $Domain -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "Workstations" -Path $Domain -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "Servers" -Path $Domain -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "Groups" -Path $Domain -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "ServiceAccounts" -Path $Domain -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "PrivilegedAccounts" -Path $Domain -ProtectedFromAccidentalDeletion $true

# Подразделения внутри Sotrudniki
$DepartmentsPath = "OU=Sotrudniki,$Domain"
"Buhgalteria","Prodazhi","Marketing","IT","Rukovodstvo","Razrabotka" |
  ForEach-Object {
    New-ADOrganizationalUnit -Name $_ -Path $DepartmentsPath -ProtectedFromAccidentalDeletion $true
  }

# Зеркальная структура для Workstations
$WSPath = "OU=Workstations,$Domain"
"Buhgalteria","Prodazhi","Marketing","Rukovodstvo","Razrabotka" |
  ForEach-Object {
    New-ADOrganizationalUnit -Name $_ -Path $WSPath -ProtectedFromAccidentalDeletion $true
  }

# Серверные OU
$SrvPath = "OU=Servers,$Domain"
New-ADOrganizationalUnit -Name "FileServers" -Path $SrvPath -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "1C" -Path $SrvPath -ProtectedFromAccidentalDeletion $true
New-ADOrganizationalUnit -Name "Apps" -Path $SrvPath -ProtectedFromAccidentalDeletion $true

Группы безопасности я создаю по модели AGDLP (Account → Global → Domain Local → Permission). Для каждого подразделения — Global-группа с пользователями, а на ресурсах права назначаются через Domain Local-группы:

$GroupsPath = "OU=Groups,DC=corp,DC=company,DC=ru"

# Глобальные группы — содержат пользователей
"GG_Buhgalteria","GG_Prodazhi","GG_Marketing","GG_IT","GG_Rukovodstvo" |
  ForEach-Object {
    New-ADGroup -Name $_ -GroupScope Global -GroupCategory Security -Path $GroupsPath
  }

# Domain Local группы — назначаются на ресурсы (примеры)
"DL_Share_Buh_Read","DL_Share_Buh_Modify",
"DL_Share_Common_Read","DL_Share_Common_Modify",
"DL_1C_Buh_Users","DL_1C_Sales_Users" |
  ForEach-Object {
    New-ADGroup -Name $_ -GroupScope DomainLocal -GroupCategory Security -Path $GroupsPath
  }

# Связываем
Add-ADGroupMember -Identity "DL_Share_Buh_Modify" -Members "GG_Buhgalteria"
Add-ADGroupMember -Identity "DL_Share_Common_Read" -Members "GG_Buhgalteria","GG_Prodazhi","GG_Marketing","GG_Rukovodstvo"

Этап 4. Заведение пользователей

Когда структура готова, заводим учётки. Я никогда не делаю это руками через ADUC при создании 30+ учёток — только импорт из CSV:

$Users = Import-Csv -Path "C:\install\users.csv" -Delimiter ";" -Encoding UTF8

foreach ($User in $Users) {
    $UPN = "$($User.Login)@corp.company.ru"
    $Password = ConvertTo-SecureString $User.InitialPassword -AsPlainText -Force
    $OUPath = "OU=$($User.Department),OU=Sotrudniki,DC=corp,DC=company,DC=ru"

    New-ADUser `
      -Name "$($User.Surname) $($User.GivenName)" `
      -GivenName $User.GivenName `
      -Surname $User.Surname `
      -SamAccountName $User.Login `
      -UserPrincipalName $UPN `
      -DisplayName "$($User.Surname) $($User.GivenName)" `
      -EmailAddress $User.Email `
      -Title $User.Position `
      -Department $User.Department `
      -Office $User.Office `
      -OfficePhone $User.Phone `
      -Path $OUPath `
      -AccountPassword $Password `
      -Enabled $true `
      -ChangePasswordAtLogon $true

    # Добавление в групповую безопасность
    Add-ADGroupMember -Identity "GG_$($User.Department)" -Members $User.Login
}

В CSV-файле — колонки Login, Surname, GivenName, Email, Position, Department, Office, Phone, InitialPassword. Файл я готовлю вместе с HR заказчика, начальные пароли генерирую через [System.Web.Security.Membership]::GeneratePassword(14,3) и передаю клиенту в зашифрованном виде.

Этап 5. Установка второго контроллера домена

Один DC — это потенциальная катастрофа. Поднимаю второй на отдельной физической ноде гипервизора. Базовая настройка такая же: имя DC02, статический IP 192.168.20.11, в DNS-настройках сетевой карты первичный — 192.168.20.10 (DC01), вторичный — 127.0.0.1.

Install-WindowsFeature -Name AD-Domain-Services,DNS -IncludeManagementTools

$DSRMPassword = ConvertTo-SecureString "СложныйПарольDSRM!2026" -AsPlainText -Force
$Cred = Get-Credential -Message "Учётка Domain Admin"

Install-ADDSDomainController `
  -DomainName "corp.company.ru" `
  -InstallDns:$true `
  -Credential $Cred `
  -DatabasePath "C:\Windows\NTDS" `
  -LogPath "C:\Windows\NTDS" `
  -SysvolPath "C:\Windows\SYSVOL" `
  -SafeModeAdministratorPassword $DSRMPassword `
  -SiteName "Default-First-Site-Name" `
  -NoGlobalCatalog:$false `
  -ReadOnlyReplica:$false `
  -Force:$true

После перезагрузки проверяю репликацию между DC01 и DC02:

repadmin /replsummary
repadmin /showrepl
dcdiag /e /v

Если всё в порядке — на DC01 меняю DNS-настройки сетевой карты: первичный 192.168.20.11 (DC02), вторичный 127.0.0.1. На DC02 — наоборот. Это правильная схема: каждый DC спрашивает «соседа», а себя как fallback.

Этап 6. Распределение FSMO-ролей

В лесу AD есть пять ролей хозяина операций (FSMO): Schema Master, Domain Naming Master, RID Master, PDC Emulator, Infrastructure Master. По умолчанию все они на первом DC. В офисе на 30 человек я обычно оставляю их все на DC01, но проверяю, что они там и что я знаю, как их перенести при необходимости.

# Где сейчас FSMO
netdom query fsmo

# Перенос (graceful) — если планово
Move-ADDirectoryServerOperationMasterRole `
  -Identity "DC02" `
  -OperationMasterRole PDCEmulator,RIDMaster,InfrastructureMaster,SchemaMaster,DomainNamingMaster

# Захват (seize) — только если DC1 умер и не вернётся
Move-ADDirectoryServerOperationMasterRole `
  -Identity "DC02" `
  -OperationMasterRole PDCEmulator -Force

PDC Emulator — это сервер, на который должна быть направлена внешняя синхронизация времени. Настраиваю NTP только на держателе PDC, остальные DC синхронизируются с ним по умолчанию:

# На DC, держателе PDC Emulator
w32tm /config /manualpeerlist:"pool.ntp.org,0x9 time.windows.com,0x9" `
  /syncfromflags:manual /reliable:yes /update
Restart-Service w32time
w32tm /resync /force
w32tm /query /status

Этап 7. DNS — корректная настройка под AD

DNS в AD — это нервная система. Все клиенты находят DC через SRV-записи в зоне домена. Проверяю и настраиваю:

# Создаём reverse-зону для адресного плана пользователей и серверов
Add-DnsServerPrimaryZone -NetworkId "192.168.20.0/24" -ReplicationScope "Domain"
Add-DnsServerPrimaryZone -NetworkId "192.168.10.0/24" -ReplicationScope "Domain"

# Включаем scavenging (очистка устаревших записей) — раз в 7 дней
Set-DnsServerScavenging -ScavengingState $true -ScavengingInterval 7.00:00:00 `
  -ApplyOnAllZones

# Forwarders для разрешения внешних имён — Yandex и Cloudflare
Set-DnsServerForwarder -IPAddress 77.88.8.8,1.1.1.1

Я никогда не использую публичный DNS Гугла (8.8.8.8) у российских клиентов — слишком долгие пинги и риск замедления резолвинга в рабочее время.

Этап 8. DHCP — на отдельной роли с failover

В офисе 30 человек я разделяю DHCP по двум вариантам: либо ставлю роль DHCP на оба DC с настроенным failover в режиме Hot-Standby, либо настраиваю DHCP на роутере (MikroTik с failover между двух) и оставляю серверы только под AD. Первый вариант для классических Windows-инфраструктур:

Install-WindowsFeature -Name DHCP -IncludeManagementTools

# Авторизация в AD
Add-DhcpServerInDC -DnsName "DC01.corp.company.ru" -IPAddress 192.168.20.10
Add-DhcpServerInDC -DnsName "DC02.corp.company.ru" -IPAddress 192.168.20.11

# Создание области для пользовательской подсети
Add-DhcpServerv4Scope -Name "Users-VLAN10" `
  -StartRange 192.168.10.50 `
  -EndRange 192.168.10.250 `
  -SubnetMask 255.255.255.0 `
  -State Active `
  -LeaseDuration 8.00:00:00

Set-DhcpServerv4OptionValue -ScopeId 192.168.10.0 `
  -DnsServer 192.168.20.10,192.168.20.11 `
  -DnsDomain "corp.company.ru" `
  -Router 192.168.10.1

# Failover Hot-Standby между DC01 и DC02
Add-DhcpServerv4Failover -ComputerName "DC01.corp.company.ru" `
  -PartnerServer "DC02.corp.company.ru" `
  -Name "DHCP-Failover-Users" `
  -ScopeId 192.168.10.0 `
  -SharedSecret "ОченьДлинныйСекретДляФейловера2026!" `
  -Mode HotStandby `
  -ServerRole Active `
  -ReservePercent 20

Этап 9. Базовые групповые политики (GPO)

Из коробки в AD создаются две дефолтные политики: Default Domain Policy и Default Domain Controllers Policy. Их я не трогаю — это плохая практика. Создаю отдельные GPO под конкретные задачи:

  1. GPO «Password Policy». Привязана к корню домена. Минимальная длина пароля — 12, сложность включена, история — 12, срок действия 180 дней, блокировка после 10 неудач на 15 минут.
  2. GPO «Workstation Baseline». Привязана к OU=Workstations. Запрет автозапуска USB, отключение SMBv1, включение SmartScreen, блокировка PowerShell для обычных пользователей через Constrained Language Mode, отключение LLMNR, включение SMB Signing.
  3. GPO «Server Baseline». Привязана к OU=Servers. RDP только из административной подсети, обязательный аудит, отключение неиспользуемых служб (Print Spooler на серверах БД и AD), запрет интерактивного логона для сервисных аккаунтов.
  4. GPO «Mapped Drives». Привязана к OU=Sotrudniki. Через Group Policy Preferences монтирую сетевые диски: O:\ — общий обмен (DL_Share_Common_Modify), B:\ — бухгалтерия (только для GG_Buhgalteria через Item-Level Targeting).
  5. GPO «Printers». Раздача принтеров по подразделениям через GPP Item-Level Targeting (фильтр по группе безопасности).
  6. GPO «BGInfo». Информация о компьютере на рабочем столе для удобной службы поддержки — имя ПК, IP, залогиненный пользователь.

Все GPO создаются и тестируются на одной тестовой OU перед привязкой к боевой:

New-GPO -Name "Workstation Baseline" -Comment "ITfresh, базовый hardening рабочих станций"
New-GPLink -Name "Workstation Baseline" -Target "OU=Workstations,DC=corp,DC=company,DC=ru" -LinkEnabled Yes

# Применить немедленно для теста
Invoke-GPUpdate -Computer "PC-TEST-01" -RandomDelayInMinutes 0 -Force

Этап 10. Ввод компьютеров в домен

Этот этап я планирую на вечер пятницы и субботу: чтобы в понедельник утром люди уже логинились в домен. На каждом компьютере выполняется одна команда:

$Cred = Get-Credential -Message "Доменная учётка с правом ввода"
Add-Computer -DomainName "corp.company.ru" `
  -Credential $Cred `
  -OUPath "OU=Buhgalteria,OU=Workstations,DC=corp,DC=company,DC=ru" `
  -Restart

Заранее я создаю для службы поддержки специальную группу SG_JoinComputers с делегированными правами создавать computer-объекты в нужных OU — чтобы инженеры не использовали Domain Admin для рутинной операции.

После перезагрузки на каждом ПК подкатываются GPO, монтируются сетевые диски, настраиваются принтеры. Я отдельно проверяю, что профиль пользователя корректно создаётся, что мигрировали закладки браузера и почтовые настройки — это ключевой UX-момент, который определяет, будут пользователи ругаться на новый домен или нет.

Этап 11. Что обязательно сделать в первый месяц после внедрения

Инженер закончил, домен работает, пользователи в восторге — но проект ещё не закрыт. В течение первого месяца я обязательно выполняю:

На третий месяц планирую первый плановый перезапуск DC по очереди для применения накопившихся CU — этот регламент мы потом повторяем ежеквартально.

Типичные ошибки, которые я вижу у других подрядчиков

За 15 лет на подхвате после других интеграторов я насмотрелся на одни и те же грабли:

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

FAQ

Нужны ли два контроллера домена для офиса на 30 человек?
Да, обязательно. Один контроллер — это единая точка отказа: умрёт сервер или диск, и весь офис не сможет логиниться, открывать шары, печатать. Второй DC даёт отказоустойчивость и стоит для виртуальной среды копейки — это просто ещё одна VM на 4 GB RAM. Мы в ITfresh ставим минимум два DC даже для офисов на 10-15 человек.

Какую версию Windows Server выбрать в 2026 году?
Windows Server 2022 — основной выбор для новых проектов: проверен временем, поддержка до 2031 года, стабильно работает с любым гипервизором. Windows Server 2025 — если заказчик хочет максимально свежий стек или планирует SMB over QUIC. Windows Server 2019 ставлю только в случаях, когда у клиента жёсткие требования совместимости со старым ПО.

Можно ли совместить AD DS, DNS и DHCP на одном сервере?
DNS — да, это штатная конфигурация и AD без локального DNS не работает. DHCP технически совместить можно, но в нашей практике мы выносим DHCP либо на отдельную VM, либо на роутер MikroTik с failover между двух — это снимает нагрузку с DC и упрощает обновление контроллеров без перезагрузки сети.

Как назвать домен, чтобы потом не было проблем?
Никогда не называйте домен реальным внешним доменом компании (например company.ru) — будут split-brain DNS и боль с почтой. Используйте поддомен внешнего: corp.company.ru или ad.company.ru. Не используйте .local — этот суффикс зарезервирован для mDNS (Bonjour) и ломает работу некоторых приложений. NetBIOS-имя пишите латиницей до 15 символов, без дефисов.

Сколько времени и денег займёт развёртывание AD под ключ?
Для офиса на 30 человек — 3-5 рабочих дней инженера. Сюда входит проектирование, развёртывание двух DC, настройка DNS/DHCP, миграция учёток из рабочих групп, базовые GPO, заведение пользователей, ввод компьютеров в домен, обучение администратора заказчика. В тарифе ITfresh такая разовая работа обходится в 60-100 тысяч рублей в зависимости от наличия серверного железа.

Развернём Active Directory под ключ за рабочую неделю

Семёнов Е.С. и команда ITfresh: проектирование, два контроллера на Windows Server 2022, OU, GPO, миграция учёток, обучение вашего администратора. Разовая работа или полный аутсорсинг — на ваш выбор.