DNS Kaydı Değiştiği Hâlde Eski Sonuç Neden Görülür? TTL ve Negatif Önbelleği Ayırma
Bir DNS değişikliğinden sonra görülen sonuç eski bir kayıt değeri, NXDOMAIN ya da NODATA olabilir. Bu yanıtların ne anlama geldiğini ve önbellekte neden kalabildiğini ayırın.

DNS kaydını değiştirdiniz veya yeni bir alt alan adı eklediniz; ancak sorgu hâlâ eski hedefi gösteriyor ya da “bulunamadı” sonucu veriyor. Bu iki durum aynı görünse de aynı nedenle oluşmaz. DNS TTL ve negatif önbellek ayrımını yapmak, beklediğiniz yanıtın neden henüz görünmediğini daha doğru yorumlamanıza yardım eder. DNS’de resolver, istemcinin sorgusuna karşılık ad sunucularından bilgi alan programdır. Ad sunucuları ise alan adı ağacının bir bölümü hakkında bilgi tutabilir ve önbellek kullanabilir. Bu nedenle bir sorguda görülen yanıtın önce ne söylediğini ayırmak gerekir: Daha önce var olan değeri mi görüyorsunuz, yoksa daha önce alınmış bir yokluk yanıtını mı?

Kısa özet
- Eski bir IP veya başka mevcut değer görünüyorsa, saklanmış normal DNS yanıtı söz konusu olabilir.
- NXDOMAIN, sorgulanan alan adının mevcut olmadığını; NODATA ise adın geçerli olup istenen kayıt türünün bulunmadığını ifade eder.
- Negatif yanıtların da TTL değeri vardır; bu süre SOA kaydının TTL değeri ile SOA.MINIMUM değerinden düşük olanına göre belirlenir.
- Teşhiste önce yanıtın eski bir değer mi, NXDOMAIN mi, yoksa NODATA mı olduğunu ayırmak gerekir.
Önce görünen yanıtı sınıflandırın
Bir kayıt değişikliğinden sonra “eski sonuç” ifadesi iki farklı durumu anlatabilir. İlkinde sorgu yanıtı hâlâ mevcut bir kaydın eski değerini taşır. Örneğin, bir A kaydının önceki hedefi dönüyor olabilir. Bu, bir kaydın belirli bir değere sahip olduğuna dair bilginin önbellekte tutulmasıyla ilgilidir.
İkincisinde ise yanıt, istenen bilginin bulunmadığını söyler. Negatif önbellekleme, bir kaydın veya alan adının mevcut olmadığı bilgisinin saklanmasıdır. Dolayısıyla eski bir değer ile yokluk yanıtını aynı belirti gibi ele almak doğru teşhis sağlamaz.
Kayıt türlerinin neyi temsil ettiğini tekrar gözden geçirmeniz gerekiyorsa DNS kayıtları: A, CNAME, MX ve TXT ne işe yarar? başlıklı içerik, sorguladığınız kayıt türünü netleştirmeye yardımcı olabilir.
- Yanıtta eski bir değer varsa: mevcut veriyle ilgili normal önbellekleme olasılığını inceleyin.
- Yanıt NXDOMAIN ise: sorgudaki alan adının mevcut olmadığını bildiren negatif yanıtı inceleyin.
- Ad geçerli görünürken yalnız istenen tür yoksa: NODATA durumunu inceleyin.
NXDOMAIN ile NODATA aynı değildir
NXDOMAIN, “Name Error” RCODE’unun diğer adıdır. Bu yanıt, sorgudaki QNAME’in, yani sorgulanan alan adının, mevcut olmadığını ifade eder. Örnek senaryo olarak yeni.example.com adı oluşturulmadan önce bu ada yönelik bir sorgunun NXDOMAIN döndürdüğünü düşünün. Bu sonuç, o ad altında A, MX veya TXT gibi tek bir türün eksik olmasından daha geniş bir yokluk bilgisidir.
NODATA ise adın ilgili sınıf için geçerli olduğu, fakat istenen kayıt türünde kayıt bulunmadığı durumdur. NODATA için ayrı bir RCODE değeri yoktur; yanıtın içeriğinden anlaşılır. Örnek senaryoda mail.example.com adı geçerli olabilir, fakat o anda istenen türde bir kayıt bulunmayabilir. Bu nedenle “alan adı hiç yok” ile “bu türde kayıt yok” sonucunu birbirinden ayırın.
Bu ayrım önemlidir çünkü negatif yanıtların önbellek anahtarı da farklıdır. NXDOMAIN sonucu, aynı QNAME ve QCLASS için başka bir sorguda kullanılmak üzere önbelleğe alınabilir. NODATA sonucu ise aynı QNAME, QTYPE ve QCLASS birleşimi için önbelleğe alınır. QTYPE, istenen kayıt türüdür; QCLASS ise DNS sorgusundaki sınıftır.
- NXDOMAIN: QNAME ile belirtilen alan adı mevcut değildir.
- NODATA: Ad geçerlidir, ancak sorgulanan kayıt türünde veri yoktur.
- NXDOMAIN önbelleği QNAME ve QCLASS ile; NODATA önbelleği QNAME, QTYPE ve QCLASS ile ilişkilidir.
Kaynak: [2]
Negatif yanıtın TTL süresi nereden gelir?
TTL, bir DNS bilgisinin önbellekte ne kadar süre kullanılabileceğini belirleyen yaşam süresidir. Negatif yanıtların da TTL değeri vardır. Negatif yanıtta TTL’nin uygulanacağı bir answer bölümü kaydı bulunmadığından, bir bölge için yetkili olan ad sunucuları NXDOMAIN bildirirken veya istenen türde veri olmadığını belirtirken bölgenin SOA kaydını authority bölümüne eklemelidir.
Negatif yanıt için kullanılacak TTL, SOA kaydının MINIMUM alanı ile SOA kaydının kendi TTL değerinden düşük olanıdır. Bu süre, resolver’ın negatif yanıtı ne kadar süre önbelleğe alabileceğini gösterir. Negatif TTL de normal önbellekteki yanıta benzer biçimde azalır. Sıfıra ulaştığında, önbellekteki negatif yanıt yeniden kullanılmamalıdır.
Bu nedenle yeni bir ad veya kayıt oluşturduktan sonra hâlâ NXDOMAIN ya da NODATA görmeniz, önceki yokluk yanıtının önbellekte bulunmasıyla uyumlu olabilir. Buna karşılık eski bir hedef değer görüyorsanız incelemeniz gereken şey negatif yanıt değil, mevcut değere ilişkin normal önbelleklenmiş yanıttır.
- Bir bölge için yetkili ad sunucuları, NXDOMAIN veya istenen türde veri yok yanıtında SOA kaydını authority bölümüne eklemelidir.
- Negatif TTL, SOA.MINIMUM ile SOA TTL değerinin düşük olanıdır.
- Negatif TTL sıfır olduğunda saklanmış negatif yanıt tekrar kullanılmamalıdır.
Kaynak: [2]
Karşılaştırmalı teşhis akışı
İlk adım, değişiklik yaptığınız ad ve kayıt türü için aldığınız yanıtı yazılı olarak ayırmaktır. Eski bir değer görüyorsanız, bu değer hâlâ mevcut veri olarak dönmektedir. NXDOMAIN görüyorsanız, sorgulanan adın mevcut olmadığına dair bir yanıt vardır. NODATA görüyorsanız, ad geçerli olsa da istediğiniz türde veri yoktur. Bu üç sonucu tek bir “DNS yayılımı” etiketi altında birleştirmek, sorunun niteliğini gizler.
İkinci adım, yanıtı veren bileşenin rolünü ayırmaktır. Resolver istemci isteğine karşı bilgi toplar; ad sunucusu ise yetkili bilgi tutabilir veya önbelleğe aldığı bilgiyi kullanabilir. Bu ayrım, aynı değişiklik sonrasında neden farklı sorgu yollarında farklı sonuçlar değerlendirilmesi gerektiğini anlamaya yardımcı olur. Konunun bu tarafı için DNS Yanıtı Neden Farklı Ağlarda Farklı Görünebilir? Yetkili Sunucu ve Önbellek Ayrımı içeriğiyle birlikte değerlendirme yapabilirsiniz.
Üçüncü adım yalnız negatif sonuçlarda uygulanır. NXDOMAIN veya NODATA varsa SOA ile taşınan negatif TTL mantığını değerlendirin. Süre henüz sıfıra ulaşmadıysa resolver sakladığı negatif sonucu kullanabilir. Süre sıfıra ulaştıysa bu negatif yanıt yeniden kullanılmamalıdır. Bu çerçeve, yeni kaydın varlığı ile daha önce saklanmış yokluk bilgisini birbirinden ayırır.
- Eski değer: normal, mevcut veriye ilişkin önbelleklenmiş yanıtı değerlendirin.
- NXDOMAIN: alan adının yokluğu bilgisinin negatif önbelleğe alınmış olabileceğini değerlendirin.
- NODATA: adın var olup istenen türün bulunmadığına ilişkin negatif yanıtı değerlendirin.
- Yalnız negatif sonuçta: SOA’dan türeyen TTL’nin sıfıra ulaşıp ulaşmadığını değerlendirin.
Uygulama kontrol listesi
- Sorguladığınız alan adını ve kayıt türünü açıkça not edin.
- Yanıtın eski bir değer, NXDOMAIN veya NODATA olup olmadığını ayırın.
- NXDOMAIN ise sorgulanan QNAME’in mevcut olmadığı sonucunu değerlendirin.
- NODATA ise adın geçerli, istenen kayıt türünün eksik olup olmadığını değerlendirin.
- Negatif yanıtta, bir bölge için yetkili ad sunucusunun authority bölümüne eklemesi gereken SOA kaydını ve negatif TTL mantığını inceleyin.
- Negatif TTL’nin sıfıra ulaştığında yanıtın yeniden kullanılmaması gerektiğini dikkate alın.
- Resolver ile yetkili bilgi tutan ad sunucusunun rollerini birbirinden ayırın.
DNS değişikliğinden sonra her eski sonuç aynı anlama gelmez. Eski bir kayıt değeri normal önbellekteki mevcut bilgidir; NXDOMAIN alan adının mevcut olmadığını, NODATA ise geçerli ad altında istenen türde veri bulunmadığını anlatır. Negatif yanıtların da SOA kaydına dayanan bir TTL’si olduğu için, teşhise yanıt türünü adlandırarak başlamak en güvenli yaklaşımdır.
Sık sorulan sorular
NXDOMAIN, bir A kaydının bulunmadığı anlamına mı gelir?
Hayır. NXDOMAIN, sorgulanan QNAME’in işaret ettiği alan adının mevcut olmadığını bildirir. Ad geçerli olup yalnız A kaydı yoksa bu durum NODATA olarak değerlendirilir.
NODATA için DNS’te ayrı bir hata kodu var mı?
Hayır. NODATA, ayrı bir RCODE değildir; yanıtın içeriğinden çıkarılan, adın geçerli ancak istenen kayıt türünün bulunmadığı durumu ifade eder.
Negatif önbellekteki yanıt ne zaman yeniden kullanılmamalıdır?
Negatif yanıtın TTL’si normal önbellek yanıtına benzer biçimde azalır. TTL sıfıra ulaştığında bu saklanmış negatif yanıt yeniden kullanılmamalıdır.
Kaynaklar
[1] rfc1034.txt
[2] rfc2308.txt

