Windows DNS Sunucusu Nedir ve Active Directory’deki Rolü
Yıllar önce bir müşterimizin ofisine gittiğimde, IT sorumlusu bana şunu söylemişti: “DNS çalışıyor, dokunmayalım.” O gün o sunucunun üzerinde ne kadar kritik bir yapının döndüğünü anlatmaya çalıştım. DNS sadece “isim çözümleme” yapan sıradan bir servis değil, Active Directory’nin temeli, kimlik doğrulamanın kılcal damarı. Eğer DNS sallanırsa, her şey sallanır.
Bu yazıda Windows DNS Sunucusu’nun ne olduğunu, Active Directory ile neden bu kadar derin bir ilişkisi bulunduğunu ve günlük yönetim pratiklerini ele alacağım. Hem kavramsal hem de uygulamalı bir bakış açısıyla ilerleyeceğiz.
Windows DNS Sunucusu Nedir?
Windows DNS Sunucusu, Microsoft’un Windows Server işletim sistemi üzerine inşa ettiği, RFC standartlarına uyumlu bir DNS (Domain Name System) hizmetidir. Temel işlevi, insan tarafından okunabilir alan adlarını IP adreslerine, IP adreslerini de alan adlarına çevirmektir. Ancak Windows ortamında DNS’in rolü bu kadar basit bir tanımın çok ötesine geçer.
Windows DNS, DNS Manager (dnsmgmt.msc) arayüzü üzerinden yönetilebilir. Aynı zamanda PowerShell ve komut satırı araçlarıyla tam otomasyon desteği sunar. Bu esneklik, büyük kurumsal ortamlarda DNS yönetimini ciddi ölçüde kolaylaştırır.
Bir Windows DNS Sunucusu şu kayıt türlerini destekler:
- A Kaydı: IPv4 adresi eşleştirmesi
- AAAA Kaydı: IPv6 adresi eşleştirmesi
- CNAME Kaydı: Takma ad (alias) tanımı
- MX Kaydı: Posta sunucusu yönlendirmesi
- PTR Kaydı: Ters DNS çözümlemesi
- SRV Kaydı: Servis konumu kaydı (Active Directory için kritik)
- NS Kaydı: İsim sunucusu tanımı
- TXT Kaydı: Metin tabanlı doğrulama kayıtları (SPF, DKIM vb.)
- SOA Kaydı: Zone yetkisi başlangıç bilgisi
Active Directory ile DNS İlişkisi: Neden Bu Kadar Kritik?
Active Directory Domain Services (AD DS) kurulduğu andan itibaren DNS’e bağımlı hale gelir. Bu bağımlılık mimari düzeyde tasarlanmıştır ve kaçınılmazdır.
Domain Controller’lar birbirini bulmak, Kerberos kimlik doğrulaması yapmak, LDAP sorgularını yönlendirmek ve replikasyon trafiğini koordine etmek için SRV kayıtlarına dayanır. Bu SRV kayıtları olmadan, bir istemci makinesi hangi Domain Controller’a bağlanacağını bilemez.
Tipik bir SRV kaydı şu şekilde görünür:
_ldap._tcp.dc._msdcs.sirket.local
_kerberos._tcp.dc._msdcs.sirket.local
_gc._tcp.dc._msdcs.sirket.local
Bu kayıtlar, AD kurulumu sırasında Net Logon servisi tarafından otomatik olarak DNS’e yazılır. Eğer DNS düzgün yapılandırılmamışsa bu kayıtlar oluşmaz, oluşsa bile güncel kalmaz. Sonuç: Kullanıcılar oturum açamaz, Group Policy uygulanamaz, bilgisayarlar domain’e dahil olamaz.
Şunu şöyle düşünebilirsiniz: Active Directory, DNS üzerinde çalışan bir uygulama gibi davranır. DNS altyapısı sağlamlıktan yoksunsa Active Directory de sağlıklı çalışamaz.
DNS Zone Türleri ve Active Directory Entegrasyonu
Windows DNS Sunucusu üç temel zone türü sunar:
Primary Zone
Belirli bir zone’un yetkili kopyasını barındırır. Kayıtlar doğrudan bu zone’a yazılır. Geleneksel yapıda zone verisi bir .dns dosyasında saklanır (%SystemRoot%System32dns klasöründe).
Secondary Zone
Primary zone’dan zone transfer ile alınan salt okunur kopyayı barındırır. Yük dengeleme ve coğrafi dağıtım için kullanılır.
Active Directory Integrated Zone
İşte asıl konuşulması gereken yapı bu. AD Integrated Zone’larda zone verisi DNS dosyalarında değil, doğrudan Active Directory veritabanında (NTDS.dit) saklanır. Bu yaklaşımın avantajları şunlardır:
- Güvenli dinamik güncelleme: Yalnızca domain üyesi makineler kendi kayıtlarını güncelleyebilir
- Çok yönlü replikasyon: AD replikasyonu üzerinden tüm Domain Controller’lara otomatik dağıtılır
- Dayanıklılık: Herhangi bir DC hem primary hem de authoritative kaynak olarak hareket edebilir
- ACL tabanlı güvenlik: Zone kayıtları üzerinde ince ayarlı izin yönetimi
Bir zone’u AD integrated olarak yapılandırmak PowerShell ile oldukça kolaydır:
# Yeni bir AD integrated primary zone oluşturma
Add-DnsServerPrimaryZone -Name "sirket.local" `
-ReplicationScope "Forest" `
-DynamicUpdate "Secure"
Replikasyon kapsamı önemli bir parametredir:
- Forest: Tüm ormandaki tüm DNS sunucuları
- Domain: Yalnızca aynı domain’deki DNS sunucuları
- Legacy: Sadece Domain Controller’lar üzerindeki DNS sunucuları
DNS Sunucusu Kurulumu: Adım Adım
Yeni bir Windows Server 2019/2022 ortamında DNS rolünü kurmak için PowerShell tercih edilmelidir. GUI ile yapılabilir ancak tekrarlanabilir ve belgelenebilir altyapı için PowerShell kaçınılmaz.
# DNS Server rolünü yükleme
Install-WindowsFeature -Name DNS -IncludeManagementTools
# Yükleme doğrulama
Get-WindowsFeature -Name DNS
AD DS ile birlikte DNS kurmak istediğinizde şu sırayı izleyin:
# AD DS ve DNS rollerini birlikte yükleme
Install-WindowsFeature -Name AD-Domain-Services, DNS -IncludeManagementTools
# Yeni bir forest oluşturma ve DNS'i birlikte yapılandırma
Install-ADDSForest `
-DomainName "sirket.local" `
-DomainNetbiosName "SIRKET" `
-InstallDns:$true `
-SafeModeAdministratorPassword (ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force) `
-Force
Burada -InstallDns:$true parametresi, DNS rolünün otomatik yapılandırılmasını ve AD integrated zone’un oluşturulmasını sağlar. Bu parametre varsayılan olarak $true gelir ancak açıkça belirtmek iyi bir pratiktir.
DNS Kayıt Yönetimi: Pratik Senaryolar
Statik A Kaydı Ekleme
Bir uygulama sunucusu için statik DNS kaydı eklemek sık karşılaşılan bir görevdir:
# Tek bir A kaydı ekleme
Add-DnsServerResourceRecordA `
-ZoneName "sirket.local" `
-Name "appserver01" `
-IPv4Address "192.168.10.50" `
-TimeToLive "01:00:00"
# Ters DNS (PTR) kaydı ekleme
Add-DnsServerResourceRecordPtr `
-ZoneName "10.168.192.in-addr.arpa" `
-Name "50" `
-PtrDomainName "appserver01.sirket.local."
CNAME Kaydı ile Servis Soyutlama
Bir web uygulaması için takma ad oluşturmak, sunucu taşımalarını çok daha az acılı hale getirir:
# CNAME kaydı oluşturma
Add-DnsServerResourceRecordCName `
-ZoneName "sirket.local" `
-Name "intranet" `
-HostNameAlias "webserver01.sirket.local."
Bu yapıyla intranet.sirket.local adresi her zaman güncel sunucuya işaret eder. Sunucu değiştiğinde yalnızca CNAME kaydını güncellemeniz yeterlidir.
Toplu Kayıt Yönetimi
Büyük ortamlarda CSV’den toplu kayıt oluşturmak büyük zaman kazandırır:
# dns_records.csv formatı: Name,IPAddress
# appserver01,192.168.10.50
# dbserver01,192.168.10.51
# fileserver01,192.168.10.52
Import-Csv -Path "C:dns_records.csv" | ForEach-Object {
Add-DnsServerResourceRecordA `
-ZoneName "sirket.local" `
-Name $_.Name `
-IPv4Address $_.IPAddress `
-TimeToLive "01:00:00"
Write-Host "Kayit eklendi: $($_.Name) -> $($_.IPAddress)"
}
DNS Güvenliği: Göz Ardı Edilmeyen Ama Genellikle Atlanan Konu
DNS güvenliği kurumsal ortamlarda sıkça ihmal edilir. Oysa DNS spoofing, cache poisoning ve yetkisiz zone transferleri ciddi güvenlik açıkları doğurabilir.
DNSSEC Yapılandırması
Windows DNS Sunucusu DNSSEC’i destekler. Bir zone’u imzalamak:
# Zone için DNSSEC imzalama
Invoke-DnsServerZoneSign `
-ZoneName "sirket.local" `
-SignWithDefault `
-Force
# İmzalama durumunu kontrol etme
Get-DnsServerDnsSecZoneSetting -ZoneName "sirket.local"
Zone Transfer Kısıtlaması
Zone transferlerini yalnızca yetkili sunuculara kısıtlamak temel bir güvenlik önlemidir:
# Zone transferini belirli IP'lerle sınırlama
Set-DnsServerPrimaryZone `
-Name "sirket.local" `
-SecureSecondaries "TransferToZoneNameServer" `
-Notify "NotifyServers" `
-NotifyServers "192.168.10.2", "192.168.10.3"
Dinamik Güncelleme Güvenliği
İç ağda bile Secure dinamik güncelleme kullanılmalıdır. Unsecured modda herhangi bir makine başkasının DNS kaydını değiştirebilir:
# Secure dinamik güncellemeye geçiş
Set-DnsServerPrimaryZone `
-Name "sirket.local" `
-DynamicUpdate "Secure"
DNS Sorun Giderme: Gerçek Hayat Senaryoları
Senaryo 1: Kullanıcılar Domain’e Giriş Yapamıyor
Bu durumda ilk baktığım yer her zaman DNS’tir. Şu kontrolleri sırasıyla yapın:
# Istemci makinede DNS sunucusunu kontrol et
ipconfig /all
# DNS çözümlemesini test et
nslookup sirket.local
nslookup -type=SRV _ldap._tcp.dc._msdcs.sirket.local
# DC'den DC'ye SRV kayıt sorgusu
Resolve-DnsName -Name "_ldap._tcp.dc._msdcs.sirket.local" -Type SRV
Eğer SRV kayıtları dönmüyorsa Net Logon servisini yeniden başlatın:
# DC üzerinde Net Logon servisini yeniden başlatma
Restart-Service -Name "Netlogon"
# Kayıtların yeniden yazıldığını doğrulama
nltest /dsregdns
Senaryo 2: DNS Cache Sorunları
İstemci tarafında eski veya yanlış DNS kayıtları kalmışsa:
# DNS istemci önbelleğini temizleme
ipconfig /flushdns
# DNS sunucusu önbelleğini temizleme (sunucu tarafında)
Clear-DnsServerCache -Force
# Belirli bir kaydı önbellekten silme
Clear-DnsServerCache -Name "eski-sunucu.sirket.local" -Force
Senaryo 3: Replikasyon Sonrası Kayıt Tutarsızlıkları
AD Integrated zone’larda replikasyon sorunları DNS tutarsızlıklarına yol açabilir:
# DNS sunucusu replikasyon durumunu kontrol etme
repadmin /showrepl
# AD replikasyonunu zorla
repadmin /syncall /AdeP
# DNS zone verilerini yeniden yükle
dnscmd /zonereload sirket.local
Forwarder ve Conditional Forwarder Yapılandırması
Şirket içi DNS sunucusunun internetteki adresleri de çözebilmesi için forwarder tanımlanması gerekir. Bunun yanı sıra iş ortakları veya şube ağları için conditional forwarder kullanımı çok yaygın bir senaryodur.
# Genel forwarder ekleme (Google DNS örneği)
Add-DnsServerForwarder -IPAddress "8.8.8.8", "8.8.4.4" -PassThru
# Conditional forwarder ekleme
# Ortak şirketin DNS'ine yönlendirme
Add-DnsServerConditionalForwarderZone `
-Name "ortaksirket.com" `
-MasterServers "10.20.0.1", "10.20.0.2" `
-ReplicationScope "Forest"
# Mevcut forwarder'ları listeleme
Get-DnsServerForwarder
Get-DnsServerZone | Where-Object {$_.ZoneType -eq "Forwarder"}
Conditional forwarder’lar Active Directory integrated olarak yapılandırıldığında tüm domain’deki DNS sunucularına replike edilir. Bu sayede her şubeye ayrı ayrı aynı konfigürasyonu yapmanıza gerek kalmaz.
DNS Günlükleme ve İzleme
Büyük ortamlarda DNS sorgu logları hem sorun giderme hem de güvenlik analizleri açısından değerlidir.
# DNS analitik loglama aktifleştirme (Event Log)
wevtutil set-log "Microsoft-Windows-DNSServer/Analytical" /e:true /q:true
# PowerShell ile DNS log sorgulama
Get-WinEvent -LogName "DNS Server" -MaxEvents 100 |
Where-Object {$_.Id -eq 408} |
Select-Object TimeCreated, Message
# DNS hata loglarını filtreleme
Get-WinEvent -LogName "DNS Server" |
Where-Object {$_.LevelDisplayName -eq "Error"} |
Select-Object -First 20 TimeCreated, Message
DNS debug logging, sorun yaşandığında son derece değerli olabilir ancak yüksek trafik ortamlarında disk I/O açısından dikkatli olunmalıdır. Sadece sorun giderme sürecinde etkinleştirip sonrasında kapamak en sağlıklı yaklaşımdır.
Aging ve Scavenging: Temizlik de Yönetimin Parçası
DNS veritabanı zamanla eski ve kullanılmayan kayıtlarla dolar. Özellikle DHCP ile dinamik kayıt kullanan ortamlarda bu sorun daha belirgin hale gelir. Aging ve scavenging mekanizması bu eski kayıtları otomatik olarak temizler.
# Zone için aging aktifleştirme
Set-DnsServerZoneAging `
-Name "sirket.local" `
-Aging $true `
-ScavengeServers "192.168.10.1" `
-RefreshInterval "7.00:00:00" `
-NoRefreshInterval "7.00:00:00"
# Sunucu genelinde scavenging aktifleştirme
Set-DnsServerScavenging `
-ScavengingState $true `
-ScavengingInterval "7.00:00:00" `
-ApplyOnAllZones
# Scavenging durumunu kontrol etme
Get-DnsServerScavenging
Get-DnsServerZoneAging -Name "sirket.local"
Scavenging yapılandırılırken NoRefreshInterval ve RefreshInterval değerlerinin toplamı, kaydın ömrünü belirler. Çok agresif ayarlamak sağlıklı kayıtların da silinmesine yol açabilir. Genellikle her ikisi için de 7 günlük değerler dengeli bir başlangıç noktasıdır.
Yüksek Erişilebilirlik için DNS Tasarımı
Kurumsal ortamlarda tek bir DNS sunucusu asla yeterli değildir. Her istemciye en az iki DNS sunucusu tanımlanmalıdır.
Active Directory ortamında en iyi pratik şudur:
- Birincil DNS: Yerel site’deki Domain Controller (AD Integrated zone)
- İkincil DNS: Farklı site’deki veya farklı subnet’teki Domain Controller
Bu yapı, tek bir DC’nin çökmesi durumunda DNS hizmetinin kesintisiz devam etmesini sağlar. AD Integrated zone kullanıldığında her DC hem primary hem de authoritative olduğundan zone transfer kavramı ortadan kalkar ve replikasyon otomatik yürür.
# Belirli bir site'deki DNS sunucularını listeleme
Get-DnsServer -ComputerName "dc01.sirket.local" |
Select-Object -ExpandProperty ServerSetting
# Tüm domain'deki DNS sunucularını sorgulama
Get-ADDomainController -Filter * |
Select-Object Name, IPv4Address, Site |
Format-Table -AutoSize
Sonuç
Windows DNS Sunucusu, yüzeyden bakıldığında basit bir isim çözümleme servisi gibi görünse de Active Directory altyapısının çimentosu konumundadır. SRV kayıtları olmadan kimlik doğrulama çalışmaz, AD Integrated Zone olmadan replikasyon güvenilirliği azalır, scavenging olmadan veritabanı şişer, güvenli dinamik güncelleme olmadan kayıtlar manipüle edilebilir hale gelir.
Bu servisin iyi anlaşılması ve doğru yapılandırılması, yönettiğiniz ortamın genel sağlığını doğrudan etkiler. DNS sorunları çoğu zaman kendini başka bir servisin arızası olarak gösterir. Kullanıcılar “domain’e giremiyorum”, “uygulama açılmıyor”, “e-posta gitmiyor” der. Siz DNS’e bakarsınız, orada bir şeyler yanlıştır.
Monitoring, düzenli scavenging, güvenli zone yapılandırması ve kapsamlı loglama bu riski büyük ölçüde azaltır. DNS’e “dokunmayın, çalışıyor” demenin bedeli, bir gün sabahın dördünde nöbetçi olduğunuzda ortaya çıkar.
