Отказоустойчивый DHCP в Windows Server: настройка failover

Зачем нужен 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. Запустится мастер, который проведёт через все этапы:

  1. Выбор областей для включения в failover (можно выбрать несколько)
  2. Указание сервера-партнёра по имени или IP-адресу
  3. Имя отношения failover (Relationship Name)
  4. Выбор режима: Load Balance или Hot Standby
  5. Для Load Balance — процентное соотношение нагрузки
  6. Для Hot Standby — роль текущего сервера и процент резерва
  7. Shared Secret для аутентификации между серверами
  8. Параметры MCLT и State Switchover Interval

После завершения мастера конфигурация области реплицируется на партнёра. Проверьте консоль DHCP на втором сервере — области должны появиться с пометкой «Failover».

Рекомендации по параметрам

Для продакшен-среды рекомендуются следующие параметры:

ПараметрРекомендацияОбоснование
Maximum Client Lead Time1 часБаланс между быстрым переключением и стабильностью
State Switchover Interval30-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 на одном сервере и убедитесь, что клиенты продолжают получать адреса от второго. Это позволяет выявить проблемы до реального инцидента.

Часто задаваемые вопросы

Да, DHCP Failover не зависит от доменной структуры. Серверы аутентифицируются через Shared Secret, а не через Kerberos. Однако оба сервера должны быть авторизованы в своих доменах (или в одном домене при наличии доверия). Для рабочих групп авторизация не требуется.

Клиенты, у которых аренда ещё действует, продолжают работать без перебоев. При продлении аренды запрос обрабатывает доступный сервер. Новые клиенты получают адреса от того сервера, который доступен. В режиме Load Balance переключение происходит мгновенно, так как оба сервера уже активны. В режиме Hot Standby standby-сервер начинает обслуживать клиентов после истечения MCLT.

Для замены одного из серверов: удалите failover-отношение на старом сервере (Remove-DhcpServerv4Failover), установите и настройте роль DHCP на новом сервере, затем создайте failover-отношение заново с новым партнёром. Все аренды реплицируются автоматически. Не забудьте деавторизовать старый сервер (Remove-DhcpServerInDC).

Да, резервирования реплицируются при вызове Invoke-DhcpServerv4FailoverReplication. Однако они не реплицируются автоматически в реальном времени — только аренды синхронизируются мгновенно. После добавления резервирования на одном сервере всегда выполняйте принудительную репликацию.

Да, но failover настраивается для каждой области (scope) внутри суперобласти отдельно. Суперобласть — это логическая группировка, которая не влияет на механизм failover. Добавьте все области суперобласти в одно failover-отношение для упрощения управления.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#DHCP failover#отказоустойчивый DHCP#Windows Server DHCP#DHCP кластер#Hot Standby DHCP#Load Balance DHCP#настройка DHCP failover#репликация DHCP
Комментарии 0

Оставить комментарий

загрузка...