Bu konuya adanmış bir RFC vardır: RFC 2308 - DNS Sorgularının Negatif Önbelleğe Alınması (DNS NCACHE) .
Okuma alakalı bölümdür 5 - Negatif Yanıtlar önbelleğe alma durumları:
Normal cevaplar gibi olumsuz cevaplar da yaşamaya başlar (TTL). Bu TTL'nin uygulanabileceği cevap bölümünde kayıt olmadığından, TTL başka bir yöntemle taşınmalıdır. Bu, bölgedeki SOA kaydını cevabın yetkili bölümüne dahil etmek suretiyle yapılır. Yetkili sunucu bu kaydı oluşturduğunda, TTL'si SOA.MINIMUM alanının ve SOA'nın TTL'sinin minimumundan alınır. Bu TTL normal bir önbelleğe alınmış cevaba benzer şekilde azalır ve sıfıra (0) ulaşıldığında önbelleklenen negatif cevabın tekrar kullanılmaması GEREKİR.
Öncelikle SOA.MINIMUM
RFC'de açıklanan ve SOA TTL'yi tanımlayalım. TTL, kayıt türünden önceki sayıdır IN
( 900
aşağıdaki örnekte saniyeler). Minimum kayıtta son alan olmasına rağmen ( 86400
aşağıdaki örnekte saniyeler).
$ dig serverfault.com soa @ns-1135.awsdns-13.org +noall +answer +multiline
; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> serverfault.com soa @ns-1135.awsdns-13.org +noall +answer +multiline
;; global options: +cmd
serverfault.com. 900 IN SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. (
1 ; serial
7200 ; refresh (2 hours)
900 ; retry (15 minutes)
1209600 ; expire (2 weeks)
86400 ; minimum (1 day)
)
Şimdi bazı örneklere bakalım, serverfault.com
bölge farklı yapılandırılmış iki farklı sağlayıcıdan gelen yetkili sunuculara sahip olduğu için açıklayıcıdır.
serverfault.com
Bölge için yetkili ad sunucularını bulalım :
$ host -t ns serverfault.com
serverfault.com name server ns-860.awsdns-43.net.
serverfault.com name server ns-1135.awsdns-13.org.
serverfault.com name server ns-cloud-c1.googledomains.com.
serverfault.com name server ns-cloud-c2.googledomains.com.
Ardından, bir aws nameserver kullanarak SOA kaydını kontrol edin:
$ dig serverfault.com soa @ns-1135.awsdns-13.org | grep 'ANSWER SECTION' -A 1
;; ANSWER SECTION:
serverfault.com. 900 IN SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
Bundan, SOA kaydının 900
TTL’sinin saniye, negatif TTL değerinin 86400
saniyeler olduğunu görebiliriz. SOA TTL değeri 900
daha düşük olduğundan, bu değerin kullanılmasını bekliyoruz.
Şimdi, var olmayan bir etki alanı için yetkili bir sunucuyu sorgularsak, otorite bölümünde yanıtsız ve SOA kaydı olan bir yanıt almalıyız:
$ dig nxdomain.serverfault.com @ns-1135.awsdns-13.org
; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> nxdomain.serverfault.com @ns-1135.awsdns-13.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 51948
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nxdomain.serverfault.com. IN A
;; AUTHORITY SECTION:
serverfault.com. 900 IN SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
;; Query time: 125 msec
;; SERVER: 205.251.196.111#53(205.251.196.111)
;; WHEN: Tue Aug 20 15:49:47 NZST 2019
;; MSG SIZE rcvd: 135
Özyinelemeli (önbellekleme) bir çözümleyici bu cevabı aldığında, SOA kaydını ayrıştırır AUTHORITY SECTION
ve negatif sonucun ne kadar süreyle önbelleğe alınması gerektiğini belirlemek için bu kaydın TTL'sini kullanır (bu durumda 900
saniye).
Şimdi aynı prosedürü bir google nameserver ile izleyelim:
$ dig serverfault.com soa @ns-cloud-c2.googledomains.com | grep 'ANSWER SECTION' -A 1
;; ANSWER SECTION:
serverfault.com. 21600 IN SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
Google ad sunucularının hem SOA TTL hem de Negatif TTL değerleri için farklı değerlere sahip olduğunu görebilirsiniz. Bu durumda, negatif TTL 300
, SOA TTL'den daha düşüktür 21600
. Bu nedenle google sunucusu alt değeri kullanması gerektiğini AUTHORITY SECTION
bir döndürürken SOA kaydının NXDOMAIN
yanıtı:
$ dig nxdomain.serverfault.com @ns-cloud-c2.googledomains.com
; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> nxdomain.serverfault.com @ns-cloud-c2.googledomains.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 25920
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;nxdomain.serverfault.com. IN A
;; AUTHORITY SECTION:
serverfault.com. 300 IN SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
;; Query time: 130 msec
;; SERVER: 216.239.34.108#53(216.239.34.108)
;; WHEN: Tue Aug 20 16:05:24 NZST 2019
;; MSG SIZE rcvd: 143
Beklendiği gibi NXDOMAIN
yanıttaki SOA kaydının TTL'si 300
saniyedir.
Yukarıdaki örnekte, aynı sorguya farklı cevaplar almanın ne kadar kolay olduğu gösterilmektedir. Bireysel önbellek çözümleyicinin kullanarak sona erdiği yanıtı, yetkili adlandırma sunucusunun sorgulandığı sorundur.
Testlerimde, bazı özyinelemeli (önbellekleme) çözümleyicilerin AUTHORITY SECTION
, diğerleri tarafından yapılan taleplerde sonraki TTL için azalan bir TTL'ye sahip bir SOA kaydıyla geri dönmediğini gözlemledim .
Örneğin, cloudflare çözümleyicisi şunları yapar (azalan TTL değerine dikkat edin):
$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com. 674 IN SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
$ dig nxdomain.serverfault.com @1.1.1.1 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com. 668 IN SOA ns-1135.awsdns-13.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
Bir AWS VPC'deki varsayılan çözümleyici yalnızca ilk talepte yetkili bölüme cevap verirken:
$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1
;; AUTHORITY SECTION:
serverfault.com. 300 IN SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
$ dig nxdomain.serverfault.com @169.254.169.253 | grep 'AUTHORITY SECTION' -A 1 | wc -l
0
Not: Bu cevap, NXDOMAIN
cevapların davranışına yöneliktir .
Sözlük: