barisnetblog.space — AD DNS: Forward/Reverse Zone, Conditional Forwarder ve Scavenging
Windows Server 21 Ekim 2026 5 dk okuma 2 görüntülenme

AD DNS: Forward/Reverse Zone, Conditional Forwarder ve Scavenging

AD'nin bel kemiği olan DNS'i yapılandırıyoruz. AD-integrated zone'lar, reverse zone ve PTR kayıtları, forwarder ile conditional forwarder ve eski kayıtları temizleyen scavenging bu yazıda.

Önceki yazıda site, subnet ve site link'leri yapılandırarak AD'ye ağımızın fiziksel yapısını anlatmıştık. İstemcilerin hangi DC'ye gideceğini bulmasının arkasında ise tek bir servis var: DNS. Active Directory'de karşılaştığınız sorunların büyük bölümü aslında DNS sorunudur. Bu yazıda firma.local domain'inin DNS yapısını inceleyecek, reverse zone ekleyecek, dış çözümlemeyi düzenleyecek ve eski kayıtları otomatik temizleyen scavenging özelliğini güvenli şekilde açacağız.

AD-Integrated Zone'ları İncelemek

AD DS kurulumu sırasında DNS rolünü de kurduğumuz için firma.local zone'u otomatik oluştu. Bu zone Active Directory-integrated bir zone'dur; yani veriler ayrı bir dosyada değil, AD veritabanında tutulur ve AD replikasyonuyla tüm DNS sunucusu olan DC'lere dağıtılır. Mevcut zone'ları listeleyin:

PowerShell
Get-DnsServerZone -ComputerName DC01 | Select-Object ZoneName, ZoneType, IsDsIntegrated, ReplicationScope, DynamicUpdate

Çıktıda iki önemli zone göreceksiniz:

  • firma.local: Domain'deki sunucu ve istemcilerin A kayıtları ile DC'leri bulmaya yarayan SRV kayıtları burada bulunur. Kapsamı Domain'dir.
  • _msdcs.firma.local: DC locator için kritik kayıtları tutar ve forest genelinde replike edilir. Kapsamı Forest'tır.

AD-integrated zone'larda dinamik güncellemenin Secure olması gerekir. Böylece yalnızca domain'e kayıtlı bilgisayarlar kendi kayıtlarını oluşturabilir:

PowerShell
Set-DnsServerPrimaryZone -Name "firma.local" -DynamicUpdate Secure

Reverse Lookup Zone Oluşturmak

Kurulum reverse zone oluşturmaz. Reverse zone olmadan nslookup her açılışta "Can't find server name" uyarısı verir ve IP'den isim çözümlemesi yapan araçlar çalışmaz. 192.168.1.0/24 ve şube ağı için AD-integrated reverse zone'ları oluşturalım:

PowerShell
Add-DnsServerPrimaryZone -NetworkId "192.168.1.0/24" -ReplicationScope Domain -DynamicUpdate Secure
Add-DnsServerPrimaryZone -NetworkId "192.168.2.0/24" -ReplicationScope Domain -DynamicUpdate Secure

Bu komutlar 1.168.192.in-addr.arpa ve 2.168.192.in-addr.arpa zone'larını oluşturur. Mevcut istemcilerin PTR kayıtlarını hemen oluşturması için istemcide:

Komut İstemi
ipconfig /registerdns

Kayıt Eklemek

Statik IP kullanan sunucular ve servisler için A kaydını PTR ile birlikte ekleyebilirsiniz:

PowerShell
Add-DnsServerResourceRecordA -ZoneName "firma.local" -Name "intranet" -IPv4Address 192.168.1.30 -CreatePtr
Add-DnsServerResourceRecordCName -ZoneName "firma.local" -Name "dosya" -HostNameAlias "fs01.firma.local"

Get-DnsServerResourceRecord -ZoneName "firma.local" -Name "intranet"

Elle eklenen kayıtlar statiktir; zaman damgaları yoktur ve scavenging tarafından silinmez.

Forwarder ve Conditional Forwarder

DC'leriniz firma.local dışındaki bir adı, örneğin microsoft.com adresini çözmek zorunda kaldığında varsayılan olarak root hints sunucularına gider. Bunun yerine sorguları güvendiğiniz bir DNS sunucusuna yönlendirebilirsiniz:

PowerShell
Set-DnsServerForwarder -IPAddress 1.1.1.1, 8.8.8.8 -UseRootHint $true
Get-DnsServerForwarder

Forwarder ayarı AD ile replike edilmez; her DNS sunucusunda ayrı ayrı yapmanız gerekir. DC02 için komutu -ComputerName DC02 ile tekrar çalıştırın.

Conditional forwarder ise yalnızca belirli bir domain'e ait sorguları belirli sunuculara yönlendirir. Örneğin iş ortağınız partner.local ile VPN üzerinden bağlıysanız:

PowerShell
Add-DnsServerConditionalForwarderZone -Name "partner.local" -MasterServers 10.20.0.10, 10.20.0.11 `
    -ReplicationScope Forest

ReplicationScope parametresi sayesinde conditional forwarder AD'de saklanır ve tüm DC'lere otomatik dağıtılır. Bu, normal forwarder'a göre önemli bir avantajdır.

Scavenging ile Eski Kayıtları Temizlemek

Dinamik olarak kaydedilen her kaydın bir zaman damgası vardır. Bilgisayar ağdan ayrıldığında veya adı değiştiğinde eski kayıt kalır ve zamanla DNS'te yanlış IP'yi gösteren kayıtlar birikir. Scavenging, belirli bir süre güncellenmeyen dinamik kayıtları otomatik olarak siler. İki süre kavramını bilmeniz gerekir:

  • No-Refresh Interval: Kayıt oluşturulduktan sonra zaman damgasının yenilenmediği süredir. Gereksiz replikasyon trafiğini önler. Varsayılan 7 gündür.
  • Refresh Interval: No-refresh süresi bittikten sonra kaydın yenilenmesi için tanınan süredir. Bu süre içinde de yenilenmeyen kayıt silinmeye aday olur. Varsayılan 7 gündür.

Altın kural: No-Refresh + Refresh toplamı, DHCP kira süresinden uzun olmalıdır. DHCP yazısında kira süresini 8 gün yapmıştık; 7 + 7 = 14 gün güvenli bir değerdir.

Önce zone seviyesinde aging'i açın:

PowerShell
Set-DnsServerZoneAging -Name "firma.local" -Aging $true -NoRefreshInterval 7.00:00:00 -RefreshInterval 7.00:00:00
Set-DnsServerZoneAging -Name "1.168.192.in-addr.arpa" -Aging $true -NoRefreshInterval 7.00:00:00 -RefreshInterval 7.00:00:00

Ardından scavenging işlemini yalnızca bir DNS sunucusunda çalıştırın. Böylece sorun yaşandığında hangi sunucunun kayıt sildiğini bilirsiniz:

PowerShell
Set-DnsServerScavenging -ComputerName DC01 -ScavengingState $true -ScavengingInterval 7.00:00:00
Get-DnsServerScavenging -ComputerName DC01

Aging açıldıktan sonra ilk scavenging için sunucu bir refresh süresi kadar bekler. Bu, açtığınız gün tüm kayıtların silinmesini engelleyen bir güvenlik önlemidir. Elle tetiklemek isterseniz:

PowerShell
Start-DnsServerScavenging -ComputerName DC01 -Force

DNS Sağlığını Test Etmek

PowerShell
Resolve-DnsName -Name "_ldap._tcp.dc._msdcs.firma.local" -Type SRV
Resolve-DnsName -Name 192.168.1.10
Komut İstemi
nslookup fs01.firma.local
dcdiag /test:dns /v /s:DC01
nltest /dsregdns

nltest /dsregdns komutu, DC'nin SRV kayıtlarını DNS'e yeniden kaydetmesini sağlar. DC kayıtları silindiğinde veya bozulduğunda ilk başvurulacak komuttur. Netlogon servisini yeniden başlatmak da aynı etkiyi yaratır.

Sorun giderirken istemci ile sunucu tarafını ayrı ayrı düşünün. Resolve-DnsName komutuna -Server DC02 ekleyerek sorguyu doğrudan belirli bir DNS sunucusuna gönderebilir, böylece iki DC'nin aynı cevabı verip vermediğini karşılaştırabilirsiniz. Cevaplar farklıysa sorun büyük olasılıkla AD replikasyonundadır; önceki yazılarda gördüğümüz repadmin /replsummary komutuyla kontrol edin.

Zone Transferlerini Kısıtlamak

AD-integrated zone'lar verilerini AD replikasyonuyla dağıttığı için klasik zone transfer mekanizmasına ihtiyaç duymaz. Ancak zone transfer açık kalırsa, ağınıza erişen biri firma.local içindeki tüm sunucu adlarını ve IP adreslerini tek bir sorguyla listeleyebilir. Bu, saldırganlar için hazır bir ağ haritası demektir. Transferleri kapatın veya yalnızca bilinen ikincil sunuculara izin verin:

PowerShell
Set-DnsServerPrimaryZone -Name "firma.local" -SecureSecondaries NoTransfer
Get-DnsServerZone -Name "firma.local" | Select-Object ZoneName, SecureSecondaries

Aynı değerlendirmeyi reverse zone'lar için de yapın. Ayrıca DNS sunucusunun hangi arayüzlerde dinlediğini kontrol etmek faydalıdır. Birden fazla ağ kartına sahip DC'lerde DNS'in yalnızca iç ağ arayüzünde dinlemesi gerekir; bunu Get-DnsServerSetting -All | Select-Object ListeningIPAddress ile görebilirsiniz.

Sık Karşılaşılan Hatalar

  • DC'lerin veya istemcilerin dış DNS kullanması: İstemciler firma.local'u çözemez, domain'e katılma ve oturum açma başarısız olur. Dış çözümleme için forwarder kullanın, istemcilere yalnızca DC'leri dağıtın.
  • Scavenging'i her sunucuda açmak: Hangi sunucunun kayıt sildiğini takip edemezsiniz. Tek bir sunucuda açın.
  • Aralıkları DHCP kira süresinden kısa tutmak: Hâlâ ağda olan istemcilerin kayıtları silinir.
  • Önemli bir sunucunun kaydının kaybolması: Statik IP'li sunucu kaydını dinamik olarak oluşturmuştur. Sunucular için kaydı statik yapın veya sunucunun düzenli kaydettiğinden emin olun.
  • Forwarder'ın DC02'de olmaması: Forwarder ayarı replike edilmez. Her DNS sunucusunda ayrıca yapılandırın.
  • Kayıtların güncellenmemesi: Önceki çözümleme önbellekte kalmış olabilir. İstemcide ipconfig /flushdns, sunucuda Clear-DnsServerCache kullanın.

Bir sonraki yazıda Delegation of Control ile OU bazında yetki devrini uygulayacağız.

Okuma görünümü 2 görüntülenme