Windows Server’da DNS Sunucusu Kurulum ve Yapılandırma

Kurumsal ağlarda DNS, her şeyin temelinde yatan o sessiz kahraman. Yıllarca Windows ortamlarında çalışmış biri olarak şunu rahatlıkla söyleyebilirim: DNS doğru yapılandırılmamışsa, gün içinde onlarca “neden bağlanamıyorum” sorusuyla boğuşursunuz. Bu yazıda Windows Server üzerinde DNS sunucusu kurulumunu ve yapılandırmasını baştan sona, gerçek dünya senaryolarıyla anlatacağım.

Neden Windows DNS?

Active Directory ortamlarında Windows DNS kullanmak neredeyse zorunluluk haline geliyor. AD, iç yapısı için DNS’e kritik biçimde bağımlı. SRV kayıtları, Kerberos, LDAP, hepsinin ayakta durması DNS’in sağlıklı çalışmasına bağlı. Bind veya başka çözümlere de entegre edilebilir elbette, ama Windows ortamında yerel DNS sunucusu ile gelen AD entegrasyonu, yönetim kolaylığı ve dinamik DNS güncelleme özellikleri gerçekten hayat kurtarıyor.

Kurulum Öncesi Hazırlık

Kuruluma geçmeden önce birkaç temel kararı netleştirmeniz gerekiyor.

Sunucu IP adresi statik olmalı. DNS sunucusu olarak kullanacağınız makinenin IP adresi değişmemeli. Bu çok basite inen bir kural gibi görünse de, özellikle sanallaştırma ortamlarında DHCP’den IP alan sunucular üzerine DNS kurduğunu gören oldu mu? Oldu.

İsimlendirme planı: Hangi zone’ları yöneteceksiniz? Sadece iç ağ mı, dış zona yetkilendirmesi var mı? Hangi forwarder’ları kullanacaksınız?

Temel bilgileri not edin:

  • Sunucu IP: 192.168.10.10 (örnek)
  • Subnet Mask: 255.255.255.0
  • Default Gateway: 192.168.10.1
  • İç domain adı: sirket.local
  • Forwarder olarak kullanılacak dış DNS: 8.8.8.8 veya ISP’nin DNS’i

DNS Rolünü Yüklemek

Server Manager Üzerinden Kurulum

GUI üzerinden gitmek isteyenler için Server Manager’ı açıp “Add Roles and Features” diyoruz. Wizard’da “DNS Server” rolünü seçiyoruz, bağımlılıkları kabul edip kurulumu tamamlıyoruz.

PowerShell ile Kurulum

Ama biz sysadmin’iz, terminal kullanmaktan çekinmeyiz. PowerShell ile DNS rolü yüklemek çok daha hızlı ve otomasyon senaryolarına uygun:

# DNS rolünü yükle
Install-WindowsFeature -Name DNS -IncludeManagementTools

# Yükleme durumunu kontrol et
Get-WindowsFeature -Name DNS

Eğer sunucuyu Domain Controller olarak da kullanacaksanız (küçük-orta ölçekli ortamlarda yaygın), ADDS ile birlikte kurulum yapabilirsiniz:

# AD DS ve DNS'i birlikte yükle
Install-WindowsFeature -Name AD-Domain-Services, DNS -IncludeManagementTools -Verbose

Kurulum tamamlandıktan sonra DNS servisinin çalışıp çalışmadığını doğrulayalım:

# DNS servis durumunu kontrol et
Get-Service -Name DNS

# Servis başlatma (gerekirse)
Start-Service -Name DNS

# Otomatik başlangıç ayarı
Set-Service -Name DNS -StartupType Automatic

Temel Yapılandırma: Forward Lookup Zone Oluşturma

DNS kurulduktan sonra ilk iş, yetkili olduğunuz zone’ları tanımlamak. Forward lookup zone, isimden IP’ye çözümleme yapıyor.

PowerShell ile Zone Oluşturma

# Primary forward lookup zone oluştur
Add-DnsServerPrimaryZone -Name "sirket.local" -ReplicationScope "Forest" -PassThru

# Zone listesini görüntüle
Get-DnsServerZone

# Belirli bir zone detayını gör
Get-DnsServerZone -Name "sirket.local"

-ReplicationScope parametresi AD entegreli DNS için önemli:

  • Forest: Tüm forest’taki DC’lere replike edilir
  • Domain: Sadece aynı domain’deki DC’lere
  • Legacy: Windows 2000 uyumlu eski DC’lere

DNS Yönetim Konsolu (GUI) ile Zone Oluşturma

DNS Manager’ı açın (dnsmgmt.msc). Sol panelde sunucu adına sağ tıklayın, “New Zone” deyin. Wizard sizi yönlendirecek:

  • Zone Type: Primary Zone
  • AD Entegrasyonu: “Store the zone in Active Directory” işaretleyin
  • Zone Name: sirket.local
  • Dynamic Update: “Allow only secure dynamic updates” (güvenli ortam için)

Reverse Lookup Zone

Çoğu sysadmin forward zone’u kurar ama reverse zone’u ihmal eder. Oysa pek çok uygulama, güvenlik aracı ve log sistemi reverse lookup yapar. PTR kayıtları eksikse gereksiz gecikme ve hata logları kaçınılmaz.

# Reverse lookup zone oluştur (192.168.10.x subnet için)
Add-DnsServerPrimaryZone -NetworkId "192.168.10.0/24" -ReplicationScope "Forest" -PassThru

# Zone adını kontrol et (10.168.192.in-addr.arpa şeklinde oluşur)
Get-DnsServerZone | Where-Object {$_.IsReverseLookupZone -eq $true}

DNS Kayıtları Ekleme

Zone’larınız hazır, şimdi kayıt ekleme zamanı.

A Kaydı Eklemek

# A kaydı ekle (forward)
Add-DnsServerResourceRecordA -Name "webserver01" -ZoneName "sirket.local" -IPv4Address "192.168.10.20" -CreatePtr

# Birden fazla A kaydı eklemek için döngü
$sunucular = @(
    @{Ad="dc01"; IP="192.168.10.10"},
    @{Ad="fileserver01"; IP="192.168.10.30"},
    @{Ad="sqlserver01"; IP="192.168.10.40"}
)

foreach ($s in $sunucular) {
    Add-DnsServerResourceRecordA -Name $s.Ad -ZoneName "sirket.local" -IPv4Address $s.IP -CreatePtr
    Write-Host "$($s.Ad) kaydı eklendi: $($s.IP)"
}

-CreatePtr parametresi aynı anda PTR kaydını da oluşturuyor. Bu parametreyi kullanın, unutmayın.

CNAME Kaydı Eklemek

# CNAME kaydı (alias)
Add-DnsServerResourceRecordCName -Name "www" -ZoneName "sirket.local" -HostNameAlias "webserver01.sirket.local"

# Intranet için CNAME
Add-DnsServerResourceRecordCName -Name "intranet" -ZoneName "sirket.local" -HostNameAlias "iisserver01.sirket.local"

MX Kaydı Eklemek

# MX kaydı (mail exchange)
Add-DnsServerResourceRecordMX -Name "." -ZoneName "sirket.local" -MailExchange "mail.sirket.local" -Preference 10

Mevcut Kayıtları Listeleme ve Yönetme

# Tüm kayıtları listele
Get-DnsServerResourceRecord -ZoneName "sirket.local"

# Sadece A kayıtlarını filtrele
Get-DnsServerResourceRecord -ZoneName "sirket.local" -RRType A

# Belirli bir kaydı ara
Get-DnsServerResourceRecord -ZoneName "sirket.local" -Name "webserver01"

# Kayıt sil
Remove-DnsServerResourceRecord -ZoneName "sirket.local" -RRType A -Name "eskisunucu" -Force

Forwarder Yapılandırması

DNS sunucunuz bilmediği sorguları nereye yönlendirecek? Forwarder ayarı burada devreye giriyor.

# Forwarder ekle
Add-DnsServerForwarder -IPAddress "8.8.8.8", "8.8.4.4"

# Kurumsal ortamda ISP DNS'ini veya iç DNS hiyerarşisini kullanabilirsiniz
Add-DnsServerForwarder -IPAddress "195.175.39.39", "195.175.39.40"

# Mevcut forwarder'ları gör
Get-DnsServerForwarder

# Forwarder kaldır
Remove-DnsServerForwarder -IPAddress "8.8.8.8"

Kurumsal ağlarda forwarder seçimi önemli. Dışarıya direkt Google veya Cloudflare DNS’e gidilmesi bazen kurumsal güvenlik politikalarına aykırı. Güvenlik duvarınız 53 portunu kısıtlıyorsa ve sadece belirli DNS sunucularına izin veriyorsa, o sunucuları forwarder olarak tanımlamanız gerekiyor.

Conditional Forwarder (Koşullu Yönlendirme)

Birden fazla iç domain olan ortamlarda veya iş ortağı şirketlerin domain’lerine özel yönlendirme yaparken conditional forwarder kullanılır:

# Belirli domain için conditional forwarder
Add-DnsServerConditionalForwarderZone -Name "ortaksirket.local" -MasterServers "10.0.0.53"

# Partner şirketin DNS'ine yönlendir
Add-DnsServerConditionalForwarderZone -Name "holding.local" -MasterServers "172.16.0.10", "172.16.0.11"

# Conditional forwarder'ları listele
Get-DnsServerZone | Where-Object {$_.ZoneType -eq "Forwarder"}

Bu özelliği özellikle merger/acquisition sonrası iki farklı AD forest’ını birbirine bağlarken çok kullandım. Her iki tarafın da kendi DNS’i var, conditional forwarder olmadan karşılıklı isim çözümlemesi düzgün çalışmıyor.

DNS Güvenliği

DNSSEC

Windows Server DNS, DNSSEC’i destekliyor. Özellikle dışarıya açık zone’larda DNSSEC imzalamak DNS spoofing saldırılarına karşı önemli bir katman:

# Zone'u DNSSEC ile imzala
Invoke-DnsServerZoneSign -ZoneName "sirket.local" -SignWithDefault -Force

# DNSSEC durumunu kontrol et
Get-DnsServerZoneDnsSecSettings -ZoneName "sirket.local"

Güvenli Dinamik Güncellemeler

AD entegreli DNS kullanıyorsanız, “Secure Only” dinamik güncelleme tercih edilmeli. Bu sayede sadece domain üyesi makineler kendi kayıtlarını güncelleyebiliyor:

# Zone dinamik güncelleme ayarını kontrol et
Get-DnsServerZone -Name "sirket.local" | Select-Object ZoneName, DynamicUpdate

# Sadece güvenli güncellemelere izin ver
Set-DnsServerPrimaryZone -Name "sirket.local" -DynamicUpdate Secure

DNS Sorgu Günlüğü (Debug Logging)

Sorun giderme veya güvenlik izleme için DNS debug logging’i etkinleştirebilirsiniz. Ama dikkat: tam debug logging performansı etkiliyor, sadece geçici sorun giderme için kullanın.

# Debug logging ayarlarını gör
Get-DnsServerDiagnostics

# Temel sorgu loglamasını etkinleştir
Set-DnsServerDiagnostics -Queries $true -Answers $true -LogFilePath "C:DNSLogsdns.log" -MaxMBFileSize 500

DNS Önbellek Yönetimi

DNS sunucusu sorguları önbelleğe alır. Sorun giderme sırasında önbelleği temizlemek gerekebilir:

# DNS sunucusunun önbelleğini temizle (sunucu tarafı)
Clear-DnsServerCache -Force

# Önbellekteki kayıtları görüntüle
Get-DnsServerCache

# İstemci tarafında önbellek temizleme (bu komut istemci makinede çalıştırılır)
ipconfig /flushdns

# DNS çözümlemesini test et
Resolve-DnsName -Name "webserver01.sirket.local" -Server "192.168.10.10"
Resolve-DnsName -Name "sirket.local" -Type MX

Zone Transfer Yapılandırması

İkinci bir DNS sunucunuz varsa zone transfer ayarlamak için:

# Secondary DNS sunucuya zone transfer izni ver
Set-DnsServerPrimaryZone -Name "sirket.local" -SecureSecondaries TransferToSecureServers -SecondaryServers "192.168.10.11"

# Zone transfer ayarlarını kontrol et
Get-DnsServerZone -Name "sirket.local" | Select-Object ZoneName, SecureSecondaries, SecondaryServers

# Secondary zone oluştur (ikinci sunucuda çalıştırın)
Add-DnsServerSecondaryZone -Name "sirket.local" -ZoneFile "sirket.local.dns" -MasterServers "192.168.10.10"

Gerçek Dünya Senaryosu: Yeni Ofis DNS Entegrasyonu

Diyelim ki şirketin Ankara ofisine yeni bir branch açıldı. Merkez İstanbul’da, DNS sunucusu 192.168.10.10. Ankara’nın IP bloğu 10.10.10.0/24. Ankara’ya da yerel bir DNS sunucusu kurulacak.

Yapılacaklar:

  • Ankara’da DNS sunucusu kur
  • merkez.sirket.local zone’u için Ankara sunucusunu secondary yap
  • Ankara subnet’i için reverse zone ekle
  • Forwarder olarak merkez DNS’i göster
# Ankara DNS sunucusunda çalıştırın

# Secondary zone tanımla (Merkez'deki primary'den alacak)
Add-DnsServerSecondaryZone -Name "sirket.local" -ZoneFile "sirket.local.dns" -MasterServers "192.168.10.10"

# Ankara subnet için reverse zone (primary olarak Ankara yönetecek)
Add-DnsServerPrimaryZone -NetworkId "10.10.10.0/24" -ReplicationScope "Domain" -PassThru

# Forwarder olarak merkez DNS'i ekle
Add-DnsServerForwarder -IPAddress "192.168.10.10"

# Ankara sunucularını kaydet
Add-DnsServerResourceRecordA -Name "ankara-dc01" -ZoneName "sirket.local" -IPv4Address "10.10.10.10" -CreatePtr
Add-DnsServerResourceRecordA -Name "ankara-fileserver" -ZoneName "sirket.local" -IPv4Address "10.10.10.20" -CreatePtr

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

Sorun: İstemciler domain isimlerini çözümlemiyor

İlk kontrol edin:

# Sunucu üzerinden test
Resolve-DnsName -Name "dc01.sirket.local" -Server "127.0.0.1"

# Servisi yeniden başlat
Restart-Service DNS

# Event log'a bak
Get-EventLog -LogName System -Source "DNS Server" -Newest 20

Sorun: Dinamik kayıtlar güncellenmiyor

# Zone'un dinamik güncellemeye açık olduğunu doğrula
Get-DnsServerZone -Name "sirket.local" | Select-Object DynamicUpdate

# İstemcide DNS kaydını yenile
ipconfig /registerdns

Sorun: Reverse lookup çalışmıyor

# PTR kaydı var mı kontrol et
Resolve-DnsName -Name "192.168.10.20" -Type PTR -Server "192.168.10.10"

# Yoksa elle ekle
Add-DnsServerResourceRecordPtr -Name "20" -ZoneName "10.168.192.in-addr.arpa" -PtrDomainName "webserver01.sirket.local"

DNS İzleme ve Bakım

Bir DNS sunucusu kurdunuz ama bırakmak olmaz. Düzenli bakım şart:

# Zone istatistiklerini gör
Get-DnsServerStatistics -ZoneName "sirket.local"

# Tüm zone'ların listesi ve durumu
Get-DnsServerZone | Select-Object ZoneName, ZoneType, IsAutoCreated, IsDsIntegrated, IsReverseLookupZone

# Eskimiş kayıtları temizle (scavenging)
Set-DnsServerScavenging -ScavengingState $true -ScavengingInterval "7.00:00:00"
Set-DnsServerZoneAging -Name "sirket.local" -Aging $true -RefreshInterval "4.00:00:00" -NoRefreshInterval "4.00:00:00"

# Manuel scavenging başlat
Start-DnsServerScavenging -Force

Scavenging özelliği özellikle büyük ortamlarda kritik. DHCP’den IP alan makineler gelip geçiyor, DNS kayıtları temizlenmezse zone şişiyor ve yönetim zorlaşıyor.

Sonuç

Windows Server DNS, doğru kurulduğunda ve düzenli bakımı yapıldığında son derece güvenilir bir servis. Temel adımları özetlersek: statik IP ile başlayın, zone’larınızı planlayın, forward ve reverse zone’ları birlikte oluşturun, forwarder’larınızı doğru seçin, AD entegrasyonunda güvenli dinamik güncellemeyi unutmayın ve scavenging’i mutlaka etkinleştirin.

PowerShell ile yapılan yapılandırmalar hem daha hızlı hem de tekrarlanabilir. Özellikle birden fazla sunucuya aynı yapılandırmayı uygulamanız gerektiğinde script’lerin değeri ortaya çıkıyor. Yeni bir ortam kurulumunda ilk gün elle yaptığınız şeyleri ikinci kurulumda script ile beş dakikada halledebiliyorsunuz.

DNS sorunlarının büyük çoğunluğu yanlış yapılandırılmış zone’lardan, eksik PTR kayıtlarından veya yanlış forwarder ayarlarından kaynaklanıyor. Bu yazıda ele aldığımız adımları takip ederseniz, en yaygın tuzaklardan baştan kaçınmış olursunuz.

Bir yanıt yazın

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