Зачем нужен DHCP Failover
Служба DHCP — один из критически важных компонентов корпоративной сети. Если единственный DHCP-сервер выходит из строя, клиенты перестают получать IP-адреса, что приводит к полной потере сетевого взаимодействия. До появления встроенного механизма failover в Windows Server 2012 администраторы использовали обходные решения: разделение области 80/20 между двумя серверами или кластеризацию на уровне Windows Failover Clustering.
DHCP Failover — это встроенный механизм отказоустойчивости, позволяющий двум DHCP-серверам обслуживать одну и ту же область (scope) с автоматической синхронизацией аренд. Он работает на уровне приложения и не требует общего хранилища или кластера Windows. Поддерживается два режима работы:
- Hot Standby — один сервер активен, второй находится в режиме ожидания и берёт на себя нагрузку при отказе основного
- Load Balance — оба сервера одновременно обслуживают клиентов, распределяя нагрузку по настраиваемой пропорции
Ключевые преимущества перед старым подходом 80/20: полная синхронизация базы аренд, автоматическое переключение, отсутствие конфликтов IP-адресов и возможность использовать 100% пула адресов на каждом сервере.
Требования и ограничения
Для настройки DHCP Failover необходимо учитывать следующие ограничения:
- Failover поддерживается только для IPv4-областей (для IPv6 используется stateless DHCPv6)
- Максимум два сервера в отношении failover для одной области
- Оба сервера должны работать под управлением Windows Server 2012 или новее
- Время на серверах должно быть синхронизировано (разница не более 1 минуты)
- Между серверами должен быть открыт TCP-порт 647 для репликации
Проверьте синхронизацию времени командой:
w32tm /query /status
w32tm /query /peers
Если серверы находятся в домене Active Directory, время синхронизируется автоматически через PDC Emulator. Для рабочих групп настройте NTP вручную.
Подготовка инфраструктуры
Перед настройкой failover убедитесь, что роль DHCP установлена и авторизована на обоих серверах. Если второй сервер новый, установите роль через PowerShell:
# Установка роли DHCP на втором сервере
Install-WindowsFeature DHCP -IncludeManagementTools
# Авторизация DHCP-сервера в Active Directory
Add-DhcpServerInDC -DnsName dhcp02.corp.local -IPAddress 10.0.0.12
# Проверка авторизации
Get-DhcpServerInDC
На первом сервере должна быть настроена область (scope) с необходимыми параметрами: диапазон адресов, исключения, опции (DNS-серверы, шлюз, домен). Всю конфигурацию области не нужно создавать на втором сервере — она будет реплицирована автоматически при настройке failover.
Настройка области на первом сервере
Создайте область на основном DHCP-сервере, если она ещё не существует:
# Создание области
Add-DhcpServerv4Scope -Name "Office LAN" `
-StartRange 10.0.1.100 `
-EndRange 10.0.1.250 `
-SubnetMask 255.255.255.0 `
-LeaseDuration 8.00:00:00 `
-State Active
# Добавление исключений (для серверов, принтеров)
Add-DhcpServerv4ExclusionRange -ScopeId 10.0.1.0 `
-StartRange 10.0.1.100 -EndRange 10.0.1.110
# Настройка опций области
Set-DhcpServerv4OptionValue -ScopeId 10.0.1.0 `
-Router 10.0.1.1 `
-DnsServer 10.0.0.10,10.0.0.11 `
-DnsDomain corp.local
# Проверка конфигурации
Get-DhcpServerv4Scope | Format-Table -AutoSize
Get-DhcpServerv4OptionValue -ScopeId 10.0.1.0
Убедитесь, что область активна и клиенты получают адреса от первого сервера, прежде чем переходить к настройке failover.
Открытие портов в брандмауэре
DHCP Failover использует TCP-порт 647 для связи между партнёрами. Откройте его на обоих серверах:
# На обоих серверах
New-NetFirewallRule -DisplayName "DHCP Failover" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 647 `
-Action Allow `
-Profile Domain
# Проверка доступности порта с первого сервера
Test-NetConnection -ComputerName dhcp02.corp.local -Port 647
Также убедитесь, что стандартные DHCP-порты (UDP 67/68) открыты на обоих серверах для обслуживания клиентов.
Настройка DHCP Failover через PowerShell
PowerShell — предпочтительный способ настройки failover, особенно при управлении множеством областей. Он позволяет автоматизировать процесс и документировать конфигурацию.
Режим Load Balance
В режиме Load Balance оба сервера одновременно обслуживают клиентов. Это оптимальный режим для площадок, где оба сервера постоянно доступны:
# Настройка failover в режиме Load Balance
Add-DhcpServerv4Failover -Name "DHCP-FO-Office" `
-PartnerServer dhcp02.corp.local `
-ScopeId 10.0.1.0 `
-SharedSecret "K0mpl3xP@ssw0rd!" `
-LoadBalancePercent 50 `
-MaxClientLeadTime 01:00:00 `
-AutoStateTransition $true `
-StateSwitchInterval 00:30:00
# Проверка состояния failover
Get-DhcpServerv4Failover -Name "DHCP-FO-Office"
# Проверка на обоих серверах
Get-DhcpServerv4Failover -ComputerName dhcp01.corp.local
Get-DhcpServerv4Failover -ComputerName dhcp02.corp.local
Параметр LoadBalancePercent задаёт процент запросов, обрабатываемых основным сервером. Значение 50 означает равномерное распределение. MaxClientLeadTime определяет максимальное время, на которое сервер может продлить аренду сверх обычного срока при отказе партнёра. StateSwitchInterval — время ожидания перед автоматическим переключением в состояние Partner Down.
Режим Hot Standby
Режим Hot Standby подходит для сценариев с выделенным резервным сервером, например, в филиале с резервным DHCP в ЦОД:
# Настройка failover в режиме Hot Standby
Add-DhcpServerv4Failover -Name "DHCP-FO-Branch" `
-PartnerServer dhcp02.corp.local `
-ScopeId 10.0.2.0 `
-SharedSecret "K0mpl3xP@ssw0rd!" `
-ServerRole Active `
-ReservePercent 5 `
-MaxClientLeadTime 01:00:00 `
-AutoStateTransition $true `
-StateSwitchInterval 00:30:00
# На резервном сервере роль будет Standby автоматически
Get-DhcpServerv4Failover -ComputerName dhcp02.corp.local
Параметр ReservePercent определяет долю адресного пула, зарезервированную за standby-сервером. Значение 5% означает, что standby-сервер может выдать только 5% адресов из пула в нормальном режиме работы. При переходе в состояние Partner Down ему становится доступен весь пул.
Добавление нескольких областей в failover
Для добавления нескольких областей в существующее отношение failover используйте Add-DhcpServerv4FailoverScope:
# Добавление дополнительных областей
Add-DhcpServerv4FailoverScope -Name "DHCP-FO-Office" `
-ScopeId 10.0.3.0,10.0.4.0,10.0.5.0
# Просмотр всех областей в failover
Get-DhcpServerv4Failover -Name "DHCP-FO-Office" | Select-Object -ExpandProperty ScopeId
# Принудительная репликация после добавления
Invoke-DhcpServerv4FailoverReplication -Name "DHCP-FO-Office"
Все настройки области (опции, исключения, резервирования) реплицируются на партнёра автоматически. Однако серверные опции (Server Options) не реплицируются — их нужно настраивать на каждом сервере отдельно.
Настройка через графическую консоль DHCP
Для тех, кто предпочитает GUI, настройка failover доступна через стандартную консоль DHCP (dhcpmgmt.msc). Процесс интуитивно понятен, но менее удобен при большом количестве областей.
Откройте консоль DHCP на основном сервере, раскройте узел IPv4, щёлкните правой кнопкой мыши по нужной области и выберите Configure Failover. Запустится мастер, который проведёт через все этапы:
- Выбор областей для включения в failover (можно выбрать несколько)
- Указание сервера-партнёра по имени или IP-адресу
- Имя отношения failover (Relationship Name)
- Выбор режима: Load Balance или Hot Standby
- Для Load Balance — процентное соотношение нагрузки
- Для Hot Standby — роль текущего сервера и процент резерва
- Shared Secret для аутентификации между серверами
- Параметры MCLT и State Switchover Interval
После завершения мастера конфигурация области реплицируется на партнёра. Проверьте консоль DHCP на втором сервере — области должны появиться с пометкой «Failover».
Рекомендации по параметрам
Для продакшен-среды рекомендуются следующие параметры:
| Параметр | Рекомендация | Обоснование |
|---|
| Maximum Client Lead Time | 1 час | Баланс между быстрым переключением и стабильностью |
| State Switchover Interval | 30-60 минут | Достаточно для кратковременных сбоев сети |
| Auto State Transition | Включено | Автоматическое переключение без вмешательства администратора |
| Load Balance % | 50/50 | Равномерная нагрузка при одинаковых серверах |
| Reserve % (Hot Standby) | 5-10% | Минимальный пул для standby на время переключения |
Shared Secret должен быть сложным и уникальным для каждого отношения failover. Храните его в защищённом хранилище паролей.
Мониторинг и управление состояниями
DHCP Failover имеет несколько состояний, понимание которых критически важно для диагностики проблем:
- Normal — оба сервера работают, связь установлена, репликация активна
- Communication Interrupted — связь между серверами потеряна, каждый работает автономно
- Partner Down — администратор или автоматика подтвердили, что партнёр недоступен
- Recover — восстановление после сбоя, синхронизация базы аренд
- Recover Wait — ожидание завершения MCLT перед возвратом в Normal
# Мониторинг состояния failover
Get-DhcpServerv4Failover | Select-Object Name, State, Mode, `
PartnerServer, LoadBalancePercent
# Детальная статистика аренд
Get-DhcpServerv4ScopeStatistics -ScopeId 10.0.1.0 -Failover
# Просмотр событий DHCP в журнале
Get-WinEvent -LogName "Microsoft-Windows-DHCP-Server/Operational" `
-MaxEvents 50 | Where-Object { $_.Message -like "*failover*" }
Ручное переключение состояний
Если автоматическое переключение отключено или вы хотите ускорить процесс:
# Перевод в состояние Partner Down (когда партнёр точно недоступен)
Set-DhcpServerv4Failover -Name "DHCP-FO-Office" `
-State PartnerDown
# Возврат в нормальное состояние после восстановления партнёра
# Сначала запустите репликацию
Invoke-DhcpServerv4FailoverReplication -Name "DHCP-FO-Office"
# Затем переведите в Normal
Set-DhcpServerv4Failover -Name "DHCP-FO-Office" `
-State Normal
Важно: не переводите failover в состояние Normal, пока партнёр действительно не восстановлен и репликация не завершена. Иначе возможны конфликты IP-адресов.
Синхронизация и репликация
Репликация базы аренд происходит автоматически при каждом изменении (выдача, продление или освобождение аренды). Однако изменения конфигурации области (опции, исключения, резервирования) реплицируются только по команде:
# Принудительная репликация всех failover-отношений
Get-DhcpServerv4Failover | ForEach-Object {
Write-Host "Replicating $($_.Name)..."
Invoke-DhcpServerv4FailoverReplication -Name $_.Name
}
# Репликация конкретного отношения
Invoke-DhcpServerv4FailoverReplication -Name "DHCP-FO-Office"
# Репликация конкретной области
Invoke-DhcpServerv4FailoverReplication -ScopeId 10.0.1.0
После изменения любых настроек области (добавление резервирования, изменение опций, корректировка исключений) всегда выполняйте принудительную репликацию. Это типичная ошибка администраторов — изменения на одном сервере не попадают на второй без явной команды.
Автоматизация репликации
Создайте задачу в планировщике для периодической синхронизации конфигурации:
# Скрипт для автоматической репликации (сохраните как C:\Scripts\dhcp-replicate.ps1)
$failovers = Get-DhcpServerv4Failover
foreach ($fo in $failovers) {
try {
Invoke-DhcpServerv4FailoverReplication -Name $fo.Name -Force
Write-EventLog -LogName Application -Source "DHCP-Failover-Script" `
-EventId 1000 -EntryType Information `
-Message "Репликация $($fo.Name) выполнена успешно"
} catch {
Write-EventLog -LogName Application -Source "DHCP-Failover-Script" `
-EventId 1001 -EntryType Error `
-Message "Ошибка репликации $($fo.Name): $_"
}
}
# Создание задачи в планировщике (каждые 4 часа)
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-ExecutionPolicy Bypass -File C:\Scripts\dhcp-replicate.ps1"
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Hours 4) `
-Once -At (Get-Date)
Register-ScheduledTask -TaskName "DHCP Failover Replication" `
-Action $action -Trigger $trigger `
-User "SYSTEM" -RunLevel Highest
Диагностика типичных проблем
При работе с DHCP Failover наиболее часто встречаются следующие проблемы и их решения:
Состояние Communication Interrupted
Если failover застревает в состоянии Communication Interrupted, проверьте:
# 1. Проверка сетевой связности
Test-NetConnection -ComputerName dhcp02.corp.local -Port 647
# 2. Проверка службы DHCP на партнёре
Get-Service DHCPServer -ComputerName dhcp02.corp.local
# 3. Проверка брандмауэра
Get-NetFirewallRule | Where-Object {
$_.DisplayName -like "*DHCP*" -or $_.LocalPort -eq 647
} | Format-Table DisplayName, Enabled, Direction, Action
# 4. Проверка синхронизации времени
w32tm /monitor /computers:dhcp01.corp.local,dhcp02.corp.local
# 5. Просмотр журнала аудита DHCP
Get-Content "C:\Windows\System32\dhcp\DhcpSrvLog-*.log" -Tail 100 |
Select-String "failover|partner"
Наиболее частая причина — блокировка порта 647 промежуточным файрволом или рассинхронизация времени более чем на 60 секунд.
Конфликты IP-адресов после восстановления
Если после длительного простоя одного из серверов возникают конфликты адресов:
# Просмотр конфликтных аренд
Get-DhcpServerv4Lease -ScopeId 10.0.1.0 | Where-Object {
$_.AddressState -like "*Declined*"
} | Format-Table IPAddress, HostName, AddressState
# Очистка отклонённых адресов
Get-DhcpServerv4Lease -ScopeId 10.0.1.0 | Where-Object {
$_.AddressState -like "*Declined*"
} | Remove-DhcpServerv4Lease
# Полная пересинхронизация
Invoke-DhcpServerv4FailoverReplication -Name "DHCP-FO-Office" -Force
Для предотвращения конфликтов включите обнаружение конфликтов на обоих серверах:
Set-DhcpServerSetting -ConflictDetectionAttempts 2
Ошибка при добавлении failover
Если мастер или командлет возвращает ошибку при создании отношения failover:
# Проверка, что область не входит в другое отношение failover
Get-DhcpServerv4Failover | Select-Object -ExpandProperty ScopeId
# Удаление некорректного отношения и пересоздание
Remove-DhcpServerv4Failover -Name "DHCP-FO-Office" -Force
# На втором сервере удалите реплицированную область
Remove-DhcpServerv4Scope -ScopeId 10.0.1.0 -ComputerName dhcp02.corp.local -Force
# Пересоздайте failover
Add-DhcpServerv4Failover -Name "DHCP-FO-Office" `
-PartnerServer dhcp02.corp.local `
-ScopeId 10.0.1.0 `
-SharedSecret "NewP@ssw0rd!" `
-LoadBalancePercent 50
Лучшие практики и рекомендации
На основе опыта эксплуатации DHCP Failover в корпоративных средах сформулированы ключевые рекомендации:
- Используйте Load Balance для одной площадки — оба сервера активны, нагрузка распределена, переключение мгновенное
- Используйте Hot Standby для распределённых площадок — локальный сервер активен, удалённый в резерве
- Документируйте Shared Secret — без него невозможно восстановить или перенастроить failover
- Мониторьте состояние — настройте оповещения на переход в Communication Interrupted
- Регулярно проверяйте репликацию — сравнивайте количество аренд на обоих серверах
- Планируйте обновления серверов — обновляйте по одному, дожидаясь состояния Normal
# Скрипт мониторинга для Zabbix/PRTG
$failovers = Get-DhcpServerv4Failover
foreach ($fo in $failovers) {
if ($fo.State -ne "Normal") {
Write-Output "CRITICAL: DHCP Failover '$($fo.Name)' state: $($fo.State)"
exit 2
}
}
Write-Output "OK: All DHCP failover relationships in Normal state"
exit 0
Периодически тестируйте переключение: остановите службу DHCP на одном сервере и убедитесь, что клиенты продолжают получать адреса от второго. Это позволяет выявить проблемы до реального инцидента.
Оставить комментарий