dig ile DNS Sorgulama Nasıl Yapılır?

dig, belirli bir alan adı ve DNS kayıt türü için seçilen DNS sunucusuna sorgu gönderir; dönen mesajı başlık, bayraklar ve bölümler halinde gösterir. Temel kullanımda sorgu adı, kayıt türü ve hedef DNS sunucusu birbirinden ayrı düşünülmelidir.
Komut DNS kaydı eklemez veya değiştirmez. Yalnızca DNS sorgusu gönderir ve yanıtı görüntüler. Sonucu doğru yorumlayabilmek için hangi sunucunun yanıt verdiğini ve yanıtın recursive resolver (özyinelemeli DNS çözümleyicisi) üzerinden mi yoksa yetkili DNS sunucusundan mı geldiğini belirlemelisiniz.
Komut örneklerindeki alan adları ve IP adresleri belge amaçlıdır. Gerçek ortamda yalnız yetkili olduğunuz hedefleri kullanın ve canlı sonucu kendi ağınızda doğrulayın.
dig Sorgusunda Hedefi Seçme ve Yanıtı Okuma
- Sorgulanacak tam alan adını ve A, AAAA, MX, NS, TXT veya SOA gibi kayıt türünü belirleyin.
- Belirli bir DNS sunucusu hedeflenecekse sunucuyu komutta @sunucu biçiminde açıkça yazın.
- Önce başlık satırındaki yanıt durumunu ve bayrakları kontrol edin.
- QUESTION, ANSWER, AUTHORITY ve ADDITIONAL bölümlerini sorgunun amacına göre birlikte okuyun.
- Gerekirse recursive resolver ile yetkili DNS sunucusunun yanıtlarını ayrı sorgularla karşılaştırın.
- Betiklerde kısa çıktıyı tek başına başarı ölçütü olarak kullanmayın; DNS durum kodunu da kaydedin.
Sorgu Adı, Kayıt Türü ve DNS Sunucusu Seçimi
dig komutunun temel sözdizimi dig @sunucu ad tür biçimindedir; @sunucu bölümü isteğe bağlıdır. Sunucu belirtilmezse dig, işletim sisteminde yapılandırılmış DNS sunucularını kullanır; Unix benzeri sistemlerde bu adresleri çoğunlukla /etc/resolv.conf dosyasından okur. Paketleme ve işletim sistemi davranışı değişebileceği için varsayılan sunucu adreslerini yerel sistemde ayrıca doğrulayın.
dig example.com ABu komut, işletim sisteminde yapılandırılmış DNS sunucusuna example.com adı için A kaydı sorar. Alan adı verilmiş ancak kayıt türü yazılmamışsa dig varsayılan olarak A kaydını sorgular. Hiç argüman verilmeden çalıştırılan dig ise kök bölgenin NS kayıtlarını sorar. Türü açıkça yazmak otomasyonda yanlış kayıt türü kullanılmasını önler.
dig @192.0.2.53 example.com MXİkinci örnekte sorgu doğrudan 192.0.2.53 adresindeki DNS sunucusuna gönderilir ve yalnız MX türü istenir. 192.0.2.0/24 belge örnekleri için ayrılmıştır; canlı sorguda bu adresin yerine gerçek DNS sunucusunun adresini yazın.
Sorgu Adını Tam Yazma
Alan adının sonuna nokta eklemek, adı DNS köküne göre tam nitelikli hale getirir. Özellikle otomasyonlarda www.example.com. biçimi, arama eki veya yerel alan adı eklenmesi ihtimalini azaltır. dig varsayılan olarak arama listesini kullanmasa da kullanıcıya ait .digrc dosyası davranışı değiştirebilir.
dig -r @192.0.2.53 www.example.com. AAAA-r, kullanıcıya ait .digrc dosyasındaki seçeneklerin okunmasını engeller; komutta açıkça verilen seçenekler geçerliliğini korur. Sistem DNS ayarlarını değiştirmez. .digrc içinde sorguyu etkileyen seçenekler varsa -r kullanılması alınan yanıtı da değiştirebilir.
dig Çıktısındaki Başlık Satırını Okuma
Çıktının üst kısmı, DNS mesajının sonucunu tek satırda özetler. Aşağıdaki satırlar canlı bir sorgu sonucu değil, alanların yerini göstermek için hazırlanmış temsili bir şablondur.
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1status alanı DNS yanıt kodunu, flags alanı mesajın özelliklerini, bölüm sayaçları ise her bölümde kaç kayıt bulunduğunu gösterir. Sayaçlar tek başına başarı veya hata kararı vermez; durum kodunu ve bölüm içeriğini birlikte değerlendirin.
Yanıt Durumu
NOERROR, sunucunun sorguyu DNS protokolü açısından hatasız işlediğini gösterir. Bu durum, istenen kayıt türünün mutlaka ANSWER bölümünde bulunduğu anlamına gelmez; var olan bir ad için istenen tür yoksa NOERROR ile birlikte ANSWER sayısı sıfır olabilir.
NXDOMAIN, çözümleme sırasında aranan adın bulunmadığını bildirir. Yanıtta CNAME zinciri varsa bulunamayan ad, zincirin son hedefi olabilir. SERVFAIL, sunucunun başka bir sunucuya erişememesi, DNSSEC doğrulama hatası veya başka bir çözümleme sorunu nedeniyle sorguyu tamamlayamadığını gösterir. REFUSED, sunucunun politika veya yetki nedeniyle sorguyu işlemeyi reddettiğini bildirir. Zaman aşımı ise DNS yanıt kodu değildir; sunucudan kullanılabilir bir yanıt alınamadığı istemci tarafı durumudur.
Temel Bayraklar
- qr: Mesajın bir yanıt olduğunu gösterir.
- aa: Yanıtı veren DNS sunucusunun sorgu adı için yetkili olduğunu belirtir.
- rd: Sorguda recursive çözümleme istendiğini gösterir; recursive çözümleme işleminin tamamlandığını kanıtlamaz.
- ra: Sunucunun recursive çözümleme hizmeti sunabildiğini belirtir.
- tc: Mesajın iletim için izin verilen boyuta sığmadığı için kesildiğini gösterir. dig, kesilmiş bir UDP yanıtı aldığında varsayılan olarak TCP ile yeniden dener; doğrudan TCP sorgusu için +tcp kullanılabilir.
- ad: Güvenilen bir recursive resolver'ın, ANSWER ve AUTHORITY bölümlerindeki veriyi kendi güven zinciri ve politikası kapsamında DNSSEC ile doğrulanmış kabul ettiğini belirtir.
- cd: İstemcinin recursive resolver'dan DNSSEC denetimini devre dışı bırakmasını istediğini gösterir.
DNSSEC, DNS verisinin kaynağını ve bütünlüğünü dijital imzalarla doğrular. +dnssec, sorguda DO (DNSSEC OK) bitini ayarlayarak ilgili DNSSEC kayıtlarının gönderilmesini ister; dig bu seçenekle imzaları kendisi doğrulamaz. AD bayrağına dayanılacaksa hem recursive resolver güvenilir olmalı hem de yanıt, bu sunucudan güvenilir bir bağlantı üzerinden alınmalıdır. Yalnız bilinen bir DNS sunucusunun IP adresini komuta yazmak, yolda değiştirilebilen bir yanıttaki AD bayrağını güvenilir hale getirmez.
DNS Mesaj Bölümlerini Yorumlama
RFC 1035 tarafından tanımlanan DNS mesaj yapısı, bir başlık ve dört temel bölümden oluşur. dig bu bölümleri okunabilir başlıklarla gösterir; aynı kayıt farklı yanıt türlerinde farklı bölümlerde görülebilir.
| Bölüm | Ne Gösterir? | Nasıl Yorumlanır? |
|---|---|---|
| QUESTION | Sorgulanan ad, sınıf ve kayıt türü | Komutun gerçekten amaçlanan adı ve türü sorduğunu doğrular. |
| ANSWER | Soruya doğrudan yanıt veren kaynak kayıtları | A, AAAA, MX veya CNAME zinciri gibi sonuçlar burada yer alabilir. |
| AUTHORITY | Yetki veya delegasyonla ilgili NS ve SOA kayıtları | Delegasyon yanıtlarında yetkili NS kayıtlarını, olumsuz yanıtlarda ise SOA kaydını gösterebilir. |
| ADDITIONAL | Yanıtı kullanmayı kolaylaştıran ek kayıtlar ve EDNS bilgileri | NS veya MX hedeflerinin adresleri bulunabilir; bu bölüm gerekli tüm kayıtları içermez ve yetki kanıtı sayılmaz. |
EDNS, DNS mesajında UDP yanıt boyutu ve ek seçenekler gibi kontrol bilgilerinin taşınmasını sağlayan uzantıdır. Bu bilgiler ADDITIONAL bölümündeki OPT adlı özel kayıtta bulunur; dig bunları OPT PSEUDOSECTION başlığı altında gösterebilir. OPT, alan adına ait bir kaynak kaydı değildir ancak ADDITIONAL sayacına dahildir.
QUESTION bölümündeki ad veya tür beklenenden farklıysa, diğer bölümleri yorumlamadan önce komutu düzeltin. Özellikle kopyalanmış komutlarda yanlış kayıt türü, sonuna eklenen yerel arama alanı veya beklenmeyen .digrc seçenekleri yanlış sonuca yol açabilir.
Kaynak Kaydı Satırını Okuma
ANSWER, AUTHORITY ve ADDITIONAL bölümlerindeki standart bir kaynak kaydı satırı kayıt sahibi, TTL, sınıf, tür ve kayıt verisi alanlarından oluşur.
www.example.com. 300 IN A 192.0.2.10Bu temsili satırda www.example.com. kayıt sahibidir, 300 saniyelik TTL kaydın önbellekte tutulabileceği süreyi, IN internet sınıfını, A kayıt türünü ve 192.0.2.10 kayıt verisini gösterir. Recursive resolver'da görülen TTL, yetkili DNS sunucusundaki başlangıç değerinden düşük olabilir; çünkü recursive resolver önbellekte geçen süreyi başlangıç değerinden düşerek kalan TTL değerini gönderir.
Bir kaydın görünmesi, uygulamanın o kaydı doğru kullandığını da kanıtlamaz. Örneğin MX yanıtı alınması, posta tesliminin başarılı olacağını; A kaydının bulunması ise web hizmetinin erişilebilir olduğunu tek başına göstermez. dig DNS katmanını inceler, üst katman hizmetlerini doğrulamaz.
Recursive Resolver ile Yetkili DNS Sunucusunu Karşılaştırma
Recursive resolver, istemci adına çözümleme zincirini takip eder ve sonucu önbelleğe alabilir. Yetkili DNS sunucusu ise yönettiği DNS bölgesi için kaynak veriyi sunar. İki sunucunun rolü farklı olduğu için aynı ada verdikleri yanıtların bayrakları, TTL değerleri ve ek bölümleri aynı olmak zorunda değildir.
dig @198.51.100.53 www.example.com. A
dig @203.0.113.53 www.example.com. A +norecurseBu örnekte ilk adres recursive resolver'ı, ikinci adres ise yetkili DNS sunucusunu temsil eder; ikisi de belge amaçlı ayrılmış IP adresi aralıklarındadır. Gerçek karşılaştırmada önce sunucuların rollerini doğrulayın. +norecurse yalnız RD bayrağını temizler; recursive resolver'ı yetkili DNS sunucusuna dönüştürmez.
Recursive resolver yanıtında çoğunlukla RA bayrağı ve önbellekten kalan TTL görülür. Yetkili sunucu, yönettiği bölge için yanıt veriyorsa AA bayrağını kullanabilir. İki yanıt arasındaki fark; önbellek yaşı, split-horizon (ağa göre değişen DNS görünümü), coğrafi veya istemciye bağlı yanıt politikası, DNSSEC doğrulama sonucu ya da farklı sunucu kümelerinin henüz aynı veriye sahip olmamasıyla ilişkili olabilir.
Yetkili DNS sunucusuna doğrudan sorgu göndermek, recursive resolver'ın ziyaretçiye ne döndürdüğünü tek başına açıklamaz. Sorun giderirken önce yetkili kaynağı, ardından istemcinin kullandığı recursive resolver'ı ve gerekiyorsa ikinci bir bağımsız recursive resolver'ı ayrı kayıtlarla karşılaştırın; bu ayrım, farkın hangi katmanda oluştuğunu gösterir.
Kısa Çıktıyı Betiklerde Kullanma
+short, kayıt değerlerini kısa biçimde gösterir; durum kodunu, bayrakları ve bölüm ayrıntılarını gizler. Kayıt değeri görülmemesi tek başına adın bulunmadığını göstermez. İstenen türün bulunmaması, NXDOMAIN veya SERVFAIL gibi durumları ayırmak için DNS durum kodu da okunmalıdır; bağlantı hataları ayrıca incelenmelidir.
dig -r @198.51.100.53 example.com. A +shortBetik kaydında TTL, sınıf ve tür alanlarını korumak gerekiyorsa yalnız ANSWER bölümünü seçmek daha açıklayıcıdır.
dig -r @198.51.100.53 example.com. A +noall +answer+comments durum satırını, +answer ve +authority ise ilgili kayıt bölümlerini yeniden gösterir.
dig -r @198.51.100.53 example.com. A +noall +comments +answer +authoritydig komutunun çıkış kodu, DNS yanıtı alınmışsa NXDOMAIN dahil sıfır olabilir. Bu nedenle otomasyon yalnız kabuk çıkış koduna veya ANSWER satırı sayısına bakmamalı; DNS status alanını ayrıca ayrıştırmalı ve yanıtsız sunucu durumunu ayrı ele almalıdır.
dig Sorgusunu Tekrarlanabilir Biçimde Kaydetme
Sorguyu daha sonra karşılaştırabilmek için tam komutu, dig sürümünü, tarih ve saati, sorgunun başlatıldığı ağı, hedef DNS sunucusunun IP adresini ve tam çıktıyı birlikte saklayın. Betiklerde -r, tam nitelikli alan adı ve açık kayıt türü kullanarak kullanıcıya ait .digrc seçeneklerinin sorguyu değiştirmesini önleyin.
Çıktının sonundaki sunucu adresi, sorgu süresi ve mesaj boyutu da sorun giderme kaydına eklenebilir. Sorgu süresi yalnız DNS sunucusunun işlem süresini göstermez; istemci ile sunucu arasındaki ağ gecikmesi ve kullanılan taşıma yöntemi de ölçümü etkileyebilir.
UDP ile TCP arasındaki farkı incelemek gerekiyorsa sorguyu +tcp ile tekrarlayın ve iki çıktıyı birlikte saklayın. Bu karşılaştırma, yanıtın kesilmesi veya DNS trafiğinin ağda engellenmesi gibi sorunları araştırmaya yardımcı olur.







