DHCP Failover ile Yüksek Erişilebilir DHCP Yapılandırması
Üretim ortamında DHCP’nin çökmesi ne demek, bunu bir kez yaşayan sysadmin çok iyi bilir. Sabahın 7’sinde telefon çalıyor, “ağa bağlanamıyoruz” diye. Bakıyorsun, DHCP sunucusu yanıt vermiyor. Tüm iş istasyonları IP alamıyor, APIPA adresleriyle kafayı yiyor ve sen de kahveni bile içemeden incident kaydı açıyorsun. İşte bu yazı tam da bu senaryoyu ortadan kaldırmak için.
Windows Server’da DHCP Failover, iki DHCP sunucusunun aynı scope’ları paylaşarak birbirini yedeklemesi mantığına dayanır. Microsoft bunu Windows Server 2012 ile hayatımıza soktu ama hala kurumsal ortamlarda yeterince kullanılmıyor. Gelin, sıfırdan bir üretim ortamına yakışır DHCP Failover yapılandırması kuralım.
Mimariyi Anlamak: Failover Modları
DHCP Failover’ın iki farklı çalışma modu var. Hangisini seçeceğin ağının topolojisine ve gereksinimlerine göre değişiyor.
Hot Standby (Sıcak Yedek) Modu
Birincil sunucu tüm IP dağıtımını üstlenir, ikincil sunucu sadece bekler. Birincil sunucu çöktüğünde ikincil devreye girer. Tek bir lokasyonuz varsa ve her iki sunucu da aynı ağ segmentindeyse bu mod mantıklıdır. Birincil sunucu adres havuzunun genelde %80-90’ını yönetir, ikincil sunucuya yüzde 5-10 ayrılır (standby mode için bu değer yapılandırılabilir).
Load Balance (Yük Dengeleme) Modu
Her iki sunucu da eş zamanlı olarak IP dağıtır. Adres havuzu ikisi arasında bölüştürülür (varsayılan %50-%50). Bu mod özellikle iki farklı sitede sunucu bulundurduğunda veya istemci yükünü dağıtmak istediğinde tercih edilir. Üretim ortamlarının büyük çoğunluğu için bu mod önerilir çünkü her iki sunucu da aktif olarak hizmet verir.
Ön Hazırlık: Ortam Tasarımı
Yapılandırmaya geçmeden önce şu kararları vermiş olman gerekiyor:
- DHCP Sunucu 1 (Primary): dhcp01.sirket.local – 192.168.1.10
- DHCP Sunucu 2 (Secondary): dhcp02.sirket.local – 192.168.1.11
- Scope: 192.168.10.0/24 – İstemci ağı
- Failover Modu: Load Balance (%50/%50)
- Her iki sunucu da Domain üyesi olmalı
Her iki sunucuya da DHCP rol kurulumu yapılmış ve scope’lar birincil sunucuda tanımlanmış olmalı. İkincil sunucuda scope ayrıca tanımlamana gerek yok, failover yapılandırması bunu otomatik aktaracak.
DHCP Rol Kurulumu
İki sunucuya da DHCP rolünü kuruyoruz. PowerShell ile yapalım:
# Her iki sunucuda da çalıştır
Install-WindowsFeature -Name DHCP -IncludeManagementTools
# DHCP sunucusunu domain'e yetkilendir (sadece bir kez, domain admin olarak)
Add-DhcpServerInDC -DnsName "dhcp01.sirket.local" -IPAddress 192.168.1.10
Add-DhcpServerInDC -DnsName "dhcp02.sirket.local" -IPAddress 192.168.1.11
# Yetkilendirmeyi doğrula
Get-DhcpServerInDC
Burada dikkat edilmesi gereken nokta: Her iki sunucunun da Active Directory’de yetkilendirilmiş olması zorunlu. Yetkilendirilmemiş DHCP sunucusu domain ortamında IP dağıtamaz. Bunu atlayan ekipler sonradan “neden çalışmıyor” diye saatlerini harcıyor.
Birincil Sunucuda Scope Oluşturma
Failover ilişkisi kurmadan önce birincil sunucuda scope’un tam olarak yapılandırılmış olması gerekiyor:
# Birincil DHCP sunucusunda çalıştır (dhcp01)
Add-DhcpServerv4Scope `
-Name "İstemci Ağı" `
-StartRange 192.168.10.100 `
-EndRange 192.168.10.250 `
-SubnetMask 255.255.255.0 `
-Description "Kullanıcı iş istasyonları için DHCP scope" `
-State Active
# Scope seçeneklerini ayarla
Set-DhcpServerv4OptionValue `
-ScopeId 192.168.10.0 `
-DnsServer 192.168.1.5, 192.168.1.6 `
-Router 192.168.10.1 `
-DnsDomain "sirket.local"
# Lease süresi - kurumsal ortam için 8 saat makul
Set-DhcpServerv4Scope `
-ScopeId 192.168.10.0 `
-LeaseDuration (New-TimeSpan -Hours 8)
# Scope durumunu kontrol et
Get-DhcpServerv4Scope -ScopeId 192.168.10.0
Lease süresi konusunda bir not düşeyim: Çok uzun tutarsan (örneğin varsayılan 8 gün) failover senaryolarında istemciler eski sunucunun kirasını taşımaya devam eder ve sorunlar çıkabilir. Çok kısa tutarsan gereksiz DHCP trafiği oluşturursun. Kurumsal LAN ortamı için 4-8 saat, Wi-Fi misafir ağları için 1-2 saat benim tercihim.
Failover İlişkisinin Kurulması
Asıl iş burada başlıyor. PowerShell ile failover ilişkisini kuruyoruz:
# Birincil DHCP sunucusunda çalıştır
Add-DhcpServerv4Failover `
-Name "DHCP-Failover-LAN" `
-PartnerServer "dhcp02.sirket.local" `
-ScopeId 192.168.10.0 `
-Mode LoadBalance `
-LoadBalancePercent 50 `
-SharedSecret "G3rcektenGucluBirSifre!2024" `
-AutoStateTransition $True `
-MaxClientLeadTime (New-TimeSpan -Minutes 60) `
-StateSwitchInterval (New-TimeSpan -Minutes 60)
Parametreleri açıklayayım:
- -Name: Failover ilişkisine verilen benzersiz isim. Birden fazla scope için aynı ilişkiyi kullanabilirsin
- -PartnerServer: İkincil DHCP sunucusunun FQDN’i. IP adresi de kullanabilirsin ama FQDN tercih et
- -ScopeId: Failover kapsamına alınacak scope’un subnet adresi
- -Mode: LoadBalance veya HotStandby
- -LoadBalancePercent: Birincil sunucunun yönettiği adres yüzdesi
- -SharedSecret: İki sunucu arasındaki iletişimi şifreleyen parola. Boş bırakma
- -AutoStateTransition: Partner’a ulaşılamazsa otomatik olarak NORMAL duruma geçiş yapılsın mı
- -MaxClientLeadTime: Partner’ın erişilemez olduğu durumda ne kadar süre geçtikten sonra tek başına çalışmaya başlasın
- -StateSwitchInterval: AutoStateTransition için bekleme süresi
Komutu çalıştırdığında sana partner sunucunun kimlik bilgileri sorulacak. Domain admin veya DHCP Admins grubunda yetkili bir hesap kullan.
Yapılandırmanın Doğrulanması
# Failover ilişkisini görüntüle
Get-DhcpServerv4Failover -Name "DHCP-Failover-LAN"
# Her iki sunucudan da istatistikleri kontrol et
Get-DhcpServerv4ScopeStatistics -ScopeId 192.168.10.0
# İkincil sunucuda scope'un oluşup oluşmadığını kontrol et
# dhcp02 üzerinde çalıştır:
Get-DhcpServerv4Scope
# Failover durumunu detaylı gör
Get-DhcpServerv4Failover | Select-Object Name, State, PartnerServer, Mode, LoadBalancePercent
Başarılı bir yapılandırma sonrasında State değerinin Normal olması beklenir. Eğer CommunicationInterrupted veya PartnerDown görüyorsan iki sunucu arasındaki iletişimde sorun var demektir. Firewall’unda TCP 647 portunu açman gerekiyor (DHCP Failover portu).
Firewall Kuralları
Windows Firewall üzerinde bu portları açman gerekiyor:
# Her iki sunucuda da çalıştır
New-NetFirewallRule `
-DisplayName "DHCP Failover - Inbound" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 647 `
-Action Allow `
-Profile Domain
New-NetFirewallRule `
-DisplayName "DHCP Failover - Outbound" `
-Direction Outbound `
-Protocol TCP `
-RemotePort 647 `
-Action Allow `
-Profile Domain
Kurumsal ortamda bu kuralları GPO ile dağıtmak çok daha temiz bir yaklaşım. Manuel olarak sunucuya bağlanıp kural açmak hem zaman kaybı hem de dokümantasyon açığı yaratır.
Yeni Scope’ları Failover İlişkisine Eklemek
İlerleyen dönemde yeni bir VLAN ekledin ve yeni bir DHCP scope oluşturdun. Mevcut failover ilişkisine dahil etmek için:
# Yeni scope oluştur
Add-DhcpServerv4Scope `
-Name "Sunucu Ağı" `
-StartRange 192.168.20.50 `
-EndRange 192.168.20.200 `
-SubnetMask 255.255.255.0 `
-State Active
# Mevcut failover ilişkisine ekle
Add-DhcpServerv4FailoverScope `
-Name "DHCP-Failover-LAN" `
-ScopeId 192.168.20.0
# Doğrula
Get-DhcpServerv4Failover -Name "DHCP-Failover-LAN" | Select-Object -ExpandProperty ScopeId
Rezervasyonları Yönetmek
Failover ortamında rezervasyonlar otomatik olarak replike edilir. Ama bunu test etmek önemli:
# Birincil sunucuda rezervasyon oluştur
Add-DhcpServerv4Reservation `
-ScopeId 192.168.10.0 `
-IPAddress 192.168.10.101 `
-ClientId "00-1A-2B-3C-4D-5E" `
-Description "Yazici-Muhasebe"
# Birkaç dakika bekle, sonra ikincil sunucuda kontrol et
# dhcp02 üzerinde:
Get-DhcpServerv4Reservation -ScopeId 192.168.10.0
Rezervasyon replikasyonu anında olmayabilir. Failover protokolü periyodik olarak senkronizasyon yapar. Acil bir rezervasyon eklediysen ve ikincil sunucunun hemen öğrenmesini istiyorsan:
# Birincil sunucuda manuel replikasyon tetikle
Invoke-DhcpServerv4FailoverReplication `
-Name "DHCP-Failover-LAN" `
-Force
Failover Senaryolarını Test Etmek
Üretim ortamına almadan önce mutlaka failover’ı test et. “Çalışır herhalde” diyerek geçme. O gün geldiğinde test etmemiş olduğun için pişman olursun.
Senaryo 1: Birincil sunucuyu durdur
# dhcp01 üzerinde DHCP servisini durdur
Stop-Service -Name DHCPServer
# Bir istemciden IP yenileme yap
# ipconfig /release
# ipconfig /renew
# dhcp02'nin IP dağıtıp dağıtmadığını kontrol et
# dhcp02 üzerinde:
Get-DhcpServerv4Lease -ScopeId 192.168.10.0
# Failover durumunu kontrol et
Get-DhcpServerv4Failover -Name "DHCP-Failover-LAN"
# State: PartnerDown olmalı
Senaryo 2: Ağ bağlantısı kesintisi simülasyonu
Firewall kuralı ekleyerek iki sunucu arasındaki TCP 647 trafiğini geçici olarak kes. Bu, gerçek bir ağ arızasını simüle eder. CommunicationInterrupted durumunu görmeli ve MaxClientLeadTime sonrasında otomatik olarak Normal moda geçişi izlemelisin.
# Test sonrası servisi geri başlat
Start-Service -Name DHCPServer
# Failover durumunun Normal'e döndüğünü doğrula
Get-DhcpServerv4Failover -Name "DHCP-Failover-LAN" | Select-Object Name, State
İzleme ve Alerting
Canlı ortamda DHCP failover durumunu izlemek için basit bir monitoring scripti:
# DHCP Failover Durum Kontrolü - Monitoring scripti
# Her 5 dakikada bir çalıştırılabilir (Task Scheduler ile)
$failoverRelations = Get-DhcpServerv4Failover
$alertNeeded = $false
foreach ($relation in $failoverRelations) {
if ($relation.State -ne "Normal") {
$alertNeeded = $true
$message = "UYARI: DHCP Failover '$($relation.Name)' durumu: $($relation.State) - Partner: $($relation.PartnerServer)"
# Windows Event Log'a yaz
Write-EventLog `
-LogName Application `
-Source "DHCPFailoverMonitor" `
-EventId 9001 `
-EntryType Warning `
-Message $message
Write-Host $message -ForegroundColor Red
}
}
# Kira havuzu doluluk kontrolü
$scopes = Get-DhcpServerv4ScopeStatistics
foreach ($scope in $scopes) {
$usagePercent = ($scope.InUse / $scope.Total) * 100
if ($usagePercent -gt 80) {
Write-Host "UYARI: Scope $($scope.ScopeId) kullanımı %$([math]::Round($usagePercent, 1))" -ForegroundColor Yellow
}
}
if (-not $alertNeeded) {
Write-Host "$(Get-Date): DHCP Failover durumu Normal" -ForegroundColor Green
}
Bu scripti Task Scheduler’a ekle, çıktısını log dosyasına yönlendir. SCOM, Zabbix veya başka bir izleme aracın varsa EventLog entegrasyonu üzerinden alert kural tanımla.
Sık Karşılaşılan Sorunlar
“The partner server is refusing the request” hatası
Genellikle iki sunucunun sistemin saat farkı 1 dakikayı geçtiğinde bu hatayla karşılaşırsın. DHCP Failover zaman senkronizasyonuna çok hassas. Her iki sunucunun aynı NTP kaynağına baktığından emin ol.
# NTP yapılandırmasını kontrol et
w32tm /query /status
# Domain üyesi sunucular DC'den saat alır, ama kontrol etmekte fayda var
w32tm /resync /force
Scope replikasyonu tamamlanmıyor
Failover ilişkisi kurulu ama ikincil sunucuda scope görünmüyorsa senkronizasyonu manuel tetikle:
Invoke-DhcpServerv4FailoverReplication -Name "DHCP-Failover-LAN" -Force -Verbose
LoadBalance modunda istemciler hep aynı sunucudan IP alıyor
Bu aslında bir sorun değil. Load balancing, MAC adresine dayalı bir hash ile çalışır. Belirli bir istemci her zaman aynı sunucuyla muhatap olur. Yük dağılımı tek tek istemci bazında değil, tüm kira havuzu üzerinden %50/%50 olarak sağlanır.
Hot Standby Moduna Geçiş
Eğer başlangıçta Load Balance kurdun ama sonradan Hot Standby’a geçmek istersen, mevcut ilişkiyi silip yeniden kurman gerekiyor:
# Mevcut failover ilişkisini kaldır
Remove-DhcpServerv4Failover -Name "DHCP-Failover-LAN" -Force
# Hot Standby modunda yeniden kur
Add-DhcpServerv4Failover `
-Name "DHCP-Failover-LAN" `
-PartnerServer "dhcp02.sirket.local" `
-ScopeId 192.168.10.0 `
-Mode HotStandby `
-ServerRole Active `
-ReservePercent 5 `
-SharedSecret "G3rcektenGucluBirSifre!2024" `
-AutoStateTransition $True `
-MaxClientLeadTime (New-TimeSpan -Minutes 60)
Hot Standby modunda -ServerRole Active birincil sunucuyu, -ReservePercent 5 ise ikincil sunucu için ayrılan adres yüzdesini belirtir.
Güvenlik Notları
DHCP Failover shared secret kullanır ama bunu tek başına yeterli görme. Şu pratikleri uygula:
- Her iki DHCP sunucusunu ayrı bir yönetim VLAN’ında tut
- DHCP Admins grubunu minimum yetki prensibiyle yönet, herkesin Domain Admin olmasına gerek yok
- Shared secret’ı periyodik olarak değiştir. Değiştirmek için önce birincil sunucuda
-SharedSecretile güncelle, ardından ikincil sunucuda da aynı komutu çalıştır - DHCP audit loglarını aktif tut ve SIEM’e aktar. Yetkisiz IP tahsisleri güvenlik olayının ilk ipuçlarından biri olabilir
# DHCP Audit Log konumunu kontrol et
Get-DhcpServerAuditLog
# Audit log'u farklı bir konuma al (merkezi log sunucusu gibi)
Set-DhcpServerAuditLog -Path "\logserverdhcplogsdhcp01" -Enable $True -MaxMBFileSize 70
Sonuç
DHCP Failover kurulumu karmaşık görünebilir ama adım adım gidildiğinde oldukça düz bir yapı. Asıl değeri, kurulum sonrasında fark edilir oluyor: Bakım penceresi açtığında DHCP sunucusunu restart etmekten çekinmiyorsun, donanım arızasında panik yaşamıyorsun, sabah 7’deki telefon gelmiyor.
Üretim ortamı için tavsiyem şu şekilde özetlenebilir: Load Balance modunu tercih et, MaxClientLeadTime’ı ağının boyutuna ve toleransına göre ayarla, failover testini düzenli aralıklarla (3 ayda bir yeterli) tekrar et ve monitoring scriptini mutlaka devreye al. Çalıştığını varsaymak değil, çalıştığını doğrulamak sysadmin’in temel refleksi olmalı.
Son olarak, bu yapılandırmanın bir kopyasını her iki sunucudaki yerel ve merkezi bir yerde belgelemeni öneririm. Bir gün senden sonra gelen meslektaşın sana teşekkür edecektir.
