Погодин Евгений — ИТ Заметки
🖥️Windows Server Обновлено 04.11.2026

Windows Server с нуля 07. DHCP-сервер: области, резервирование и отказоустойчивость

Note

Материал сверен с официальной документацией (Microsoft Learn и др.; ссылки — в конце статьи). Примеры вывода — иллюстрации: на вашем сервере значения и формат могут отличаться. Перед работой на боевом сервере проверьте шаги на тестовой машине.

В небольшой сети адреса клиентам часто раздаёт роутер. Когда появляется домен, удобнее перенести эту работу на сервер: он выдаёт те DNS-серверы и суффикс, которые нужны Active Directory, проходит авторизацию в каталоге, а два сервера могут подстраховывать друг друга. Мы развернём DHCP на DC1 и DC2 и раздадим клиентам пул 192.168.10.100–192.168.10.200. Сам протокол (четыре сообщения, аренда, relay) разобран в статье DHCP: как устройство получает адрес, здесь мы его не повторяем.

Вы научитесь:

  • устанавливать роль DHCP-сервера и авторизовать её в Active Directory;
  • создавать область и задавать клиентам шлюз, DNS-серверы и домен;
  • закреплять адрес за устройством, в том числе вне пула;
  • настраивать отказоустойчивость (failover) между DC1 и DC2;
  • проверять выдачу адресов, читать журналы и делать резервную копию.

Начнём со словаря: названия в консоли DHCP и в командлетах отличаются.

Термин в консоли Английский Что это
Область scope Диапазон адресов одной подсети с маской, сроком аренды и опциями. Её идентификатор (ScopeId) — адрес сети, у нас 192.168.10.0
Исключение exclusion range Диапазон внутри области, который сервер не выдаёт
Резервирование reservation Адрес, закреплённый за MAC-адресом клиента
Опция option Значение, которое клиент получает вместе с адресом: шлюз, DNS, домен
Аренда lease Срок, на который выдан адрес
Отработка отказа failover Совместная работа двух серверов над одной областью

Warning

Адреса серии учебные: подсеть 192.168.10.0/24, шлюз 192.168.10.1, серверы DC1 и DC2. В своей сети подставьте свои значения. Второй DHCP-сервер в одной подсети опасен: клиенты берут настройки у того, кто ответил первым. Если адреса сейчас раздаёт роутер (в статье DHCP: как устройство получает адрес это RTR1), сначала отключите там выдачу и только потом переносите её на сервер. До этой статьи PC1 получал адрес от роутера, а DNS на нём вы указывали вручную. Отрабатывайте шаги на тестовой подсети, где нет других DHCP-серверов.

Что нужно знать заранее

Команды выполняйте в Windows PowerShell 5.1, запущенном от имени администратора, на DC1, если не сказано иное. Команды одинаковы в Windows Server 2025 и 2022.

Шаг 1. Устанавливаем роль и группы

Перед установкой сервер должен иметь статический IPv4-адрес: у DC1 он есть. Установка не требует перезагрузки:

Install-WindowsFeature DHCP -IncludeManagementTools

Затем создайте группы управления DHCP и перезапустите службу, чтобы группы вступили в силу:

Add-DhcpServerSecurityGroup
Restart-Service dhcpserver

Члены группы DHCP Administrators управляют областями и делают резервные копии и восстановление базы, но не получают прав администратора сервера; группа DHCP Users имеет доступ только на чтение. На контроллере домена это доменные локальные группы в контейнере Users, на рядовом сервере — локальные группы этого сервера.

Повторите эти шаги на DC2. Контроллеры делят одну базу домена, поэтому группы с DC1 там уже могут существовать: поведение командлета в этом случае в документации не описано, просто проверьте результат. Область на DC2 создавать не нужно: она появится при настройке failover.

Шаг 2. Авторизуем сервер в Active Directory

DHCP-сервер в домене, не внесённый в список авторизованных, не выдаёт адреса: это защита от «самодеятельных» серверов на Windows Server. Список хранится в контейнере конфигурации AD, а сервер раз в час сверяется с ним и при отсутствии записи отключает себя.

Авторизовать должна учётная запись с правом записи в этот контейнер; руководство по ошибкам авторизации называет участника Enterprise Admins. admin-lab состоит в Domain Admins, поэтому действуйте по правилу из врезки «Кто чем может» в Windows Server с нуля 03: временно добавьте admin-lab в Enterprise Admins, выйдите и войдите заново (членство попадает в токен при входе), выполните шаг, затем уберите её из группы.

Без параметров команда авторизует локальный сервер, а учётные данные она не принимает:

Add-DhcpServerInDC
Get-DhcpServerInDC

Выполните её на DC1 и на DC2. Пример вывода после обоих серверов:

IPAddress      DnsName
---------      -------
192.168.10.11  DC1.lab.example
192.168.10.12  DC2.lab.example

В графической консоли DHCP то же делает пункт «Авторизовать» в меню сервера; не авторизованному серверу соответствует красная стрелка вниз у узла IPv4.

Если авторизация не проходит (ошибка 20070 «не удалось связаться с Active Directory», в журнале событие 1046), проверьте права учётной записи, связь с контроллером по порту LDAP (Lightweight Directory Access Protocol) 389 и репликацию AD. После успеха в журнале появится событие 1043 или 1044: сервер обслуживает клиентов.

Шаг 3. Создаём область и опции

Область — единица настройки: диапазон, маска, срок аренды, опции и резервирования. Создаём её только на DC1: на DC2 она появится при настройке failover.

В серии область охватывает всю подсеть .1–.254, а исключения .1–.99 и .201–.254 оставляют клиентам пул .100–.200. Так резервирования работают и вне пула, например для принтеров (Windows Server с нуля 09): вне диапазона раздачи области резервирование создать нельзя, а в исключённом диапазоне оно действует. Область создаём неактивной, пока не заданы исключения и опции:

$scope = @{
    Name          = 'LAB-Office'
    StartRange    = '192.168.10.1'
    EndRange      = '192.168.10.254'
    SubnetMask    = '255.255.255.0'
    LeaseDuration = '8.00:00:00'
    State         = 'InActive'
}
Add-DhcpServerv4Scope @scope
Add-DhcpServerv4ExclusionRange -ScopeId 192.168.10.0 `
  -StartRange 192.168.10.1 -EndRange 192.168.10.99
Add-DhcpServerv4ExclusionRange -ScopeId 192.168.10.0 `
  -StartRange 192.168.10.201 -EndRange 192.168.10.254

Срок аренды задаётся в формате «дни.часы:минуты:секунды»; по умолчанию он 8 суток, мы указали его явно. Клиент получает срок в опции 51 (RFC 2132). Остальные опции задаём командой Set-DhcpServerv4OptionValue:

Set-DhcpServerv4OptionValue -ScopeId 192.168.10.0 `
  -Router 192.168.10.1 `
  -DnsServer 192.168.10.11, 192.168.10.12 `
  -DnsDomain lab.example
Код опции Параметр командлета Что получает клиент
3 -Router шлюз по умолчанию
6 -DnsServer DNS-серверы
15 -DnsDomain DNS-суффикс (домен)

Номера и смысл опций определены в RFC 2132. Внешний DNS 192.0.2.53 клиентам выдавать не нужно: контроллеры сами пересылают на него запросы (Windows Server с нуля 04). Опции можно задать на уровнях сервера, области и резервирования, и побеждает более конкретный: резервирование перекрывает область, область — сервер (между ними есть ещё политики, в малой сети они не нужны). Командлет по умолчанию проверяет указанные DNS-серверы; параметр -Force проверку отключает.

Теперь активируйте область и проверьте результат:

Set-DhcpServerv4Scope -ScopeId 192.168.10.0 -State Active
Get-DhcpServerv4Scope |
  Format-List ScopeId, Name, State, StartRange, EndRange, LeaseDuration
Get-DhcpServerv4ExclusionRange -ScopeId 192.168.10.0
Get-DhcpServerv4OptionValue -ScopeId 192.168.10.0

Пример вывода второй команды:

ScopeId       : 192.168.10.0
Name          : LAB-Office
State         : Active
StartRange    : 192.168.10.1
EndRange      : 192.168.10.254
LeaseDuration : 8.00:00:00

Исключения должны быть два, а Get-DhcpServerv4OptionValue должен показать опции 3, 6 и 15. Затем за консолью PC1 (не по удалённому рабочему столу: адрес может смениться, и связь оборвётся) выполните ipconfig /release и ipconfig /renew: если PC1 держит аренду от роутера, одного /renew может не хватить. Затем ipconfig /all. Нужные строки:

   Connection-specific DNS Suffix  . : lab.example
   DHCP Server . . . . . . . . . . . : 192.168.10.11
   Default Gateway . . . . . . . . . : 192.168.10.1
   DNS Servers . . . . . . . . . . . : 192.168.10.11
                                       192.168.10.12

Резервирование

Исключённые адреса сервер не выдаёт. Единственное исключение из правила — резервирование: закреплённый адрес выдаётся «своему» клиенту, даже если лежит в исключении. Резервирование привязывает адрес к MAC-адресу, который для клиентов Windows служит идентификатором (ClientId):

Add-DhcpServerv4Reservation -ScopeId 192.168.10.0 `
  -IPAddress 192.168.10.101 -ClientId '00-00-5E-00-53-01' `
  -Name 'PC1' -Description 'Рабочее место PC1'

MAC-адрес в примере учебный: настоящий PC1 показывает в строке Physical Address команда ipconfig /all.

Если создать область только на .100–.200, адрес вне диапазона, например 192.168.10.50, закрепить не получится: консоль и netsh ответят «The specified DHCP client is not a reserved client». Расширяя уже работающую область, переведите её на время в неактивное состояние (-State InActive) и сделайте это до failover: после него любое изменение придётся реплицировать.

Шаг 4. Отказоустойчивость между DC1 и DC2

Одиночный DHCP-сервер — единая точка отказа: пока он выключен, клиенты с истёкшей арендой остаются без сети. Failover связывает два сервера: они делят одну область и обмениваются сведениями об арендах. Связь называется отношением отказоустойчивости (failover relationship); серверов в ней всегда два, поддерживаются только области IPv4.

Режимов два:

  • Load balance (балансировка, режим по умолчанию): отвечают оба сервера, по умолчанию поровну. Какой именно, определяет хеш MAC-адреса клиента. Подходит, когда оба сервера находятся в одном месте, как у нас.
  • Hot standby (горячее ожидание): адреса выдаёт активный сервер, а резервный отвечает, только если активный недоступен. Для этого на нём резервируется часть адресов, по умолчанию 5 %. Режим удобен, когда резервный сервер стоит в центральном офисе, а клиенты работают в филиалах.

Перед настройкой проверьте:

  1. Роль установлена, а сервер авторизован на обоих узлах.
  2. Часы расходятся не более чем на минуту: при большем расхождении мастер остановит настройку с критической ошибкой. О времени в домене — во врезке Windows Server с нуля 03 и в старой статье про Windows Server 2012.
  3. Между серверами открыт TCP-порт 647: правила Microsoft-Windows-DHCP-Failover-TCP-In и -Out добавляются при установке роли, брандмауэр отключать не нужно.
  4. Область создана только на DC1: если она уже есть на партнёре, её нужно удалить заранее.
  5. Клиенты видят оба сервера. В одной подсети это так; через relay-агент на роутере (статья о DHCP) нужны два адреса ретрансляции, по одному на сервер.

Создаём отношение на DC1 (режим по умолчанию — load balance, 50:50). Параметр -SharedSecret принимает обычную строку, поэтому секрет вводится по запросу, а не в тексте команды:

$s = Read-Host 'Общий секрет failover' -AsSecureString
$secret = [System.Net.NetworkCredential]::new('', $s).Password
Add-DhcpServerv4Failover -Name 'LAB-DC1-DC2' `
  -PartnerServer DC2.lab.example -ScopeId 192.168.10.0 `
  -SharedSecret $secret
Remove-Variable s, secret

Общий секрет включает проверку подлинности сообщений между серверами; без него проверка отключена. Секрет не храните в скриптах, а переменные с ним не оставляйте в сеансе: на запрос введите свой. PowerShell спросит подтверждение, потому что при удалённом управлении секрет может передаваться открытым текстом: запускайте команду локально на DC1.

Для режима hot standby добавьте -ReservePercent 5: сервер, на котором выполняется команда, станет активным, а партнёр резервным. Параметр -ServerRole меняет роль, но источники расходятся: справка командлета описывает -ServerRole Standby как роль локального сервера, а страница управления отношениями называет для того же вызова резервным партнёра. Поэтому проверьте поле ServerRole в Get-DhcpServerv4Failover.

Проверка:

Get-DhcpServerv4Failover
Get-DhcpServerv4Scope -ComputerName DC2.lab.example

Пример вывода первой команды:

Name                : LAB-DC1-DC2
PartnerServer       : DC2.lab.example
Mode                : LoadBalance
LoadBalancePercent  : 50
ServerRole          :
ReservePercent      :
MaxClientLeadTime   : 01:00:00
StateSwitchInterval :
State               : Normal
ScopeId             : {192.168.10.0}
AutoStateTransition : False
EnableAuth          : True

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

Состояния и ручная репликация

В норме оба сервера в состоянии Normal. Если связь с партнёром потеряна, сервер переходит в COMMUNICATION INTERRUPTED: он не знает, выключен партнёр или оборвалась сеть, и продолжает обслуживать клиентов. В режиме load balance он продлевает клиентам партнёра те же адреса на время MCLT (maximum client lead time, по умолчанию один час), а новым выдаёт адреса из своего пула и, когда он кончится, из пула партнёра. В режиме hot standby резервный сервер выдаёт новые адреса только из резерва и отказывает, когда резерв исчерпан. Весь диапазон сервер получает после перехода в PARTNER DOWN («партнёр недоступен») и ожидания в течение MCLT. По умолчанию переход выполняет администратор вручную, когда точно знает, что партнёр выключен: Set-DhcpServerv4Failover -Name 'LAB-DC1-DC2' -PartnerDown. Автоматический переход отключён; включается он так:

Set-DhcpServerv4Failover -Name 'LAB-DC1-DC2' `
  -AutoStateTransition $true -StateSwitchInterval 01:00:00

Автоматика удобна, но по умолчанию она выключена не случайно: сервер не отличает отказ партнёра от обрыва связи между ними.

Изменения в области, включённой в failover, сами не копируются. После правки опций, диапазона или резервирований выполните репликацию с сервера, где настройки верные: она перезаписывает настройки партнёра.

Invoke-DhcpServerv4FailoverReplication -Name 'LAB-DC1-DC2'

Проверку отказа выполняйте только на тестовой подсети; пошагового сценария в документации нет, это иллюстрация логики режимов. На PC2 запомните строку DHCP Server из ipconfig /all. В load balance адрес выдал сервер, чей диапазон хеша совпал с MAC-адресом клиента, и остановить нужно именно его, иначе проверка ничего не докажет. Ниже это DC2 (в строке 192.168.10.12); если у вас 192.168.10.11, поменяйте DC1 и DC2 местами. Остановите службу на нём (Stop-Service dhcpserver), на втором сервере выполните Get-DhcpServerv4Failover: состояние должно перестать быть Normal (если нет, повторите через минуту). За консолью PC2 (не по удалённому рабочему столу) выполните ipconfig /release и ipconfig /renew: ответить может только живой партнёр, и в строке DHCP Server появится его адрес. Запустите остановленную службу (Start-Service dhcpserver) и убедитесь, что состояние снова Normal. Смену состояний записывает канал Admin журнала DHCP-сервера.

Отношение удаляется командой Remove-DhcpServerv4Failover -Name 'LAB-DC1-DC2': она убирает его на обоих серверах, а в консоли удаление отношения убирает привязанные области с сервера-партнёра. Сначала сделайте копию (раздел «Резервная копия» ниже) и выполняйте команду на сервере, где область должна остаться.

Шаг 5. Регистрация имён в DNS

DHCP-сервер умеет вносить в DNS записи A и PTR за клиентов. Режим DynamicUpdates принимает три значения: Always (сервер регистрирует имена всегда), OnClientRequest (только если клиент попросил об этом, опция 81) и Never. Посмотрите текущие настройки и задайте режим для всего сервера:

Get-DhcpServerv4DnsSetting
Set-DhcpServerv4DnsSetting -DynamicUpdates OnClientRequest `
  -DeleteDnsRRonLeaseExpiry $true

-DeleteDnsRRonLeaseExpiry удаляет записи клиента по окончании аренды. Клиенты Windows обычно регистрируют имена сами, а Always нужен для устройств, которые этого не умеют. Подробности о динамических обновлениях и устаревших записях — в Windows Server с нуля 04.

У нас DHCP работает на контроллерах домена, и здесь есть ловушка. Без заданных учётных данных служба DHCP работает с DNS от имени учётной записи компьютера-контроллера, у которой полный контроль над DNS-объектами: записи, которые она регистрирует, может перезаписать клиент старой версии, и защита безопасных динамических обновлений зоны теряет смысл. В журнале при этом появляется событие 1056. Страница про него написана для Windows Server 2003, но событие есть и в актуальном списке. Она рекомендует задать учётные данные, а если это невозможно, не совмещать DHCP и DNS на одном компьютере.

Подойдёт обычная доменная учётная запись, которая не истекает, но не администратор домена. Мы создали svc-dhcp-dns в подразделении Service в Windows Server с нуля 05 (раздел «Служебная учётная запись»); если вы её пропустили, выполните команды оттуда. На обоих серверах задайте учётные данные, указав одну и ту же запись: иначе партнёр не сможет обновить записи, которыми владеет другой сервер.

$cred = Get-Credential
Set-DhcpServerDnsCredential -Credential $cred

В окне введите LAB\svc-dhcp-dns и пароль; в скриптах пароль не пишите.

Мониторинг и диагностика

Основные команды:

Get-DhcpServerv4Lease -ScopeId 192.168.10.0
Get-DhcpServerv4Lease -ScopeId 192.168.10.0 -BadLeases
Get-DhcpServerv4ScopeStatistics -ScopeId 192.168.10.0 -Failover
Get-DhcpServerv4Statistics

Первая команда по умолчанию показывает только активные аренды, -AllLeases добавляет предложенные, отклонённые и истёкшие. «Плохие» аренды (-BadLeases) появляются, когда клиент отказался от адреса из-за конфликта: сервер не выдаёт такой адрес 10 минут. Области, где занято больше 80 % адресов, находит фильтр Where-Object -FilterScript { $_.PercentageInUse -gt 80 }. Лучше не допускать статических адресов в пуле, чем ловить конфликты (Set-DhcpServerSetting -ConflictDetectionAttempts, по умолчанию 0).

Журналы лежат в Просмотре событий: «Журналы приложений и служб» → Microsoft → Windows → DHCP-Server (каналы Operational, Admin, System, Filter Notification и Audit). Журналы аудита включены по умолчанию, их настройки показывает Get-DhcpServerAuditLog.

Симптом Вероятная причина Что проверить
Клиент получил 169.254.x.x сервер не авторизован, область неактивна, пул исчерпан, нет связи Get-DhcpServerInDC, State в Get-DhcpServerv4Scope, статистика, событие 1046
У клиента чужие шлюз и DNS в подсети отвечает другой DHCP-сервер, например роутер строка DHCP Server в ipconfig /all
Failover не создаётся расхождение времени, область уже есть на партнёре, закрыт порт 647, партнёр не авторизован время, Get-DhcpServerv4Scope -ComputerName, брандмауэр
Резервирование не добавляется адрес вне диапазона раздачи StartRange и EndRange области
Событие 1056 в журнале нет DNS-учётных данных на контроллере Set-DhcpServerDnsCredential

Резервная копия

Копию DHCP-сервера удобно делать двумя способами: Backup-DhcpServer сохраняет базу в каталог, Export-DhcpServer записывает конфигурацию (по желанию и аренды) в файл XML. Каталог C:\Backup\DHCP на DC1 создаётся здесь, остальные каталоги копий серии описаны в Windows Server с нуля 11:

New-Item -ItemType Directory -Force -Path C:\Backup\DHCP
icacls C:\Backup\DHCP /inheritance:r `
  /grant '*S-1-5-32-544:(OI)(CI)F' '*S-1-5-18:(OI)(CI)F'
Backup-DhcpServer -Path C:\Backup\DHCP
Export-DhcpServer -File C:\Backup\DHCP\dc1.xml -Leases

Каталог унаследовал бы права корня диска C:, а в копии лежит база аренд, поэтому icacls оставляет доступ только Administrators и SYSTEM (параметры — в Windows Server с нуля 08, откат — icacls C:\Backup\DHCP /reset). Требования к правам каталога в справке Backup-DhcpServer не описаны: убедитесь, что команда по-прежнему пишет в него без ошибки. Вторую копию кладут вне сервера: скрытая общая папка \\FS1\Backups$ создаётся в Windows Server с нуля 11.

Расписание автоматических копий базы задаёт Set-DhcpServerDatabase (параметр -BackupInterval в минутах), текущие настройки показывает Get-DhcpServerDatabase. Для восстановления есть Restore-DhcpServer -Path и Import-DhcpServer -File ... -BackupPath ...: последний перед изменениями сам сохраняет базу в каталог -BackupPath. Восстановление меняет рабочую конфигурацию, поэтому отрепетируйте его на тестовом сервере.

Типичные ошибки и недоразумения

  • «Failover — это резервная копия». Нет: оба сервера хранят актуальные аренды, но ошибочная правка области после репликации окажется на обоих. Копии нужны отдельно.
  • Изменили опции на DC1, а клиенты получают старые. Забыта репликация (Invoke-DhcpServerv4FailoverReplication) или клиент ещё не продлил аренду: ускорить проверку можно командами ipconfig /release и /renew за консолью компьютера.
  • «Авторизация защитит от домашнего роутера». Нет: она останавливает лишь не авторизованные серверы Windows; от посторонних устройств защищает DHCP snooping на коммутаторе.
  • Резервирование «не работает». Проверьте, что ClientId совпадает с MAC-адресом, который устройство действительно использует (случайные MAC-адреса Wi-Fi это ломают), и что адрес лежит в диапазоне раздачи области.
  • Секрет failover в тексте команды. Он остаётся в истории и файлах. Вводите его в ответ на запрос.

Проверьте себя

  1. Что произойдёт с DHCP-сервером Windows, установленным в домене, но не авторизованным в Active Directory? Он прекращает обслуживать клиентов и не выдаёт адреса; в журнале появляется событие 1046. Авторизация выполняется командой Add-DhcpServerInDC под учётной записью с правом записи в контейнер конфигурации AD (для этого нужна Enterprise Admins).
  2. Почему область в серии охватывает 192.168.10.1–.254, хотя клиентам выдаётся только .100–.200? Резервирование нельзя создать вне диапазона раздачи области. Область на всю подсеть с исключениями .1–.99 и .201–.254 оставляет клиентам пул .100–.200, а резервирование в исключённом диапазоне продолжает работать.
  3. Чем отличаются режимы failover Load balance и Hot standby? В Load balance (режим по умолчанию) отвечают оба сервера, по умолчанию 50:50, выбор по хешу MAC-адреса клиента. В Hot standby отвечает только активный сервер, а резервный берёт на себя запросы при его недоступности и держит резерв адресов (по умолчанию 5 %).
  4. Что нужно сделать после изменения опций области, включённой в failover? Выполнить Invoke-DhcpServerv4FailoverReplication с сервера, где настройки верные: репликация перезапишет настройки партнёра.
  5. Зачем на контроллере домена с ролью DHCP задавать учётные данные для DNS и почему на обоих серверах они должны совпадать? Без них DHCP работает от имени компьютера-контроллера с полным контролем над DNS-объектами, и защита безопасных динамических обновлений теряет смысл (событие 1056). Записи, созданные одним сервером, может обновлять только он сам, поэтому партнёр по failover обязан использовать ту же учётную запись.

Что дальше

Источники

Ссылки ведут на английские страницы: русские версии Learn — машинный перевод, названия окон и пунктов в тексте сверены с ними.

Ещё по теме «Windows Server»