Ada RFC yang didedikasikan untuk topik ini: RFC 2308 - Caching Negatif atas Pertanyaan DNS (DNS NCACHE) .
Bagian yang relevan untuk dibaca adalah 5 - Caching Jawaban Negatif yang menyatakan:
Seperti jawaban normal, jawaban negatif punya waktu untuk hidup (TTL). Karena tidak ada catatan di bagian jawaban yang dapat diterapkan TTL ini, TTL harus dilakukan dengan metode lain. Ini dilakukan dengan memasukkan catatan SOA dari zona di bagian otoritas balasan. Ketika server otoritatif membuat catatan ini, TTL diambil dari minimum bidang SOA.MINIMUM dan TTL SOA. Penurunan TTL ini dengan cara yang mirip dengan jawaban yang di-cache normal dan setelah mencapai nol (0) menunjukkan jawaban negatif yang di-cache TIDAK HARUS digunakan lagi.
Pertama mari kita mengidentifikasi SOA.MINIMUM
dan SOA TTL yang dijelaskan dalam RFC. TTL adalah angka sebelum tipe catatan IN
( 900
detik dalam contoh di bawah). Sedangkan minimum adalah bidang terakhir dalam catatan ( 86400
detik dalam contoh di bawah).
$ 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)
)
Sekarang mari kita lihat beberapa contoh, serverfault.com
zona ini ilustratif karena memiliki server otoritatif dari dua penyedia berbeda yang dikonfigurasi secara berbeda.
Mari kita menemukan server nama resmi untuk serverfault.com
zona:
$ 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.
Kemudian periksa catatan SOA menggunakan server aws:
$ 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
Dari ini kita dapat melihat bahwa TTL dari catatan SOA adalah 900
detik sedangkan nilai TTL negatif adalah 86400
detik. Nilai SOA TTL 900
lebih rendah sehingga kami berharap nilai ini digunakan.
Sekarang jika kita meminta server otoritatif untuk domain yang tidak ada, kita harus mendapatkan respons tanpa jawaban dan dengan catatan SOA di bagian otoritas:
$ 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
Ketika resolver rekursif (caching) menerima jawaban ini, ia akan mengurai catatan SOA di AUTHORITY SECTION
dan menggunakan TTL catatan ini untuk menentukan berapa lama ia harus menyimpan hasil negatif (dalam kasus ini 900
detik).
Sekarang mari ikuti prosedur yang sama dengan server nama google:
$ 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
Anda dapat melihat bahwa server nama google memiliki nilai yang berbeda untuk nilai TTL SOA dan negatif TTL. Dalam hal ini TTL negatif 300
lebih rendah daripada SOA TTL 21600
. Karena itu server google harus menggunakan nilai yang lebih rendah dalam AUTHORITY SECTION
catatan SOA ketika mengembalikan NXDOMAIN
respons:
$ 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
Seperti yang diharapkan, TTL dari catatan SOA dalam NXDOMAIN
respons adalah 300
detik.
Contoh di atas juga menunjukkan betapa mudahnya mendapatkan jawaban yang berbeda untuk permintaan yang sama. Jawaban yang akhirnya diselesaikan oleh seorang penyelesai caching adalah ke mana namserver otoritatif ditanyai.
Dalam pengujian saya, saya juga telah mengamati bahwa beberapa resolvers (caching) rekursif tidak mengembalikan sebuah AUTHORITY SECTION
dengan catatan SOA dengan TTL menurun untuk permintaan berikutnya sedangkan yang lain melakukannya.
Sebagai contoh, resolver cloudflare tidak (perhatikan nilai TTL yang mengurangi):
$ 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
Sementara resolver default di AWS VPC akan merespons dengan bagian otoritas hanya pada permintaan pertama:
$ 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
Catatan: Jawaban ini membahas perilaku NXDOMAIN
jawaban.
Glosarium: