Windows DNS Sunucusunda Conditional Forwarder Yapılandırması
Büyük şirketlerde genellikle şöyle bir tablo görürsünüz: onlarca domain, farklı AD ormanları, belki de birleşme/satın alma sürecinden geçmiş ve iki ayrı DNS altyapısı hâlâ yan yana çalışıyor. İşte bu kaotik ortamda Conditional Forwarder’lar hayat kurtarır. Basit bir “eğer bu domain için sorgu gelirse, şu sunucuya ilet” mantığıyla çalışan bu yapılandırma, yanlış kurulduğunda ise saatler süren troubleshooting seanslarına davetiye çıkarır.
Conditional Forwarder Nedir ve Neden Gereklidir
Windows DNS’teki standart forwarder, DNS sunucunuzun yerel olarak çözemediği tüm sorguları belirli bir upstream sunucusuna yönlendirir. Conditional Forwarder ise bunu bir adım ileri taşır: belirli bir DNS domain’i için gelen sorguları, yalnızca o domain’den sorumlu sunuculara yönlendirirsiniz.
Bunu şöyle düşünün: şirket içinde şirket.local domain’iniz var, ama son yapılan satın alma sonucunda yenisubsidiary.corp domain’ini de yönetmeniz gerekiyor. Bu iki domain farklı AD ormanlarında, farklı DNS sunucularında tutuluyor. Kullanıcılarınızın her iki taraftaki kaynaklara erişebilmesi için ya trust ilişkisi kurarsınız, ya da DNS seviyesinde köprü atarsınız. Conditional Forwarder tam da bu noktada devreye girer.
Kullanım senaryoları şunlardır:
- Active Directory orman güveni (forest trust) kurulmadan önce DNS erişimini sağlamak
- Split-brain DNS ortamlarında internal ve external sorgular arasında yönlendirme yapmak
- Merger/acquisition süreçlerinde iki farklı şirketin DNS altyapısını birbirine bağlamak
- Azure Private DNS veya diğer cloud DNS servislerine şirket içinden erişim sağlamak
- Üçüncü taraf uygulamalar için özel DNS namespace’lerini çözümlemek
GUI ile Temel Yapılandırma
DNS Manager üzerinden yapılandırma en basit yoldur, ama production ortamlarında her şeyi GUI ile yapmak tekrarlanabilirlik açısından sorun yaratır. Yine de kavramı anlamak için başlayalım.
DNS Manager’ı açın (dnsmgmt.msc), sunucunuzu sağ tıklayın, Conditional Forwarders bölümüne gidin. Yeni bir entry eklerken dikkat etmeniz gereken birkaç nokta var:
DNS Domain: Tam domain adını girin, başında nokta olmadan. yenisubsidiary.corp gibi.
IP Addresses: Hedef DNS sunucularının IP adreslerini girin. Birden fazla sunucu ekleyebilirsiniz, DNS bunlara sırayla deneyecektir.
Store this conditional forwarder in Active Directory: Bu seçenek çok kritik. Eğer etki alanı ortamındaysanız ve bu forwarder’ın tüm DC’lere otomatik olarak dağıtılmasını istiyorsanız bu kutuyu işaretleyin.
PowerShell ile Yapılandırma
Gerçek hayatta on tane DC’ye aynı yapılandırmayı uygulamanız gerektiğinde GUI’ye veda edip PowerShell’e sarılırsınız.
Yeni bir conditional forwarder eklemek için:
Add-DnsServerConditionalForwarderZone `
-Name "yenisubsidiary.corp" `
-MasterServers 10.20.30.10, 10.20.30.11 `
-ReplicationScope "Forest" `
-PassThru
Burada -ReplicationScope parametresine dikkat edin:
- Forest: Tüm ormandaki tüm DNS sunucularına replike edilir
- Domain: Yalnızca mevcut domain’deki DNS sunucularına replike edilir
- Legacy: Windows 2000 uyumlu replikasyon kullanılır
- None: AD replikasyonu kullanılmaz, yalnızca yerel sunucuya eklenir
Mevcut conditional forwarder’ları listelemek için:
Get-DnsServerConditionalForwarderZone
Belirli bir zone’u sorgulamak için:
Get-DnsServerZone -Name "yenisubsidiary.corp" |
Select-Object ZoneName, MasterServers, ReplicationScope, ZoneType
Bir conditional forwarder’ı güncellemek için, örneğin yeni bir master sunucu ekleyecekseniz:
Set-DnsServerConditionalForwarderZone `
-Name "yenisubsidiary.corp" `
-MasterServers 10.20.30.10, 10.20.30.11, 10.20.30.12
Silmek gerektiğinde:
Remove-DnsServerZone -Name "yenisubsidiary.corp" -Force
Birden Fazla DC’ye Toplu Dağıtım
Şimdi gelelim gerçek hayata. Bir ortamda 15 DC var, ve bunların hepsine aynı conditional forwarder’ı uygulamanız gerekiyor. Eğer AD replikasyonunu kullanıyorsanız (-ReplicationScope Forest veya Domain) bunu bir kere yapmanız yeterli. Ama bazı senaryolarda (özellikle farklı ormanlar veya workgroup sunucular söz konusu olduğunda) tek tek uygulamanız gerekebilir.
$DCList = @(
"dc01.sirket.local",
"dc02.sirket.local",
"dc03.sirket.local",
"dc04.sirket.local"
)
$ForwarderConfig = @{
Name = "yenisubsidiary.corp"
MasterServers = "10.20.30.10", "10.20.30.11"
}
foreach ($DC in $DCList) {
try {
Add-DnsServerConditionalForwarderZone @ForwarderConfig `
-ComputerName $DC `
-PassThru
Write-Host "$DC - Basariyla eklendi" -ForegroundColor Green
}
catch {
Write-Host "$DC - HATA: $($_.Exception.Message)" -ForegroundColor Red
}
}
Bu scripti çalıştırmadan önce PowerShell Remoting’in etkin olduğundan ve DNS Server rolünün yüklü olduğundan emin olun.
Azure ve Hybrid Ortamlar için Yapılandırma
Azure Private DNS ile on-premises DNS’i entegre etmek, son yıllarda en sık karşılaşılan senaryolardan biri oldu. Azure’da bir Private DNS Zone’unuz var (privatelink.blob.core.windows.net gibi), ve şirket içindeki kullanıcıların bu zone’u çözümleyebilmesi gerekiyor.
Bu senaryoda Azure tarafında DNS Private Resolver veya VM üzerinde DNS Forwarder kuruyorsunuz, sonra on-premises’teki Windows DNS’e şunu yapılandırıyorsunuz:
# Azure Private DNS için conditional forwarder
Add-DnsServerConditionalForwarderZone `
-Name "privatelink.blob.core.windows.net" `
-MasterServers 10.0.0.4, 10.0.0.5 `
-ReplicationScope "Forest"
# Birden fazla Azure servisi için loop ile ekleme
$AzurePrivateDNSZones = @(
"privatelink.blob.core.windows.net",
"privatelink.database.windows.net",
"privatelink.vault.azure.net",
"privatelink.azurewebsites.net",
"privatelink.servicebus.windows.net"
)
$AzureDNSForwarderIPs = @("10.0.0.4", "10.0.0.5")
foreach ($Zone in $AzurePrivateDNSZones) {
Add-DnsServerConditionalForwarderZone `
-Name $Zone `
-MasterServers $AzureDNSForwarderIPs `
-ReplicationScope "Forest" `
-ErrorAction SilentlyContinue
Write-Output "Eklendi: $Zone"
}
Buradaki IP adresleri (10.0.0.4, 10.0.0.5) Azure tarafındaki DNS Resolver veya Forwarder VM’lerinizin özel IP adresleri olacak.
Troubleshooting: Sık Karşılaşılan Sorunlar
Forwarder Çalışıyor ama Sorgular Çözümlenmiyor
İlk kontrol noktası her zaman temel bağlantı testleridir:
# Hedef DNS sunucusuna direkt test
Resolve-DnsName -Name "test.yenisubsidiary.corp" `
-Server 10.20.30.10 `
-Type A
# Kendi DNS sunucunuz üzerinden test
Resolve-DnsName -Name "test.yenisubsidiary.corp" `
-Server 127.0.0.1 `
-Type A
# nslookup ile test (hâlâ geçerli bir yöntem)
nslookup test.yenisubsidiary.corp 10.20.30.10
Eğer direkt hedefe sorgulayınca cevap geliyorsa ama kendi sunucunuz üzerinden gelmiyorsa, sorun conditional forwarder yapılandırmasında veya ağ erişimindedir.
Firewall Kuralları
Çok sık atlanan bir detay: DNS sorguları UDP 53 kullanır, ama büyük zone transferleri ve bazı sorgu tipleri TCP 53’e geçer. Windows Firewall’da her iki protokol için de 53 numaralı portu açtığınızdan emin olun.
# Windows Firewall durumunu kontrol et
Get-NetFirewallRule -DisplayGroup "DNS Service" |
Select-Object DisplayName, Enabled, Direction, Action
# DNS için temel kural oluştur (gerekirse)
New-NetFirewallRule -DisplayName "DNS UDP Outbound" `
-Direction Outbound `
-Protocol UDP `
-RemotePort 53 `
-Action Allow
AD Replikasyon Sorunları
Conditional forwarder’ı AD-integrated olarak eklediniz ama bazı DC’lerde görünmüyor mu? Replikasyon durumunu kontrol edin:
# Replikasyon durumu
repadmin /replsummary
# DNS zone replikasyonunu zorla
repadmin /syncall /AdeP
# Belirli bir DC'deki DNS zone'larını listele
Get-DnsServerZone -ComputerName "dc02.sirket.local" |
Where-Object {$_.ZoneType -eq "Forwarder"} |
Select-Object ZoneName, MasterServers
Forwarder Timeout Süresi
Varsayılan olarak Windows DNS, bir forwarder’a 5 saniye bekler. Eğer hedef DNS sunucusu yavaşsa veya WAN üzerindeyse bu değeri artırmak isteyebilirsiniz:
# Mevcut forwarder timeout değerini gör
Get-DnsServerForwarder | Select-Object Timeout
# Timeout değerini değiştir (saniye cinsinden, max 15)
Set-DnsServerForwarder -Timeout 10
Güvenlik Tarafı: Neye Dikkat Edilmeli
DNS güvenliği çoğu zaman göz ardı edilir ama Conditional Forwarder’lar özellikle bazı riskler taşır.
DNS Cache Poisoning: Forwarder olarak eklediğiniz sunucular güvenilir mi? Özellikle merger süreçlerinde karşı tarafın DNS altyapısını körü körüne güvenmek tehlikelidir. DNSSEC desteği olan sunuculara forwarder kurmak daha güvenlidir.
Bilgi sızıntısı: Conditional Forwarder kurduğunuz sunucu, sizden gelen tüm sorgu trafiğini görebilir. Internal domain adlarınız, kullanıcı alışkanlıklarınız, hizmetleriniz hakkında bilgi sızdırabilirsiniz. Bunu göz önünde bulundurarak sadece gerçekten gerekli domain’ler için forwarder ekleyin.
DNSSEC validation kapatmayın: Bazı ortamlarda forwarder eklendikten sonra DNSSEC validation sorunları çıkabilir. Bu durumda validation’ı tamamen kapatmak yerine, sorunun kaynağını araştırın.
# DNS debug logging'i etkinleştir (sorun araştırırken)
Set-DnsServerDiagnostics `
-Queries $true `
-Answers $true `
-SendPackets $true `
-ReceivePackets $true `
-LogFilePath "C:WindowsSystem32dnsdns_debug.log" `
-MaxMBFileSize 500
# Log dosyasını takip et
Get-Content "C:WindowsSystem32dnsdns_debug.log" -Wait -Tail 50
Sorun çözüldükten sonra debug logging’i mutlaka kapatın, aksi halde log dosyası disk doldurana kadar büyür:
Set-DnsServerDiagnostics -All $false
Yapılandırmayı Dokümante Etme ve Yedekleme
Üretim ortamında yaptığınız her DNS değişikliğini yedekleme alışkanlığı kazanın. Bunu özellikle büyük değişiklikler öncesi yapın:
# Tüm DNS zone yapılandırmasını dışa aktar
$Timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$BackupPath = "C:DNSBackup$Timestamp"
New-Item -ItemType Directory -Path $BackupPath -Force
# Conditional forwarder'ları JSON olarak kaydet
Get-DnsServerZone |
Where-Object {$_.ZoneType -eq "Forwarder"} |
Select-Object ZoneName, MasterServers, ReplicationScope |
ConvertTo-Json |
Out-File "$BackupPathConditionalForwarders.json"
# DNS servisinin tam yapılandırmasını dışa aktar
dnscmd /enumzones > "$BackupPathAllZones.txt"
dnscmd /info > "$BackupPathServerConfig.txt"
Write-Host "Yedek alindi: $BackupPath"
Bu scripti bir scheduled task olarak haftalık çalıştırabilirsiniz. Böylece kimin ne zaman ne değiştirdiğini takip edebilirsiniz (audit log ile birlikte kullanılınca daha değerli).
Gerçek Dünya Senaryosu: İki Şirketin DNS’ini Birleştirme
Birkaç yıl önce bir müşteride şöyle bir durumla karşılaştım: şirket, rakibini satın almıştı ve her iki tarafın da kendi AD ortamı vardı. sirket-a.local ve sirket-b.local. Forest trust kurmak için legal süreçler devam ediyordu, ama IT ekibi üretkenlik kayıplarına dayanamayıp en azından DNS erişimini çözümlememizi istedi.
Çözüm şöyle oldu: her iki taraftaki Windows DNS sunucularına karşılıklı conditional forwarder ekledik. Sirket-A’nın DNS sunucusuna sirket-b.local için sirket-B’nin DC’lerini, sirket-B’nin DNS sunucusuna da sirket-a.local için sirket-A’nın DC’lerini ekledik.
# Sirket-A tarafında (sirket-b.local icin forwarder)
Add-DnsServerConditionalForwarderZone `
-Name "sirket-b.local" `
-MasterServers 192.168.50.10, 192.168.50.11 `
-ReplicationScope "Forest"
# Sirket-B tarafinda (sirket-a.local icin forwarder)
Add-DnsServerConditionalForwarderZone `
-Name "sirket-a.local" `
-MasterServers 10.10.10.10, 10.10.10.11 `
-ReplicationScope "Forest"
Bu yapılandırma çalıştı, kullanıcılar birbirlerinin kaynaklarına hostname üzerinden erişebildi. Ama şunu vurgulamak isterim: bu geçici bir çözümdü. Forest trust kurulduğunda DNS kısmı zaten trust ile birlikte halloluyor, bu noktada conditional forwarder’ları kaldırmak gerekiyor yoksa çakışmalar başlıyor.
Sonuç
Conditional Forwarder, Windows DNS’in görece basit ama etkili bir özelliği. Doğru uygulandığında karmaşık çok-domain ortamlarını yönetilebilir hale getirir, yanlış uygulandığında ise DNS sorgu döngülerine ve çözümlenemeyen sorgulara yol açar.
Özetleyecek olursam, dikkat edilmesi gereken kritik noktalar şunlar:
- Replikasyon scope’unu doğru seçin: Forest veya Domain tercihini kasıtlı yapın, varsayılana bırakmayın
- Yalnızca ihtiyaç duyduğunuz domain’leri ekleyin: Her şeyi forward etmek hem güvenlik hem performans açısından kötüdür
- Hedef sunucuların erişilebilirliğini düzenli kontrol edin: Forwarder eklenip unutulan sunucular zamanla DNS resolution süresini uzatır
- Değişiklik öncesi ve sonrası test yapın:
Resolve-DnsNamevenslookupen iyi arkadaşlarınız - Geçici çözümleri işaretleyin: Merger gibi durumlarda kurulan geçici yapılandırmalar çoğu zaman kalıcı hale gelir, bunu önlemek için ticket veya dokümantasyon sistemine not düşün
DNS sorunları genellikle “çalışıyor ama neden” ya da “çalışmıyor ama neden” kategorisinde olur. Conditional Forwarder yapılandırmasında sistematik bir yaklaşımla ilerlerseniz, ikinci kategoriye düşme ihtimalinizi önemli ölçüde azaltırsınız.
