Zu diesem Thema gibt es einen RFC: RFC 2308 - Negatives Caching von DNS-Abfragen (DNS NCACHE) .
Der relevante zu lesende Abschnitt lautet 5 - Negative Antworten zwischenspeichern und lautet:
Negative Antworten haben wie normale Antworten eine Lebenszeit (TTL). Da es im Antwortabschnitt keinen Datensatz gibt, auf den diese TTL angewendet werden kann, muss die TTL nach einer anderen Methode übertragen werden. Dazu wird der SOA-Datensatz aus der Zone in den Autoritätsabschnitt der Antwort aufgenommen. Wenn der autorisierende Server diesen Datensatz erstellt, wird seine TTL aus dem Minimum des Felds SOA.MINIMUM und der TTL der SOA entnommen. Diese TTL verringert sich auf ähnliche Weise wie eine normale zwischengespeicherte Antwort und zeigt an, dass bei Erreichen von Null (0) die zwischengespeicherte negative Antwort NICHT mehr verwendet werden darf.
SOA.MINIMUM
Lassen Sie uns zunächst die im RFC beschriebene SOA-TTL identifizieren . Die TTL ist die Zahl vor dem Datensatztyp IN
( 900
Sekunden im folgenden Beispiel). Während das Minimum das letzte Feld im Datensatz ist ( 86400
Sekunden im folgenden Beispiel).
$ 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)
)
Schauen wir uns nun einige Beispiele an. Die serverfault.com
Zone ist veranschaulichend, da sie autorisierende Server von zwei verschiedenen Anbietern enthält, die unterschiedlich konfiguriert sind.
Hier finden Sie die maßgeblichen Nameserver für die serverfault.com
Zone:
$ 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.
Überprüfen Sie dann den SOA-Datensatz mit einem aws-Nameserver:
$ 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
Daraus können wir ersehen, dass die TTL des SOA-Datensatzes 900
Sekunden beträgt, während der negative TTL-Wert 86400
Sekunden beträgt . Der SOA-TTL-Wert von 900
ist niedriger, daher wird erwartet, dass dieser Wert verwendet wird.
Wenn wir nun einen autorisierenden Server nach einer nicht vorhandenen Domäne abfragen, sollten wir eine Antwort ohne Antwort und mit einem SOA-Datensatz im Abschnitt "Authority" erhalten:
$ 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
Wenn ein rekursiver (Caching-) Resolver diese Antwort erhält, analysiert er den SOA-Datensatz in AUTHORITY SECTION
und verwendet die TTL dieses Datensatzes, um zu bestimmen, wie lange das negative Ergebnis zwischengespeichert werden soll (in diesem Fall 900
Sekunden).
Gehen wir nun mit einem Google Nameserver genauso vor:
$ 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
Sie können sehen, dass die Google-Nameserver unterschiedliche Werte sowohl für die SOA-TTL- als auch für die Negative-TTL-Werte haben. In diesem Fall ist die negative TTL von 300
niedriger als die SOA-TTL von 21600
. Daher sollte der Google Server den niedrigeren Wert im AUTHORITY SECTION
SOA-Datensatz verwenden, wenn eine NXDOMAIN
Antwort zurückgegeben wird:
$ 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
Wie erwartet NXDOMAIN
beträgt die TTL des SOA-Datensatzes in der Antwort 300
Sekunden.
Das obige Beispiel zeigt auch, wie einfach es ist, unterschiedliche Antworten auf dieselbe Abfrage zu erhalten. Die Antwort, die ein einzelner Caching-Resolver verwendet, ist, welcher autorisierende Nameserver abgefragt wurde.
Bei meinen Tests habe ich auch festgestellt, dass einige rekursive (Caching-) Resolver AUTHORITY SECTION
für nachfolgende Anforderungen kein mit einem SOA-Datensatz mit einer dekrementierenden TTL zurückgeben, während andere dies tun.
Zum Beispiel der Cloudflare-Resolver (beachte den dekrementierenden TTL-Wert):
$ 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
Während der Standard-Resolver in einer AWS VPC nur bei der ersten Anforderung mit einem Berechtigungsabschnitt antwortet:
$ 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
Hinweis: Diese Antwort behandelt das Verhalten von NXDOMAIN
Antworten.
Glossar: