DHCP Scope Oluşturma ve IP Adresi Havuzu Yönetimi
Yıllarca DHCP ile boğuşmuş biri olarak şunu söyleyeyim: Scope ayarları yanlış giderse, sabahın 3’ünde seni arayacak biri mutlaka çıkar. Bu yüzden bu konuyu ciddiye almak gerekiyor. DHCP Scope oluşturmak ilk bakışta basit bir işlem gibi görünür, ama üretim ortamlarında doğru yapılandırılmamış bir scope, IP çakışmalarından tutun VLAN segmentasyon sorunlarına kadar pek çok probleme yol açabilir. Bu yazıda Windows Server DHCP üzerinde scope oluşturmayı, IP havuzu yönetimini ve sık karşılaşılan senaryoları ele alacağız.
DHCP Scope Nedir ve Neden Önemlidir
DHCP Scope, bir ağ segmentine dağıtılabilecek IP adresi aralığını tanımlayan mantıksal yapıdır. Tek bir DHCP sunucusu birden fazla scope barındırabilir; bu da özellikle çok VLAN’lı ortamlarda kritik bir esneklik sağlar.
Bir scope’un temel bileşenleri şunlardır:
- IP Adresi Aralığı: Dağıtılacak adres havuzu (örneğin 192.168.10.100 – 192.168.10.200)
- Subnet Mask: Alt ağ maskesi
- Exclusion Range: Havuzun içinde olup dağıtılmayacak adresler (yazıcılar, switcher vb.)
- Reservation: Belirli MAC adreslerine sabit IP atama
- Lease Duration: IP kiralama süresi
- Scope Options: Gateway, DNS, WINS gibi ağ parametreleri
Kurumsal ortamlarda scope tasarımı yaparken ağ planlamasıyla paralel gitmek şart. Sonradan “şu IP bloğunu eklesek iyi olurdu” diyerek scope’u büyütmek mümkün, ancak her değişiklik potansiyel bir kesinti riski taşır.
PowerShell ile DHCP Scope Oluşturma
GUI üzerinden scope oluşturmak öğrenmek için iyidir, ama production ortamda her şeyi PowerShell ile yapmak hem tekrarlanabilirlik hem de dokümantasyon açısından çok daha sağlıklı. Bir değişiklik yapmak istediğinde script’e bakarsın, ne yaptığını hatırlarsın.
Önce DHCP Server rolünün kurulu olduğunu kontrol edelim:
# DHCP rolünü kontrol et
Get-WindowsFeature -Name DHCP
# DHCP rolünü kur (kurulu değilse)
Install-WindowsFeature -Name DHCP -IncludeManagementTools
# DHCP servisini başlat
Start-Service DHCPServer
Set-Service DHCPServer -StartupType Automatic
Şimdi temel bir scope oluşturalım. Diyelim ki 192.168.10.0/24 bloğu için bir scope açıyoruz:
# Yeni scope oluştur
Add-DhcpServerv4Scope `
-Name "Ofis-Kat1-VLAN10" `
-StartRange 192.168.10.1 `
-EndRange 192.168.10.254 `
-SubnetMask 255.255.255.0 `
-Description "1. Kat Kullanici Bilgisayarlari - VLAN 10" `
-State Active `
-LeaseDuration 8:00:00
Burada LeaseDuration parametresine dikkat edin. 8 saat, ofis ortamları için makul bir değerdir. Konferans salonları veya misafir ağları için 2-4 saat düşünebilirsiniz. Sunucu segmentlerinde ise 30 gün veya daha uzun süre tercih edilir; sunucular nadiren IP değiştirir ve her yenilemede ekstra trafik oluşturmak istemezsiniz.
Exclusion Range ve Reservation Yönetimi
Bu noktada çoğu sysadmin’in gözden kaçırdığı bir detaydan bahsedeceğim: Exclusion range ile static IP’lerin ayrımı. Exclusion range, scope havuzunun içinde tanımlandığı hâlde DHCP tarafından dağıtılmayacak adresleri belirtir. Ancak bu adresler başka cihazlar tarafından statik olarak kullanılıyorsa, DHCP onları dağıtmaz ama bir çakışma kontrolü de yapmaz. Bu farkı anlamak önemli.
# Exclusion range ekle (192.168.10.1 - 192.168.10.20 arası statik cihazlar için)
Add-DhcpServerv4ExclusionRange `
-ScopeId 192.168.10.0 `
-StartRange 192.168.10.1 `
-EndRange 192.168.10.20
# Exclusion range'leri listele
Get-DhcpServerv4ExclusionRange -ScopeId 192.168.10.0
# Tekil IP exclusion (örneğin varsayılan gateway)
Add-DhcpServerv4ExclusionRange `
-ScopeId 192.168.10.0 `
-StartRange 192.168.10.1 `
-EndRange 192.168.10.1
Rezervasyon konusuna gelince; özellikle yazıcılar, IP telefonlar ve bazı özel sunucular için MAC bazlı rezervasyon kullanmak hayat kurtarır. Bir yazıcının IP’si değiştiğinde 50 kullanıcının yazıcıyı tekrar tanımlaması gerekir. Bunu yaşadıysanız bilirsiniz.
# MAC adresine göre IP rezervasyonu oluştur
Add-DhcpServerv4Reservation `
-ScopeId 192.168.10.0 `
-IPAddress 192.168.10.15 `
-ClientId "00-1A-2B-3C-4D-5E" `
-Description "Muhasebe Kati Yazici - HP LaserJet" `
-Name "YAZICI-MUH-01"
# Tüm rezervasyonları listele
Get-DhcpServerv4Reservation -ScopeId 192.168.10.0
# Rezervasyonu güncelle
Set-DhcpServerv4Reservation `
-ScopeId 192.168.10.0 `
-IPAddress 192.168.10.15 `
-Description "Muhasebe Kati Yazici - Guncellendi"
Scope Options Yapılandırması
Scope options, istemcilere IP adresinin yanında gönderilen ağ konfigürasyon bilgileridir. Bu kısımda sık yapılan hatalardan biri, server-level options ile scope-level options arasındaki öncelik ilişkisini anlamamaktır. Scope-level options, server-level options’ı geçersiz kılar. Bu, farklı segmentlere farklı DNS sunucuları göndermek istediğinizde işinize gelir.
# Scope için gateway (option 3) ve DNS (option 6) tanımla
Set-DhcpServerv4OptionValue `
-ScopeId 192.168.10.0 `
-OptionId 3 `
-Value "192.168.10.1"
Set-DhcpServerv4OptionValue `
-ScopeId 192.168.10.0 `
-OptionId 6 `
-Value "192.168.1.10", "192.168.1.11"
# DNS domain suffix (option 15)
Set-DhcpServerv4OptionValue `
-ScopeId 192.168.10.0 `
-OptionId 15 `
-Value "sirket.local"
# Mevcut scope options'ları görüntüle
Get-DhcpServerv4OptionValue -ScopeId 192.168.10.0
Sık kullanılan DHCP option numaraları:
- Option 3: Default Gateway (Router)
- Option 6: DNS Sunucuları
- Option 15: DNS Domain Suffix
- Option 44: WINS Server
- Option 46: WINS/NBT Node Type
- Option 51: IP Lease Time
- Option 66: TFTP Server (PXE boot için kritik)
- Option 67: Boot Filename (PXE ortamlarında kullanılır)
Çok VLAN’lı Ortamlarda Scope Yönetimi
Gerçek dünyada nadiren tek bir scope ile geçinirsiniz. Orta ölçekli bir şirketin ağında bile; kullanıcı VLAN’ı, sunucu VLAN’ı, misafir VLAN’ı, IP telefon VLAN’ı gibi ayrımlar mutlaka olur. Her biri için ayrı scope tanımlamak gerekir.
Birden fazla scope’u toplu olarak yönetmek için şu yaklaşımı kullanıyorum:
# Birden fazla scope'u script ile oluştur
$scopes = @(
@{Name="VLAN10-Kullanici"; Start="192.168.10.100"; End="192.168.10.200";
Mask="255.255.255.0"; GW="192.168.10.1"; Lease="8:00:00"},
@{Name="VLAN20-Sunucu"; Start="192.168.20.50"; End="192.168.20.100";
Mask="255.255.255.0"; GW="192.168.20.1"; Lease="30.00:00:00"},
@{Name="VLAN30-Misafir"; Start="192.172.30.10"; End="192.172.30.254";
Mask="255.255.255.0"; GW="192.172.30.1"; Lease="2:00:00"}
)
foreach ($scope in $scopes) {
$subnetId = $scope.Start -replace '.d+$', '.0'
Add-DhcpServerv4Scope `
-Name $scope.Name `
-StartRange $scope.Start `
-EndRange $scope.End `
-SubnetMask $scope.Mask `
-State Active `
-LeaseDuration $scope.Lease
Set-DhcpServerv4OptionValue `
-ScopeId $subnetId `
-OptionId 3 `
-Value $scope.GW
Write-Host "Scope olusturuldu: $($scope.Name)" -ForegroundColor Green
}
DHCP Relay Agent konusuna da değinmek gerekiyor. DHCP broadcast paketleri router’ları aşamaz, bu yüzden her VLAN’ın DHCP sunucusuna erişebilmesi için ya her VLAN’da bir DHCP sunucusu olması ya da DHCP Relay Agent (IP Helper) konfigürasyonu yapılması gerekir. Cisco ortamlarında interface konfigürasyonuna ip helper-address komutunu eklemek yeterlidir.
IP Havuzu Kullanım Durumu ve İzleme
Scope oluşturdunuz, her şey çalışıyor. Peki havuzun dolmakta olduğundan nasıl haberdar olacaksınız? Sabah geldiğinizde “IP alamıyoruz” şikayetiyle karşılaşmamak için proaktif izleme şart.
# Tüm scope'ların kullanım istatistiklerini getir
Get-DhcpServerv4ScopeStatistics | Select-Object `
ScopeId, `
@{Name="Toplam"; Expression={$_.AddressesFree + $_.AddressesInUse}}, `
AddressesInUse, `
AddressesFree, `
@{Name="DolulukOrani"; Expression={
[math]::Round(($_.AddressesInUse / ($_.AddressesFree + $_.AddressesInUse)) * 100, 2)
}}
# Belirli bir eşiğin üzerindeki scope'ları uyarı olarak işaretle
$esik = 80
Get-DhcpServerv4ScopeStatistics | Where-Object {
$oran = ($_.AddressesInUse / ($_.AddressesFree + $_.AddressesInUse)) * 100
$oran -gt $esik
} | ForEach-Object {
Write-Warning "UYARI: $($_.ScopeId) scope'u %$([math]::Round($oran,1)) dolu!"
}
Bu script’i Task Scheduler’a günlük olarak eklemek ve çıktısını mail ile göndermek iyi bir pratiktir. Ufak bir modifikasyonla Send-MailMessage cmdlet’i ile entegre edebilirsiniz.
Aktif Lease’leri Yönetme
Bazen bir cihazın lease’ini zorla sona erdirmeniz ya da belirli bir IP’yi kimin kullandığını bulmanız gerekebilir. Güvenlik olaylarında veya troubleshooting sırasında bu bilgiye hızla ulaşmak önemlidir.
# Tüm aktif lease'leri listele
Get-DhcpServerv4Lease -ScopeId 192.168.10.0
# Belirli bir IP'nin lease bilgisini getir
Get-DhcpServerv4Lease -ScopeId 192.168.10.0 -IPAddress 192.168.10.105
# MAC adresine göre lease bul
Get-DhcpServerv4Lease -ScopeId 192.168.10.0 |
Where-Object {$_.ClientId -eq "00-1A-2B-3C-4D-5E"}
# Hostname ile arama
Get-DhcpServerv4Lease -ScopeId 192.168.10.0 |
Where-Object {$_.HostName -like "*BILGISAYAR*"}
# Belirli bir lease'i sil (IP'yi havuza geri döndür)
Remove-DhcpServerv4Lease `
-ScopeId 192.168.10.0 `
-IPAddress 192.168.10.105
# Süresi dolmuş tüm lease'leri temizle
Get-DhcpServerv4Lease -ScopeId 192.168.10.0 |
Where-Object {$_.AddressState -eq "Expired"} |
Remove-DhcpServerv4Lease
DHCP Failover Yapılandırması
Üretim ortamında tek DHCP sunucusu çalıştırmak kabul edilemez bir risk. Windows Server 2012 ile gelen DHCP Failover özelliği, iki sunucu arasında scope’ları senkronize ederek yüksek erişilebilirlik sağlar. Hot Standby ve Load Balance olmak üzere iki modda çalışabilir.
# İki sunucu arasında failover ilişkisi kur (Load Balance modu)
Add-DhcpServerv4Failover `
-Name "DHCP-Failover-Ofis" `
-ScopeId 192.168.10.0 `
-PartnerServer "dhcp02.sirket.local" `
-Mode LoadBalance `
-LoadBalancePercent 50 `
-SharedSecret "GucluBirParola123!" `
-MaxClientLeadTime 2:00:00 `
-AutoStateTransition $true `
-StateSwitchInterval 2:00:00
# Failover durumunu kontrol et
Get-DhcpServerv4Failover
# Scope'u failover'a ekle (mevcut failover ilişkisine)
Add-DhcpServerv4FailoverScope `
-Name "DHCP-Failover-Ofis" `
-ScopeId 192.168.20.0
Hot Standby modunu tercih ederseniz, birincil sunucu tüm istekleri karşılar; ikincil sunucu ise birincil erişilemez olduğunda devreye girer. Load Balance modunda her iki sunucu da aktif olarak isteklere yanıt verir, bu da hem yük dağılımı hem de yedeklilik sağlar. Hangisini seçeceğiniz ortamınızın büyüklüğüne ve toleransınıza göre değişir.
Yaygın Sorunlar ve Çözümleri
Yıllar içinde en sık karşılaştığım DHCP sorunlarını ve çözümlerini paylaşayım:
IP Havuzunun Dolması: Lease süresi çok uzun tutulduğunda veya havuz yeterince büyük olmadığında olur. Önce mevcut lease’leri analiz edin; hangi cihazlar uzun süredir aktif değil? Exclusion range’leriniz gereğinden fazla alan mı kaplıyor?
IP Çakışmaları: DHCP ile statik IP atamalarının çakışması klasik bir sorundur. Conflict detection özelliğini aktif hale getirmek bu durumu azaltır:
# DHCP çakışma tespitini etkinleştir (sunucu IP dağıtmadan önce ping atar)
Set-DhcpServerv4 -ConflictDetectionAttempts 2
# Conflict detection durumunu kontrol et
Get-DhcpServerv4
# Tespit edilen çakışmaları listele
Get-DhcpServerv4Conflict -ScopeId 192.168.10.0
# Çakışma listesini temizle
Remove-DhcpServerv4Conflict -ScopeId 192.168.10.0 -Force
DHCP Sunucusunun Yetkilendirilmemesi: Active Directory ortamlarında DHCP sunucusunun AD’de yetkilendirilmesi (authorize) gerekir. Aksi hâlde sunucu lease dağıtmaz:
# DHCP sunucusunu AD'de yetkilendir
Add-DhcpServerInDC -DnsName "dhcp01.sirket.local" -IPAddress 192.168.1.10
# Yetkilendirilmiş sunucuları listele
Get-DhcpServerInDC
Scope Options’ın Uygulanmaması: Bazen istemciler güncellenmiş scope options’ı almaz. Bu durumda ipconfig /release ve ipconfig /renew genellikle çözüm sağlar. Sunucu tarafında scope’u devre dışı bırakıp tekrar aktif etmek de zorla yenileme sağlayabilir; ancak bu üretimde risk taşır.
Scope Yapılandırmasını Yedekleme ve Aktarma
DHCP konfigürasyonunun yedeğini düzenli almak, sunucu göçü veya felaket kurtarma senaryolarında büyük kolaylık sağlar:
# DHCP veritabanını ve konfigürasyonunu dışa aktar
Export-DhcpServer `
-File "C:BackupDHCP-Backup-$(Get-Date -Format 'yyyyMMdd').xml" `
-Leases `
-Force
# Başka bir sunucuya içe aktar
Import-DhcpServer `
-File "C:BackupDHCP-Backup-20240115.xml" `
-BackupPath "C:Windowssystem32dhcpbackup" `
-Leases `
-ScopeOverwrite `
-Force
Export işleminde -Leases parametresini eklemek, mevcut kiralanmış IP bilgilerini de yedekler. Sunucu göçünde istemcilerin IP’lerini kaybetmeden geçiş yapmanızı sağlar. Bu özellikle büyük ortamlarda çok değerlidir.
Sonuç
DHCP Scope yönetimi, altyapının görünmez ama kritik bir parçasıdır. Doğru yapılandırılmış bir scope hiyerarşisi; network planlamasını, sorun gidermeyi ve güvenlik analizini ciddi oranda kolaylaştırır. PowerShell ile yönetim hem otomasyon hem de tekrarlanabilirlik açısından GUI’ye kıyasla çok daha güçlü bir yaklaşım sunar.
Bu yazıda ele aldığımız konuları özetlemek gerekirse:
- Scope oluşturma ve temel parametrelerin doğru ayarlanması
- Exclusion range ve rezervasyonların etkin kullanımı
- Scope options hiyerarşisi ve öncelik sırası
- Çok VLAN’lı ortamlarda scope tasarımı
- Proaktif izleme ve kapasiteden önce uyarı alma
- Failover ile yüksek erişilebilirlik
- Düzenli yedekleme ve taşıma prosedürleri
Son bir öneri: DHCP konfigürasyonunuzu versiyon kontrol sistemine alın. Bir metin dosyası veya PowerShell script’i olarak saklanan scope tanımları, “bu ayarı biz mi yaptık, ne zaman yaptık” sorularına hızlıca yanıt verir. Bu kadar kritik bir altyapı bileşenini sadece GUI’de tıklayarak yönetmek ve hiçbir kayıt tutmamak, ileride başınıza ciddi dertler açabilir.
