DHCP Failover на Windows Server: отказоустойчивость без кластера
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15 лет администрирования AD-инфраструктуры я пересмотрел все способы обеспечить отказоустойчивость DHCP — от классического split-scope 80/20 до полноценного Failover Cluster с shared storage. И каждый раз прихожу к выводу: для офиса до 1000 РМ встроенный в Windows Server 2012+ механизм DHCP Failover — оптимальный выбор. Не нужен кластер, не нужна общая СХД, настройка занимает 15 минут, отказоустойчивость N+1 из коробки. В статье — как это правильно развернуть и какие грабли встречаются на практике.
Зачем резервировать DHCP
DHCP — тихий, но критичный сервис. Пользователи не замечают, когда он работает, но начинают звонить в техподдержку через 10 минут после того, как он упал — на ноутбуках «нет сети», на телефонах по сети «нет регистрации», новые подключения не получают адрес. Особенно больно на MAC-адресах неслучайного назначения — IP-телефоны Yealink, принтеры, камеры при перезагрузке получают новые адреса или не получают вовсе.
Типичные причины падения одиночного DHCP:
- Плановая перезагрузка сервера под обновления Windows.
- Авария хост-гипервизора, на котором крутится DHCP VM.
- Повреждение базы DHCP (jet-engine может быть капризной).
- Ошибка админа при смене настроек scope.
- Сетевые проблемы — гостевая VLAN потеряла доступ к серверу.
Наличие второго DHCP-сервера с синхронизированным scope решает все эти проблемы.
Режимы Failover: Load Balance vs Hot Standby
| Параметр | Load Balance | Hot Standby |
|---|---|---|
| Как работает | Оба сервера активны, делят запросы | Primary отвечает, Standby молчит |
| Резерв пула | Не нужен (делится по формуле) | Обычно 5% адресов за Standby |
| При падении | Оставшийся обслуживает всё через MCLT | Standby автоматически подхватывает |
| Типичный сценарий | Один сайт, две равноценные машины | Два сайта, один основной |
| Сложность | Проще | Требует понимания роли |
У нас на практике 90% офисов — Load Balance. Оставшиеся 10% — распределённые сети, где основной DHCP в ЦО и резерв в филиале с Hot Standby, чтобы не создавать дополнительный трафик по WAN-каналу.
Подготовка: установка роли DHCP на два сервера
Требования: два Windows Server 2019 или 2022 в одном домене, разные физические/виртуальные хосты, сетевой доступ друг к другу по TCP 647. Имена — например DHCP01 и DHCP02.
# На DHCP01 и DHCP02 (запускать в разное время)
Install-WindowsFeature DHCP -IncludeManagementTools
Add-DhcpServerSecurityGroup
netsh dhcp add securitygroups
Restart-Service dhcpserver
# Авторизация в AD
Add-DhcpServerInDC -DnsName dhcp01.corp.local -IPAddress 10.10.10.11
Add-DhcpServerInDC -DnsName dhcp02.corp.local -IPAddress 10.10.10.12
# Запретить анонимную регистрацию (best practice)
Set-DhcpServerSetting -DynamicBootp $false -NapEnabled $false
Создание scope на primary
Создаём scope только на DHCP01 — Failover автоматически реплицирует его на DHCP02 после настройки отношения. Пример для VLAN 30 (USERS):
Add-DhcpServerv4Scope -Name "VLAN30-USERS" `
-StartRange 10.10.30.10 -EndRange 10.10.31.250 `
-SubnetMask 255.255.254.0 -State Active `
-LeaseDuration 8.00:00:00
Set-DhcpServerv4OptionValue -ScopeId 10.10.30.0 `
-Router 10.10.30.1 `
-DnsServer 10.10.10.21,10.10.10.22 `
-DnsDomain corp.local
# Резервирование для принтеров
Add-DhcpServerv4Reservation -ScopeId 10.10.30.0 `
-IPAddress 10.10.30.50 -ClientId "00-11-22-33-44-55" `
-Name "printer-office-1"
Настройка Failover Relationship
Теперь собственно сама настройка отказоустойчивости. Делается одной командой на DHCP01:
# Load Balance 50/50
Add-DhcpServerv4Failover -Name "DHCP-Failover-Relationship" `
-PartnerServer dhcp02.corp.local `
-ScopeId 10.10.20.0,10.10.30.0,10.10.40.0,10.10.50.0,10.10.60.0 `
-LoadBalancePercent 50 `
-SharedSecret "S3cr3tSharedKey#2026" `
-AutoStateTransition $true `
-StateSwitchInterval 01:00:00
# Либо Hot Standby
Add-DhcpServerv4Failover -Name "DHCP-HotStandby" `
-PartnerServer dhcp02.corp.local `
-ScopeId 10.10.30.0 `
-ServerRole Active -ReservePercent 5 `
-SharedSecret "S3cr3tSharedKey#2026"
Параметры:
- MaxClientLeadTime (MCLT) по умолчанию 1 час — время, которое live-партнёр выдаёт lease от имени упавшего.
- SharedSecret — общий ключ, используется для аутентификации между серверами.
- StateSwitchInterval — задержка до автопереключения в Partner Down при потере связи (рекомендую 1 час).
- AutoStateTransition — автоматически переключаться в Partner Down без вмешательства админа.
Проверка и мониторинг
# Статус Failover Relationship
Get-DhcpServerv4Failover
# Name : DHCP-Failover-Relationship
# PartnerServer : dhcp02.corp.local
# Mode : LoadBalance
# State : Normal
# LoadBalancePercent : 50
# Детальная статистика
Get-DhcpServerv4ScopeStatistics -ScopeId 10.10.30.0 -ComputerName dhcp01.corp.local
Get-DhcpServerv4ScopeStatistics -ScopeId 10.10.30.0 -ComputerName dhcp02.corp.local
# Проверка репликации scope между серверами
Invoke-DhcpServerv4FailoverReplication -Name "DHCP-Failover-Relationship" -Force
Состояния Failover:
- Normal — всё работает, серверы синхронны.
- Communication Interrupted — потеряна связь, оба обслуживают самостоятельно.
- Partner Down — админ или AutoStateTransition объявил партнёра упавшим.
- Recovery — после Partner Down идёт синхронизация при восстановлении.
Тест отказоустойчивости
После настройки обязательно проверяем, что failover реально работает. Сценарий:
- Запустить на тестовом клиенте
ipconfig /releaseиipconfig /renew— проверить получение адреса. - Выключить DHCP01 (shutdown /s /t 0).
- На другом клиенте снова release/renew — должен получить адрес от DHCP02.
- Включить DHCP01, проверить
Get-DhcpServerv4Failover— состояние должно вернуться в Normal.
Реальный кейс: миграция split-scope на Failover
В феврале 2025 года к нам пришла логистическая компания с четырьмя филиалами в Москве и Подмосковье. DHCP был настроен по старой схеме split-scope 80/20 на двух серверах Windows Server 2012 — когда primary падал, secondary отдавал только 20% адресов, быстро исчерпывался, новые клиенты не получали IP.
Задача — перейти на Failover с Load Balance 50/50, мигрировать все 14 scope без прерывания сервиса.
План:
- Обновили оба DHCP-сервера до Windows Server 2022 на виртуалках с Dell Xeon Platinum 8280, 2 vCPU, 4 ГБ RAM.
- Перенесли scope через Export-DhcpServer / Import-DhcpServer, сверили по количеству reservation и option.
- Удалили старые split-scope, оставили только primary как источник.
- Создали Failover Relationship в режиме Load Balance 50/50 с общим ключом.
- Увеличили пул адресов с /24 на /23 там, где приближались к исчерпанию.
- Настроили мониторинг через Zabbix: проверка
Get-DhcpServerv4Failover.Stateкаждые 5 минут. - Протестировали падение и восстановление — failover отработал за 12 секунд.
Работы заняли 1 день (в офисе без пересадки пользователей, с плавным переводом на новые серверы). Через год работы — 0 инцидентов, связанных с DHCP. Стоимость — 35 000 руб. за проект.
Бэкап базы DHCP
База DHCP — jet-engine файл в C:\Windows\System32\dhcp\dhcp.mdb. Автоматический бэкап выполняется в C:\Windows\System32\dhcp\backup\ каждые 60 минут. Но этого мало — при сбое диска вы потеряете всё.
# Скрипт еженедельного бэкапа на сетевую шару
$source = "C:\Windows\System32\dhcp\backup"
$target = "\\backup-server\dhcp-backup\$(Get-Date -Format yyyyMMdd)"
New-Item -ItemType Directory -Force -Path $target | Out-Null
robocopy $source $target /E /R:3 /W:10 /LOG+:C:\Logs\dhcp-backup.log
# Экспорт в XML (для версионирования)
Export-DhcpServer -ComputerName $env:COMPUTERNAME -File "$target\dhcp-export.xml" -Leases -Force
Типичные ошибки при настройке Failover
- Разные часовые пояса. Серверы должны быть синхронизированы по NTP. Разница > 1 минуты ломает Failover.
- Firewall блокирует 647. TCP 647 должен быть открыт между серверами. Также 65535 для DHCP traffic.
- AutoStateTransition выключен. Без него при падении партнёра сервер не переключается сам, пока админ не придёт. Всегда включайте True.
- Настройка Failover на активных клиентах. Примут половину адресов — у клиентов временные сбои. Делайте настройку в нерабочее время.
- Общий ключ простой. SharedSecret — атакуемая поверхность. Минимум 16 символов с спецсимволами.
- Забыли включить Failover для нового scope. При создании scope на primary он не попадает в Failover автоматически. Нужен
Add-DhcpServerv4FailoverScope.
Настроим DHCP Failover в вашей сети
Развёртывание двух Windows Server 2022 с DHCP-ролью, миграция существующих scope с одиночного сервера или split-scope, настройка Load Balance/Hot Standby, интеграция с AD и DNS, мониторинг через Zabbix, бэкап базы. За 1 рабочий день для офиса до 300 РМ.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы
- Что такое DHCP Failover?
- Механизм отказоустойчивости Windows Server 2012+ для DHCP-службы. Два сервера синхронизируют scope и lease базу, при падении одного второй обслуживает клиентов. Не требует Failover Cluster.
- Чем отличается Load Balance от Hot Standby?
- Load Balance — оба сервера активно выдают адреса в пропорции. Hot Standby — primary выдаёт всё, secondary только если primary недоступен. Для офиса 50-500 РМ выбирают Load Balance.
- Сколько scope можно синхронизировать?
- До 500 scope на один failover relationship. На практике реальная нагрузка ощутима уже после 20-30 scope с 10000+ leases.
- Нужен ли DC для DHCP Failover?
- DHCP-сервер должен быть авторизован в AD (только для домена). Сам механизм Failover не использует AD — прямой обмен между двумя DHCP-серверами по TCP 647.
- Что происходит при split-brain?
- Если линк упал, оба переходят в Communication Interrupted и обслуживают клиентов из своего пула. При восстановлении — автоматический reconcile базы leases за 2-5 минут.