Active Directory ortamlarında bir şeyler ters gittiğinde, ilk başvurduğun araç genellikle ping olur. Ama ping sana DNS hakkında çok az şey söyler. İşte tam bu noktada dig devreye girer ve DNS dünyasının kapılarını ardına kadar açar. Windows Server yöneticileri olarak çoğumuz nslookup ile büyüdük, ancak dig komutu çok daha fazla bilgi sunar ve özellikle AD ortamlarındaki DNS sorunlarını çözerken hayat kurtarır.
dig Nedir ve Neden Kullanmalıyız?
dig (Domain Information Groper), DNS sorgularını detaylı biçimde analiz etmek için kullanılan güçlü bir komut satırı aracıdır. Linux sistemlerde varsayılan olarak gelir, Windows tarafında ise BIND araçları veya WSL (Windows Subsystem for Linux) aracılığıyla kullanılabilir.
Active Directory, DNS’e inanılmaz derecede bağımlı bir yapıdır. Domain Controller’ların birbirini bulması, Kerberos kimlik doğrulaması, LDAP bağlantıları, site-aware servis tespiti… Bunların tamamı DNS’in sağlıklı çalışmasına dayanır. Bir AD sorununu çözerken DNS’i atlayamazsın, atlamamalısın da.
nslookup ile kıyaslandığında dig‘in avantajları şunlardır:
- Daha okunabilir çıktı: Sorgu süresi, TTL değerleri, yetkilendirme bilgileri tek ekranda
- Daha fazla kontrol: Belirli DNS sunucusuna, belirli kayıt tipine özelleştirilmiş sorgular
- Betik dostu: Çıktı formatlanması ve ayrıştırılması çok daha kolay
- DNSSEC desteği: Güvenlik uzantılarını test etmek için kullanışlı
- Toplu sorgulama: Birden fazla sorguyu tek komutla çalıştırabilme
Windows’ta dig Kurulumu
Linux ortamında zaten hazır gelir, ancak Windows Server yöneticisi olarak birkaç seçeneğin var:
WSL ile kurulum (önerilen):
# WSL üzerinde Ubuntu kullanıyorsan
sudo apt update && sudo apt install dnsutils -y
BIND araçlarıyla Windows’a kurulum: ISC BIND paketini indirip kurduğunda dig ve nslookup araçları gelir. Kurulum sonrası PATH’e eklemen yeterli.
PowerShell ile dig benzeri sorgular: Windows tarafında Resolve-DnsName cmdlet’i benzer işlevler görür, ancak tam olarak dig kadar esnek değildir.
# PowerShell alternatifi
Resolve-DnsName -Name "_ldap._tcp.dc._msdcs.corp.local" -Type SRV -Server 192.168.1.10
Temel dig Sözdizimi
dig [@sunucu] [ad] [tip] [seçenekler]
En basit kullanımıyla bir A kaydı sorgulama:
dig corp.local
Belirli bir DNS sunucusuna sorgulama:
dig @192.168.1.10 corp.local
Şimdi gerçek AD senaryolarına geçelim.
Active Directory DNS Kayıt Tipleri
AD ortamında DNS, standart A ve PTR kayıtlarının çok ötesinde kritik SRV kayıtları barındırır. Bu kayıtlar olmadan domain üyeliği, kimlik doğrulama ve replikasyon çalışmaz.
SRV Kayıtlarını Sorgulamak
AD’nin belki de en kritik DNS kayıtları SRV kayıtlarıdır. Domain Controller’ların servisleri bu kayıtlar aracılığıyla duyurulur.
# LDAP servisi için DC'leri bul
dig @192.168.1.10 _ldap._tcp.dc._msdcs.corp.local SRV
# Kerberos servisi için DC'leri bul
dig @192.168.1.10 _kerberos._tcp.dc._msdcs.corp.local SRV
# Global Catalog'u bul
dig @192.168.1.10 _gc._tcp.corp.local SRV
# PDC Emulator'ı bul
dig @192.168.1.10 _ldap._tcp.pdc._msdcs.corp.local SRV
Bir client makine domain’e katılmaya çalıştığında arka planda bu SRV sorgularını yapar. Eğer bu kayıtlar eksikse ya da yanlışsa, domain join işlemi “domain controller bulunamadı” hatasıyla başarısız olur.
Gerçek dünya senaryosu: Bir gün sabah 08:00’de telefon gelir. “Domain’e giriş yapamıyoruz” diye. İlk yapacağın şey:
# Önce SRV kayıtları var mı kontrol et
dig @192.168.1.10 _ldap._tcp.dc._msdcs.corp.local SRV +short
# Hiç sonuç gelmiyorsa DC'nin DNS servisini kontrol et
dig @192.168.1.10 corp.local SOA
Belirli Bir Site İçin DC Sorgulama
Büyük kurumsal ortamlarda AD Sites and Services yapısı kurulur ve her site kendi DC’sine yönlendirilir. Bir sitedeki kullanıcılar başka sitedeki DC’ye bağlanıyorsa cidli gecikme sorunları yaşanır.
# Istanbul sitesindeki DC'leri bul
dig @192.168.1.10 _ldap._tcp.istanbul._sites.dc._msdcs.corp.local SRV
# Ankara sitesindeki DC'leri bul
dig @192.168.1.10 _ldap._tcp.ankara._sites.dc._msdcs.corp.local SRV
dig Çıktısını Anlamak
Tipik bir dig çıktısı şu bölümlerden oluşur:
dig @192.168.1.10 corp.local A
Çıktıda göreceğin bölümler:
- HEADER: Sorgu ID’si, flags (qr, aa, rd, ra), QUERY/ANSWER/AUTHORITY/ADDITIONAL sayısı
- QUESTION SECTION: Ne sorduğun
- ANSWER SECTION: Gelen cevaplar ve TTL değerleri
- AUTHORITY SECTION: Yetkili DNS sunucuları
- ADDITIONAL SECTION: Ek bilgiler (genellikle NS kayıtlarının A adresleri)
Buradaki aa (Authoritative Answer) bayrağı çok önemlidir. Eğer bu bayrak set edilmişse, cevap yetkili kaynaktan gelmiştir. AD DNS’inde bu bayrağın olmadığı bir cevap aldığında dikkatli olmalısın, muhtemelen cache’den geliyordur.
Pratik dig Senaryoları
Senaryo 1: Yeni DC’nin DNS’e Kaydını Doğrulama
Yeni bir Domain Controller kuruyorsun ve DNS kayıtlarının doğru oluştuğunu teyit etmen gerekiyor.
# Yeni DC'nin A kaydını kontrol et
dig @192.168.1.10 dc02.corp.local A
# DC'nin SRV kaydı var mı
dig @192.168.1.10 _ldap._tcp.dc._msdcs.corp.local SRV | grep dc02
# Tüm DC SRV kayıtlarını listele
dig @192.168.1.10 _ldap._tcp.dc._msdcs.corp.local SRV +noall +answer
+noall +answer kombinasyonu çok işe yarar. +noall tüm çıktı bölümlerini susturur, +answer sadece ANSWER SECTION’ı gösterir. Betik yazarken sık kullanırsın.
Senaryo 2: DNS Replikasyon Sorunlarını Tespit Etme
İki DC var, birinde kayıt var diğerinde yok. Klasik AD replikasyon problemi.
# DC1'de kayıt var mı?
dig @192.168.1.10 fileserver.corp.local A
# DC2'de kayıt var mı?
dig @192.168.1.20 fileserver.corp.local A
# Sonuçlar farklıysa replikasyon sorunun var demektir
# AD replikasyon durumunu da kontrol et
repadmin /showrepl # Windows tarafında
Bu iki sorgunun sonucu farklıysa, DNS replikasyonu çalışmıyor. repadmin ve event log’lara bakma zamanı.
Senaryo 3: Reverse DNS (PTR) Doğrulaması
AD Kerberos kimlik doğrulamasında PTR kayıtları kritiktir. Bazı uygulamalar forward ve reverse DNS eşleşmesini doğrular.
# IP'den hostname'e çözümleme
dig @192.168.1.10 -x 192.168.1.20
# Birden fazla IP için toplu PTR sorgusu
for ip in 192.168.1.{10..20}; do
echo -n "$ip -> "
dig @192.168.1.10 -x $ip +short
done
PTR kaydı yoksa veya yanlış hostname dönüyorsa, Kerberos double-hop senaryolarında sorun yaşarsın. Özellikle IIS uygulamalarında Windows Authentication çalışmıyorsa, PTR kayıtlarını kontrol et.
Senaryo 4: CNAME Zinciri Kontrolü
Uygulamanızda alias kayıtları kullanıyorsanız CNAME zincirlerini takip etmek önemlidir.
# CNAME kaydını sorgula
dig @192.168.1.10 uygulama.corp.local CNAME
# Tüm zinciri takip et
dig @192.168.1.10 uygulama.corp.local +trace
# Sadece nihai IP'yi göster
dig @192.168.1.10 uygulama.corp.local A +short
AD ortamında uzun CNAME zincirleri bazen sorun çıkarır. Özellikle bazı AD entegre uygulamalar CNAME kayıtlarını desteklemez ve doğrudan A kaydı bekler.
dig ile DNS Zone Kontrolü
SOA Kaydını Sorgulama
SOA (Start of Authority) kaydı, bir zone hakkında temel bilgileri içerir. AD DNS troubleshooting’inde önemli bir başlangıç noktasıdır.
dig @192.168.1.10 corp.local SOA
# Kısa format
dig @192.168.1.10 corp.local SOA +short
SOA çıktısından şunları okuyabilirsin:
- Primary nameserver: Zone’un birincil DNS sunucusu (genellikle PDC Emulator)
- Serial number: Zone’un versiyon numarası, replikasyon sorunlarında bu numara DC’ler arası karşılaştırılır
- Refresh, Retry, Expire: Sekonder DNS’lerin zone yenileme parametreleri
- Minimum TTL: Negatif cache süresi
İki DC arasında SOA serial number farklıysa, DNS replikasyonu gecikiyordur.
NS Kayıtlarını Kontrol Etme
# Zone'da kayıtlı nameserver'ları listele
dig @192.168.1.10 corp.local NS
# Nameserver'ların birbirini tutup tutmadığını kontrol et
dig @192.168.1.10 corp.local NS +short | while read ns; do
echo "=== $ns ==="
dig @$ns corp.local SOA +short
done
dig ile Gelişmiş Sorgular
+trace ile DNS Zincirini Takip Etme
Bir ismin nasıl çözümlendiğini adım adım görmek istersen +trace kullan:
dig corp.local +trace
Bu komut, root sunucularından başlayarak DNS çözümleme zincirinin tüm adımlarını gösterir. İnternet’e açık bir AD federe senaryosunda veya split-brain DNS yapılandırmalarında çok kullanışlıdır.
Tüm Kayıt Tiplerini Sorgulamak
Bir hostname için tüm DNS kayıt tiplerini görmek istersen:
dig @192.168.1.10 corp.local ANY
# Daha temiz bir çıktı için
dig @192.168.1.10 corp.local ANY +noall +answer
NOT: Bazı DNS sunucuları ANY sorgularını güvenlik gerekçesiyle yanıtlamaz. AD DNS bu konuda genellikle daha esnektir.
Batch Mode ile Toplu Sorgulama
Bir dosyada sorgu listesi var ve hepsini çalıştırmak istiyorsun:
# sorgu_listesi.txt dosyası oluştur
cat > sorgu_listesi.txt << EOF
server 192.168.1.10
_ldap._tcp.dc._msdcs.corp.local SRV
_kerberos._tcp.dc._msdcs.corp.local SRV
_gc._tcp.corp.local SRV
corp.local SOA
corp.local NS
EOF
dig -f sorgu_listesi.txt +short
AD Sorunlarında Kullanışlı dig Betikleri
DC Sağlık Kontrol Betiği
#!/bin/bash
DNS_SERVER="192.168.1.10"
DOMAIN="corp.local"
echo "=== AD DNS Saglik Kontrolu ==="
echo ""
echo "[1] LDAP SRV Kayitlari:"
dig @$DNS_SERVER _ldap._tcp.dc._msdcs.$DOMAIN SRV +noall +answer
echo ""
echo "[2] Kerberos SRV Kayitlari:"
dig @$DNS_SERVER _kerberos._tcp.dc._msdcs.$DOMAIN SRV +noall +answer
echo ""
echo "[3] Global Catalog SRV:"
dig @$DNS_SERVER _gc._tcp.$DOMAIN SRV +noall +answer
echo ""
echo "[4] PDC Emulator:"
dig @$DNS_SERVER _ldap._tcp.pdc._msdcs.$DOMAIN SRV +noall +answer
echo ""
echo "[5] Zone SOA (Serial Numarasi):"
dig @$DNS_SERVER $DOMAIN SOA +noall +answer
echo ""
echo "[6] Nameserver'lar:"
dig @$DNS_SERVER $DOMAIN NS +noall +answer
Bu betiği sabah işe geldiğinde çalıştırmak iyi bir alışkanlık olur. AD’de beklenmedik bir şey varsa erken fark edersin.
DNS Replikasyon Kontrol Betiği
#!/bin/bash
DC1="192.168.1.10"
DC2="192.168.1.20"
DOMAIN="corp.local"
HOSTNAME_TO_CHECK="fileserver"
echo "DC1 SOA Serial:"
dig @$DC1 $DOMAIN SOA +short | awk '{print $3}'
echo "DC2 SOA Serial:"
dig @$DC2 $DOMAIN SOA +short | awk '{print $3}'
echo ""
echo "$HOSTNAME_TO_CHECK icin DC1 cevabi:"
dig @$DC1 $HOSTNAME_TO_CHECK.$DOMAIN A +short
echo "$HOSTNAME_TO_CHECK icin DC2 cevabi:"
dig @$DC2 $HOSTNAME_TO_CHECK.$DOMAIN A +short
Sık Karşılaşılan Sorunlar ve dig ile Teşhis
Sorun 1: “Logon servers not available”
# SRV kayitlari var mi?
dig @192.168.1.10 _ldap._tcp.dc._msdcs.corp.local SRV +short
# Sonuc bos ise DC'nin netlogon servisi kayttini yapmamis demektir
# DC'de "net stop netlogon && net start netlogon" komutu calistir
Sorun 2: Yavaş domain join
# Site SRV kayitlari kontrol et
dig @192.168.1.10 _ldap._tcp.istanbul._sites.dc._msdcs.corp.local SRV +short
# Bos ise site assignment ve subnet ayarlarini kontrol et
Sorun 3: Kerberos hataları
# PTR kaydi dogru mu?
dig @192.168.1.10 -x 192.168.1.10 +short
# Sonuc dc01.corp.local olmali, baska bir sey ise Kerberos sorun yasayabilir
Sorun 4: DNS cache kirliliği
# Farkli DNS sunuculara ayni sorguyu gonder
dig @192.168.1.10 uygulama.corp.local A +short
dig @192.168.1.20 uygulama.corp.local A +short
# Farkli sonuclar geliyorsa cache temizleme ve replikasyon kontrolu yap
dig ile DNSSEC Dogrulama
Modern AD ortamlarında DNSSEC kullanımı artıyor. dig ile DNSSEC doğrulamasını test edebilirsin:
# DNSSEC kayitlarini goster
dig @192.168.1.10 corp.local DNSKEY
# Dogrulama sonucunu goster
dig @192.168.1.10 corp.local +dnssec
# AD Integrated Zone'da DS kayitlari
dig @192.168.1.10 corp.local DS
Sonuç
dig komutu, AD ortamında çalışan bir sistem yöneticisinin en değerli araçlarından biridir. DNS sorunlarını hızlıca teşhis etmek, SRV kayıtlarının varlığını doğrulamak, replikasyon durumunu kontrol etmek ve DNS yapısını anlamak için bu araç olmadan işler çok daha zor olurdu.
Özellikle şu durumlar için dig‘i alışkanlık haline getirmeni öneririm:
- Yeni DC kurulumu sonrası SRV kayıt doğrulaması
- Domain join sorunlarında ilk teşhis adımı
- DNS replikasyon sorunlarında serial number karşılaştırması
- PTR kayıt eksikliğinden kaynaklanan Kerberos sorunları
- Site-aware servis tespiti sorunları
nslookup‘ı tamamen bir kenara bırakman gerekmiyor, ama dig‘i araç setine eklemek sana ciddi bir troubleshooting avantajı sağlar. Özellikle betik yazarken dig‘in düzenli ve ayrıştırılabilir çıktısı, nslookup‘ın dağınık çıktısına kıyasla çok daha kullanışlıdır.
Active Directory’nin DNS’e olan bağımlılığını düşündüğünde, DNS’i ne kadar iyi anlarsanız AD sorunlarını o kadar hızlı çözebilirsin. dig de bu anlayışın temel taşlarından biridir.