DNS, alan adlarının IP adresi gibi bilgilerini sorgulamaya yarar. Yetkili DNS sunucusu yönettiği DNS bölgesinin kayıtlarını sunar; recursive resolver (özyinelemeli DNS çözümleyicisi) ise istemci adına yanıtı bulur ve daha önce önbelleğe aldığı veriyi kullanabilir. Bu nedenle aynı alan adı ve kayıt türü için iki sunucu geçici olarak farklı sonuç verebilir.

Yaygın nedenlerden biri önbellekte kalan eski yanıttır; ancak her farkı “DNS henüz yayılmadı” diye açıklamak doğru değildir. İç ve dış ağa farklı yanıt veren split-horizon yapılandırması veya kayıtların kaynağını ve bütünlüğünü dijital imzalarla doğrulayan DNSSEC ile ilgili bir hata da farklı sonuçlara yol açabilir. Üst DNS bölgesinin hangi yetkili sunucuların kullanılacağını bildirdiği delegasyon yanlış olabilir ya da yetkili sunucular kendi aralarında tutarsız kayıtlar sunabilir.

Teşhisin temel kuralı, aynı sorguyu mümkün olduğunca yakın zamanlarda iki katmanda karşılaştırmaktır. Sorgu adı, kayıt türü ve mümkünse sorgunun çıktığı ağ aynı tutulmadan yapılan karşılaştırma yanıltıcı olabilir.

Yetkili Sunucu ve Recursive Resolver Yanıtlarını Karşılaştırma

Karşılaştırmaya başlamadan önce tek bir sorgu tanımlayın: tam alan adı ve kayıt türü. Örneğin example.com A ile www.example.com A veya example.com A ile example.com AAAA farklı sorgulardır; sonuçların farklı olması tek başına arıza göstermez.

Yetkili Sunucu ve Recursive Resolver Sorguları

DNS sorgulama programı dig için aşağıdaki komutlar birer sözdizimi örneğidir. Büyük harfli sunucu adlarını kendi yetkili DNS sunucunuzun ve test edeceğiniz recursive resolver sisteminin gerçek sunucu adı veya IP adresiyle değiştirin; alanadi.example. yerine de sorgulanacak tam alan adını yazın. Sondaki nokta adın tam olduğunu belirtir. -r, kişisel dig ayar dosyasının bu örnekleri değiştirmesini önler; +norecurse ise sunucudan başka kaynaklara başvurmasını istemeden sorgu yapar.

dig -r @YETKILI_DNS alanadi.example. A +norecurse
dig -r @RECURSIVE_DNS alanadi.example. A

İki çıktıda önce kayıt değerlerini, sonra verinin önbellekte kullanılabileceği süreyi gösteren TTL değerini, durum kodunu ve sorgulanan sunucuyu karşılaştırın. AA bayrağı, yanıt veren sunucunun ilgili ad için yetkili olduğunu bildirdiğini gösterir; tek başına sunucunun kimliğini veya verinin güncelliğini doğrulamaz. Recursive resolver yanıtı önbellekten gelebileceği gibi o sorgu sırasında yeni alınmış da olabilir.

Etkilenen kullanıcının DNS sorgularının gerçekte hangi recursive resolver üzerinden yanıtlandığını da doğrulayın. Cihazın ağ ayarında görünen DNS sunucusu ile uygulamanın kullandığı recursive resolver, trafiği başka bir sunucuya tünelleyen VPN, kurumsal ağ politikası veya uygulama içi DNS ayarı nedeniyle farklı olabilir. Yanlış sunucuyu test etmek, iki doğru sonucu yanlış biçimde karşılaştırmanıza yol açar.

DNS yanıtları beklenen değerleri verdiği halde uygulama eski hedefe bağlanıyorsa yerel önbelleği, adları IP adresleriyle eşleyen hosts dosyasını ve uygulamanın bağlantı davranışını ayrıca inceleyin. Açık bir bağlantı, DNS kaydı değişti diye kendiliğinden yeni sunucuya taşınmaz.

Yanıt Değeri, TTL ve Durum Kodunu Birlikte Karşılaştırma

Örneğin yetkili sunucu yeni IP adresini, recursive resolver eski IP adresini döndürüyor ve recursive resolver yanıtındaki TTL her yeni sorguda azalıyorsa, bu durum önbelleğe güçlü biçimde işaret eder. Buna karşılık recursive resolver sorguyu tamamlayamadığını bildiren SERVFAIL kodunu döndürüyor, yetkili sunucu ise normal kayıt gösteriyorsa sorun yalnız olumlu kaydın normal önbellek süresine bağlanamaz.

dig +short gibi kısaltılmış çıktılar yalnız kayıt değerini görmeyi kolaylaştırır; ancak TTL, durum ve bazı bayraklar görünmediği için bu karşılaştırmada tek başına yeterli değildir. Tam çıktı, iki yanıtın nerede ayrıldığını gösteren alanları birlikte sunar.

Yanıtların Farklılaşmasına Yol Açan Başlıca Nedenler

Sorgu adı ve kayıt türü birebir eşleştiğinde farkın nedeni genellikle birkaç belirgin gruptan biridir. Her grupta düzeltilecek yer farklı olduğu için önce ayrışmanın hangi katmanda başladığını bulmak gerekir.

Önbellek ve Kalan TTL

Recursive resolver daha önce aldığı bir DNS yanıtını TTL süresi boyunca önbelleğinde tutabilir. Yetkili sunucudaki kayıt daha sonra değiştirilmiş olsa bile recursive resolver, elindeki eski kayıt kümesinin kalan süresi bitene kadar eski yanıtı vermeye devam edebilir.

Recursive resolver yanıtındaki TTL değerinin zamanla azalması önbelleğe işaret eder, ancak tek başına eski verinin neden sunulduğunu kanıtlamaz. Yetkili sunucu yeni değeri tutarlı biçimde veriyor ve recursive resolver önbelleğindeki eski cevabın TTL değeri düşüyorsa DNS kaydını tekrar tekrar değiştirmek sorunu çözmez; mevcut önbelleğin kalan süresini izlemek gerekir.

Farklı recursive resolver sistemleri aynı kaydı farklı zamanlarda önbelleğe alabilir. Bu yüzden bir sistem yeni kaydı görürken diğeri bir süre daha eski kaydı döndürebilir; karşılaştırmada her sistemin yanıtındaki kalan TTL değerini ayrı değerlendirmek gerekir.

TTL sona erdikten sonra güncel veri zamanında alınamıyorsa destekleyen recursive resolver, serve-stale yöntemiyle sakladığı eski yanıtı geçici olarak sunabilir. Bu yanıt da pozitif TTL taşıyabilir. Ayrıca daha önce bir adın veya kayıt türünün bulunmadığını bildiren olumsuz yanıtın önbellekte kalması, sonradan eklenen kaydın hemen görünmesini engelleyebilir.

Sorgulanan Ad, Kayıt Türü ve CNAME Hedefi

DNS karşılaştırmalarında sık görülen hata, aynı siteyi temsil ettiği düşünülen ancak teknik olarak farklı olan adları veya kayıt türlerini yan yana koymaktır. Kök alan adı ile www alt alan adı farklı kayıt kümelerine sahip olabilir; A kaydı IPv4, AAAA kaydı IPv6 adresi bildirir; CNAME ise bir adı başka bir adın takma adı olarak tanımlar.

Bu nedenle yetkili DNS sunucusunun yanıtını doğru, recursive resolver yanıtını yanlış saymadan önce iki komutun tam sorgu adının ve türünün aynı olduğunu kontrol edin. Uygulamanın gerçekte hangi adı sorguladığı da bu aşamada önemlidir.

A veya AAAA sorgusunda yetkili sunucu yalnız kendi bölgesindeki CNAME kaydını döndürebilir; recursive resolver ise bu kaydın hedefini izleyip son IP adresini de yanıta ekleyebilir. Yanıtlardan birinin daha uzun olması bu durumda tek başına hata değildir. Aynı ad ve türdeki kayıtları eşleştirin, CNAME hedefini de kendi yetkili kaynağıyla karşılaştırın.

Split-Horizon DNS ve Coğrafi Yanıt Seçimi

Bazı ağlarda aynı alan adı iç ağdaki kullanıcılara farklı, internetten gelen sorgulara farklı yanıt verecek biçimde tasarlanır. Böyle bir split-horizon yapılandırmasında iç ağın kullandığı recursive resolver ile herkese açık yetkili DNS yanıtının farklı olması kasıtlı olabilir.

Coğrafi konuma göre yanıt seçen GeoDNS veya içeriği farklı konumlardaki sunuculardan sunan CDN hizmetleri de farklı kayıt kümeleri döndürebilir. Yetkili sunucu çoğunlukla sizin değil, kendisine sorgu gönderen recursive resolver sunucusunun IP adresini görür. Destekleniyorsa ECS (EDNS Client Subnet) seçeneğiyle istemcinin IP adresinin ağı belirten kısmı da iletilebilir; sunucu yanıt seçiminde bu bilgiyi kullanabilir.

İki sorguyu aynı bilgisayardan göndermek, yetkili sunucunun ikisinde de aynı kaynak bilgisini gördüğünü garanti etmez. Bu nedenle farkın hata olup olmadığına yalnız ağ değiştirerek karar vermeyin; DNS hizmetinin iç-dış ağ, coğrafi yönlendirme veya yük dağıtma ayarlarını da karşılaştırın. Aynı kayıt kümesinin yalnız farklı sırada gelmesi ise içerik tutarsızlığı değildir.

DNSSEC Doğrulaması

Yetkili sunucunun bir kayıt döndürmesi, o kaydın DNSSEC doğrulamasından başarıyla geçeceği anlamına gelmez. Doğrulama yapan recursive resolver, imza veya güven zinciriyle ilgili bir tutarsızlık görürse, doğrudan yetkili sorguda veri görünmesine rağmen istemciye SERVFAIL döndürebilir.

SERVFAIL yalnız DNSSEC hatası anlamına gelmez; recursive resolver sunucusunun gerekli diğer sunuculara ulaşamaması veya sorgunun zaman aşımına uğraması da aynı kodu üretebilir. Doğrulama günlüklerini ve varsa hata açıklamasını inceleyin. DNSSEC kaynaklı bir sorun doğrulanırsa imza veya güven zinciri hatasını giderin; doğrulamayı kapatmak bu hatayı düzeltmez.

Delegasyonun Farklı Yetkili Sunucuları Göstermesi

Alan adının yöneticisi yeni DNS sağlayıcısındaki yetkili sunucuyu doğrudan sorgulayıp doğru kaydı görebilir. Ancak recursive resolver, yetkili sunucuları sırayla izlediği iterative (yinelemeli) sorgular sırasında üst bölgedeki delegasyon nedeniyle eski veya başka sunuculara yöneliyorsa kullanıcıların aldığı sonuç farklı kalır.

Bu senaryoda “yeni sunucu beklenen yanıtı veriyor” bilgisi tek başına yeterli değildir. Yetkili sunucuları adlarıyla bildiren NS kayıtlarını üst bölgede kontrol edin ve yeni DNS hizmetinin bildirdiği sunucularla karşılaştırın. Üst bölgedeki delegasyon düzelmiş olsa bile recursive resolver önbelleğindeki eski NS bilgisi süresi dolana kadar kullanılabilir.

Yalnız tek bir A veya AAAA kaydı değiştirildiyse delegasyon genellikle öncelikli neden değildir; ancak yetkili DNS sunucuları değiştirildiyse delegasyon kontrolü öncelik kazanır. Böylece kayıt güncellemesi ile yetkili sunucu değişikliğini aynı sorun gibi ele alma hatası önlenir.

Yetkili Sunucuların Kendi Aralarında Tutarsız Olması

Bir alan adı için birden fazla yetkili sunucu ilan edilmişse yalnız birini test etmek yeterli değildir. Kasıtlı yanıt farklılaştırması bulunmayan aynı sorgu koşullarında sunuculardan biri yeni, diğeri eski kaydı döndürüyorsa farklı recursive resolver sistemleri ulaştıkları sunucuya göre farklı cevaplar alabilir.

Bu durumda ilan edilen yetkili sunucuların tamamını aynı ad ve kayıt türüyle ayrı ayrı sorgulayın. Kayıt değerlerinin yanı sıra bölgenin yönetim bilgilerini taşıyan SOA kaydındaki seri numarası da yardımcı olabilir; ancak asıl doğrulama, kullanıcıyı etkileyen kayıt kümesinin her yetkili sunucuda yapılandırmaya uygun sonucu verip vermediğidir. Aynı SOA seri numarası tek başına bütün kayıtların eşit olduğunu kanıtlamaz.

Belirtilere Göre Olası DNS Sorunları

Aşağıdaki tablo, iki katmandaki belirtileri önce incelenmesi gereken olası nedenlerle eşleştirir. Tek bir belirti kesin hüküm değildir; karar, aynı sorgunun tekrarlanabilir sonuçlarına dayanmalıdır.

GözlemÖncelikli olasılıkKontrol
Yetkili sunucu yeni, recursive resolver eski değer veriyor; recursive resolver yanıtındaki TTL azalıyorRecursive resolver önbelleğiAynı recursive resolver sistemini yeniden sorgulayıp kalan TTL değerinin düşüp düşmediğini izleyin
Yanıtlar farklı ancak sorgu adları veya türleri aynı değilKarşılaştırma hatasıTam sorgu adını ve A, AAAA, CNAME gibi kayıt türünü eşitleyin
İç ağ ve dış ağ farklı sonuç veriyorSplit-horizon veya coğrafi yanıt seçimiKaynak ağı, varsa ECS bilgisini ve DNS hizmetinin yanıt seçme ayarlarını karşılaştırın
Yetkili kayıt döndürüyor, DNSSEC doğrulayan recursive resolver SERVFAIL veriyorDNSSEC doğrulaması veya çözümleme sırasında erişim hatasıDoğrulama günlüklerini inceleyin ve gerekli DNS sunucularına erişimi ayrıca kontrol edin
Yeni yetkili sunucu doğru yanıt veriyor, kullanıcının DNS sorguları başka kaynağa gidiyorDelegasyon uyuşmazlığıÜst bölgedeki NS delegasyonunu gerçek yetkili sunucularla karşılaştırın
Kasıtlı yanıt farklılaştırması olmadığı halde yetkili sunucular farklı kayıt döndürüyorYetkili sunucu tutarsızlığıİlan edilen her yetkili sunucuyu aynı sorguyla ayrı ayrı test edin

Beklenen DNS Yanıtını Yeniden Doğrulama

Teşhis tamamlandığında tek bir başarılı sorguyla yetinmeyin. Aynı kayıt türünü birden fazla yetkili sunucuda karşılaştırın ve kullanıcının sorgularını yanıtlayan recursive resolver sisteminin beklenen kaydı döndürdüğünü doğrulayın; delegasyon veya DNSSEC sorunu vardıysa ilgili katmanın da artık tutarlı çalıştığını kontrol edin.