Windows DNS’te Forward ve Reverse Lookup Zone Yönetimi

Kurumsal ortamlarda DNS yönetimi, günlük işlerin belki de en kritik ama en az ilgi gören parçalarından biri. Bir şeyler ters gittiğinde herkes DNS’i suçluyor, her şey yolundayken kimse DNS’i hatırlamıyor. Windows DNS sunucusunda forward ve reverse lookup zone’larını doğru yapılandırmak, bu “suçlamaların” büyük çoğunluğunu başlamadan önce engeller. Bu yazıda hem temel kavramları hem de gerçek ortamlarda sıkça karşılaştığım senaryoları ele alacağım.

Forward ve Reverse Lookup Zone Nedir, Neden İkisi Birden Gerekli?

Forward lookup zone, herkesin aklına ilk gelen DNS işlevi: bir isim veriyorsun, IP adresi dönüyor. server01.sirket.local yazıyorsun, 192.168.10.50 geliyor. Sade, anlaşılır.

Reverse lookup zone ise tam tersi yönde çalışıyor: IP adresi veriyorsun, isim dönüyor. Yani 192.168.10.50 sorguladığında server01.sirket.local cevabı geliyor. Bu işleme PTR (Pointer Record) sorgusu deniyor.

Şimdi şunu düşünebilirsiniz: “Zaten IP’yi biliyorum, isim ne işime yarar?” Bunun cevabı log analizi yapan, güvenlik denetimi çalıştıran veya mail sunucusu işleten herkesin bildiği bir şey. Firewall loglarında sürekli IP görmek yerine hostname görmek, olay müdahalesini ciddi ölçüde hızlandırıyor. Mail sunucuları PTR kaydı olmayan IP’lerden gelen postaları spam olarak işaretliyor ya da direkt reddediyor. Monitoring araçları reverse DNS’i kullanarak anlamlı grafikler üretiyor. Kısacası, reverse lookup zone bir lüks değil, düzgün işleyen bir altyapının zorunlu bileşeni.

DNS Sunucusu Rolünün Kurulumu

Windows Server 2019 veya 2022 üzerinde DNS rolü zaten Active Directory kurulumunun bir parçası olarak genellikle geliyor, ama bazen standalone DNS sunucusu kurmanız gerekiyor. PowerShell ile bu işi hızlıca halledebilirsiniz:

Install-WindowsFeature -Name DNS -IncludeManagementTools -Restart

Kurulum sonrası DNS Server servisinin çalıştığını doğrulamak için:

Get-Service -Name DNS | Select-Object Name, Status, StartType

Eğer status “Running” değilse:

Start-Service -Name DNS
Set-Service -Name DNS -StartupType Automatic

Forward Lookup Zone Oluşturma

GUI ile Zone Oluşturma

DNS Manager üzerinden zone oluşturma işlemi nispeten sezgisel. dnsmgmt.msc açıyorsunuz, sunucu adına sağ tıklıyorsunuz, “New Zone” diyorsunuz. Ama burada birkaç kritik karar noktası var:

Zone tipi seçimi:

  • Primary Zone: Düzenleyebildiğiniz, yazılabilir kopyası bu sunucuda
  • Secondary Zone: Başka bir DNS sunucusundan replike edilen, salt okunur kopya
  • Stub Zone: Sadece zone yetkili sunucularının bilgisini tutan minimal kopya

AD entegre ortamlarda “Store the zone in Active Directory” seçeneğini işaretlemek, zone verilerini AD replikasyonu üzerinden otomatik senkronize eder. Bu seçeneği atlamamanızı şiddetle tavsiye ederim; ayrı zone dosyalarıyla uğraşmak ciddi baş ağrısı yaratıyor.

PowerShell ile Forward Zone Oluşturma

Add-DnsServerPrimaryZone -Name "sirket.local" `
    -ReplicationScope "Forest" `
    -DynamicUpdate "Secure"

-ReplicationScope parametresi için seçenekler:

  • Forest: Tüm ormandaki DNS sunucularına replike eder
  • Domain: Sadece aynı domaindeki DNS sunucularına replike eder
  • Legacy: Eski stil Windows 2000 uyumlu replikasyon
  • None: AD entegrasyonu olmadan, dosya tabanlı zone

-DynamicUpdate parametresi:

  • Secure: Sadece domain üyesi makineler kayıt güncelleyebilir (önerilen)
  • NonsecureAndSecure: Herkes kayıt güncelleyebilir (tehlikeli)
  • None: Dinamik güncelleme kapalı, tüm kayıtlar elle eklenir

Zone oluşturulduktan sonra doğrulayalım:

Get-DnsServerZone -Name "sirket.local" | Select-Object ZoneName, ZoneType, IsDsIntegrated, DynamicUpdate

A Kaydı Ekleme

Forward zone’a A kaydı eklemek oldukça basit:

Add-DnsServerResourceRecordA -ZoneName "sirket.local" `
    -Name "server01" `
    -IPv4Address "192.168.10.50" `
    -TimeToLive 01:00:00 `
    -CreatePtr

Buradaki -CreatePtr parametresi çok değerli: A kaydını oluştururken otomatik olarak ilgili reverse zone’a PTR kaydı da ekliyor. Tabii bunun çalışması için reverse zone’un önceden mevcut olması gerekiyor.

Reverse Lookup Zone Oluşturma

Reverse lookup zone’lar, IP adresi bloğunun tersine çevrilmiş haliyle adlandırılır. 192.168.10.0/24 ağı için zone adı 10.168.192.in-addr.arpa olur. Bu isimlendirme standardı RFC 1035’ten geliyor ve değiştirme şansınız yok.

Add-DnsServerPrimaryZone -NetworkId "192.168.10.0/24" `
    -ReplicationScope "Forest" `
    -DynamicUpdate "Secure"

-NetworkId parametresi kullandığınızda, PowerShell zone adını otomatik hesaplıyor. Yani 10.168.192.in-addr.arpa ismini elle yazmak zorunda kalmıyorsunuz. Bu özellikle /16 veya daha büyük bloklar için hata riskini azaltıyor.

Birden fazla subnet için reverse zone oluşturuyorsanız döngüyle yapabilirsiniz:

$subnetler = @("192.168.10.0/24", "192.168.20.0/24", "192.168.30.0/24")

foreach ($subnet in $subnetler) {
    Add-DnsServerPrimaryZone -NetworkId $subnet `
        -ReplicationScope "Forest" `
        -DynamicUpdate "Secure"
    Write-Host "$subnet icin reverse zone olusturuldu"
}

PTR Kaydı Ekleme

Add-DnsServerResourceRecordPtr -ZoneName "10.168.192.in-addr.arpa" `
    -Name "50" `
    -PtrDomainName "server01.sirket.local."

Dikkat edin: -Name "50" kısmı IP adresinin son oktetini ifade ediyor. Ve -PtrDomainName sonundaki nokta önemli; tam nitelikli domain adı (FQDN) belirtiyor. Noktayı unutursanız bazı uygulamalar zone adını otomatik ekliyor ve garip sonuçlar elde ediyorsunuz.

Zone Transfer Yapılandırması

Secondary zone’larınız varsa zone transfer ayarlarını doğru yapılandırmanız gerekiyor. Yanlış yapılandırılmış zone transfer hem güvenlik açığı hem de replikasyon sorunlarına yol açar.

Set-DnsServerPrimaryZone -Name "sirket.local" `
    -SecureSecondaries TransferToSecureServers `
    -SecondaryServers "192.168.10.51", "192.168.10.52" `
    -Notify Notify `
    -NotifyServers "192.168.10.51", "192.168.10.52"

-SecureSecondaries seçenekleri:

  • NoTransfer: Zone transferi tamamen kapalı
  • TransferAnyServer: Her sunucuya transfer izni var (tehlikeli)
  • TransferToZoneNameServer: Sadece NS kaydında listelenen sunuculara
  • TransferToSecureServers: Sadece belirtilen IP’lere transfer

-Notify seçenekleri:

  • NoNotify: Bildirim gönderilmez
  • Notify: Tüm secondary sunuculara bildirim gönderilir
  • NotifyServers: Sadece belirtilen sunuculara bildirim

Gerçek Hayat Senaryosu: Büyük Ölçekli PTR Kaydı Güncelleme

Birkaç yıl önce bir müşteride ciddi bir sorunla karşılaştım. Yaklaşık 800 sunucudan oluşan bir altyapı, yanlış yapılandırılmış dynamic update nedeniyle reverse zone’da hiç PTR kaydı içermiyordu. Monitoring sistemi IP adresleri gösteriyordu sadece, SIEM logları anlamsız hale gelmişti. Tüm A kayıtlarını okuyup PTR kayıtlarını otomatik oluşturan bir script yazmak zorunda kaldım:

$zone = "sirket.local"
$reverseZone = "10.168.192.in-addr.arpa"

$aKayitlari = Get-DnsServerResourceRecord -ZoneName $zone -RRType A

foreach ($kayit in $aKayitlari) {
    $ip = $kayit.RecordData.IPv4Address.ToString()
    $sonOktet = $ip.Split(".")[3]
    $hostname = "$($kayit.HostName).$zone."
    
    # Mevcut PTR kaydı var mi kontrol et
    $mevcutPtr = Get-DnsServerResourceRecord -ZoneName $reverseZone `
        -Name $sonOktet -RRType Ptr -ErrorAction SilentlyContinue
    
    if ($null -eq $mevcutPtr) {
        Add-DnsServerResourceRecordPtr -ZoneName $reverseZone `
            -Name $sonOktet `
            -PtrDomainName $hostname
        Write-Host "PTR eklendi: $sonOktet -> $hostname"
    } else {
        Write-Host "Mevcut PTR atlandi: $sonOktet" -ForegroundColor Yellow
    }
}

Bu script birkaç dakikada 800 PTR kaydını oluşturdu. Manuel yapmanız gerekseydi saatler sürerdi.

Aging ve Scavenging Yapılandırması

DNS aging ve scavenging, eski ve geçersiz kayıtları otomatik temizleyen mekanizma. Dynamic DNS kullanıyorsanız bu mekanizmayı mutlaka yapılandırın; yoksa zone’unuz zamanla eski IP adresleri ve hostname’lerle dolup taşıyor.

# Zone seviyesinde aging aktif etme
Set-DnsServerZoneAging -Name "sirket.local" `
    -Aging $true `
    -NoRefreshInterval 7.00:00:00 `
    -RefreshInterval 7.00:00:00

# Sunucu seviyesinde scavenging aktif etme
Set-DnsServerScavenging -ScavengingState $true `
    -ScavengingInterval 7.00:00:00

-NoRefreshInterval: Bu süre boyunca kayıt yenileme kabul edilmez ama kayıt silinmez. Varsayılan 7 gün.

-RefreshInterval: NoRefreshInterval bittikten sonra bu süre zarfında kayıt yenilenmezse eski olarak işaretlenir. Varsayılan 7 gün.

-ScavengingInterval: Scavenging işleminin ne sıklıkla çalışacağını belirler.

Yani varsayılan ayarlarla, bir kayıt 14 gün boyunca yenilenmezse silinmeye aday oluyor. Bunu ortamınıza göre ayarlayın; DHCP lease sürelerinizden uzun tutmak iyi bir pratik.

DNS Kayıt Sorgulama ve Doğrulama

Zone’ları yapılandırdıktan sonra doğru çalıştığını doğrulamak kritik. İki araç var elimizde: nslookup ve Resolve-DnsName.

# Forward lookup testi
Resolve-DnsName -Name "server01.sirket.local" -Type A -Server "192.168.10.10"

# Reverse lookup testi
Resolve-DnsName -Name "192.168.10.50" -Type PTR -Server "192.168.10.10"

# Tüm zone kayitlarini listele
Get-DnsServerResourceRecord -ZoneName "sirket.local" -RRType A | 
    Sort-Object HostName | 
    Format-Table HostName, RecordData -AutoSize

Klasik nslookup ile de çalışabilirsiniz, özellikle hızlı interaktif testlerde daha pratik:

nslookup server01.sirket.local 192.168.10.10
nslookup 192.168.10.50 192.168.10.10

Conditional Forwarder Yapılandırması

Kurumsal ortamlarda sıkça karşılaşılan bir senaryo: birden fazla domain var veya internet DNS’i farklı sunucuya yönlendirmeniz gerekiyor. Conditional forwarder bu durumda devreye giriyor.

# Belirli bir domain icin forwarder ekle
Add-DnsServerConditionalForwarderZone -Name "partnerafirma.com" `
    -MasterServers "8.8.8.8", "8.8.4.4" `
    -ReplicationScope "Forest"

# Genel internet sorguları icin global forwarder
Set-DnsServerForwarder -IPAddress "8.8.8.8", "1.1.1.1" `
    -UseRootHint $false

-UseRootHint $false ayarı, forwarder’lar ulaşılamaz olduğunda root hint sunucularına gitmesini engelliyor. Güvenlik politikasına göre bu davranışı değiştirmek isteyebilirsiniz.

Zone Delegasyonu

Alt domainler için zone delegasyonu, büyük organizasyonlarda DNS yönetimini merkezden uzaklaştırmak için kullanılıyor. Örneğin ankara.sirket.local zone’unu Ankara ofisindeki DNS sunucusuna delege etmek:

Add-DnsServerZoneDelegation -Name "sirket.local" `
    -ChildZoneName "ankara" `
    -NameServer "ankara-dns01.ankara.sirket.local" `
    -IPAddress "10.10.10.10"

Delegasyon sonrası sirket.local DNS sunucusu, ankara.sirket.local için gelen sorguları 10.10.10.10‘a yönlendiriyor. Ana zone sunucusuna yük bindirmiyor, Ankara ekibi kendi alt zone’larını yönetiyor.

Sık Karşılaşılan Sorunlar ve Çözümleri

PTR kaydı çalışmıyor ama A kaydı var: Reverse zone’un mevcut olup olmadığını kontrol edin. Dynamic DNS ile A kaydı oluşturulmuşsa ve reverse zone o anda yoksa, sonradan zone eklendiğinde PTR kayıtları otomatik oluşmaz.

Zone transfer çalışmıyor: Firewall’da TCP ve UDP 53 portlarının açık olduğunu doğrulayın. Zone transfer TCP 53 kullanır; sadece UDP açıksa transfer başarısız olur.

Scavenging aktif kayıtları siliyor: Bu genellikle DHCP sunucusunun DNS güncellemesini yapmadığı durumlarda olur. DHCP sunucusunun “Always dynamically update DNS records” seçeneğini ve DNS kimlik bilgilerini kontrol edin.

AD entegre zone replike olmuyor: repadmin /showrepl ile AD replikasyon durumunu kontrol edin. DNS replikasyon sorunlarının büyük çoğunluğu aslında genel AD replikasyon problemlerinden kaynaklanıyor.

# DNS sunucusu istatistiklerini kontrol et
Get-DnsServerStatistics | Select-Object -ExpandProperty RecordStatistics

# Zone sagligini kontrol et
Test-DnsServer -IPAddress "192.168.10.10" -ZoneName "sirket.local" -Context ZoneMaster

Sonuç

Windows DNS’te forward ve reverse lookup zone yönetimi, yüzeysel göründüğünden çok daha fazla katman içeriyor. A kaydı eklemek basit, ama bunu güvenli dynamic update, doğru scavenging ayarları, zone transfer kısıtlamaları ve eksiksiz PTR kayıtlarıyla birlikte yapılandırmak gerçek anlamda sağlam bir DNS altyapısı kurmak demek.

Pratikte en sık gördüğüm eksiklik, reverse zone’ların ya hiç oluşturulmamış olması ya da oluşturulmuş ama içinin boş olması. Bunu kuracağınız her yeni ortamda ilk gün yapın; sonradan düzeltmek hem zaman alıyor hem de bu süreçte log analizleriniz ve güvenlik araçlarınız eksik çalışıyor.

PowerShell ile DNS yönetimi, özellikle büyük ortamlarda GUI’ye göre çok daha verimli. Bir kere doğru scripti yazdıktan sonra onlarca sunucuya, yüzlerce kayda aynı standartları birkaç saniyede uygulayabiliyorsunuz. DNS Manager görsel olarak anlaşılır ama ölçeklenmiyor; PowerShell önce biraz zaman alıyor ama uzun vadede kurtarıyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir