Si un serveur DNS recherche un enregistrement et qu'il est manquant, il "cache" négativement le fait que cet enregistrement est manquant et n'essaye pas de le rechercher à nouveau pendant un certain temps. Je ne vois rien dans le RFC sur le TTL sur la mise en cache négative devrait être, donc je suppose que c'est Dans le monde réel, combien de temps ces enregistrements négatifs restent-ils?
Le TTL pour la mise en cache négative n'est pas arbitraire. Il est extrait de l'enregistrement SOA en haut de la zone à laquelle l'enregistrement demandé aurait appartenu, avait par exemple:
example.org. IN SOA master-ns1.example.org. Hostmaster.example.org. (
2012091201 43200 1800 1209600 86400 )
La dernière valeur de l'enregistrement SOA ("86400") est la durée pendant laquelle les clients sont invités à mettre en cache les résultats négatifs sous example.org.
.
Si un client demande doesnotexist.example.org.
, il mettra en cache le résultat pendant 86400 secondes.
Cela dépend de votre définition exacte d'une "requête négative", mais dans les deux cas, cela est documenté dans rfc2308 "Mise en cache négative des requêtes DNS (DNS NCACHE)" :
NXDOMAIN
NXDOMAIN
, la réponse sera accompagnée d'un enregistrement SOA
, qui contiendrait le NXDOMAIN
TTL (traditionnellement appelé champ MINIMUM
). rfc2308#section-4
SERVFAIL
Si la résolution échoue et entraîne un délai d'attente (SERVFAIL
) , alors elle peut tout aussi bien ne pas être mise en cache du tout, et dans tous les cas NE DOIT PAS être mise en cache plus longtemps que 5 minutes. rfc2308#section-7.1
Notez qu'en pratique, la mise en cache de tels résultats pendant les 5 minutes autorisées est un excellent moyen de diminuer l'expérience d'un client si son serveur de cache souffre parfois de brefs problèmes de connectivité (et le rend effectivement vulnérable à une amplification par déni de service, où quelques secondes d'arrêt entraîneraient l'arrêt de certaines parties du DNS pendant les cinq minutes complètes).
Avant BIND 9.9.6-S1 (sorti en 2014), apparemment, SERVFAIL
n'était pas du tout mis en cache. a878301
(2014-09-04)
Par exemple, au moment de votre question et dans toutes les versions de BIND publiées avant 2014, le résolveur récursif BIND DID PAS en cache du tout SERVFAIL
, si la validation ci-dessus et - la documentation sur la première introduction dans 9.9.6-S1 est à croire.
Dans la dernière version de BIND, la valeur par défaut servfail-ttl
est 1s
, et le paramètre est codé en dur pour un plafond de 30s
(à la place du plafond RFC de 300s
). 90174e6
(2015-10-17)
En outre, voici quelques citations importantes à ce sujet:
Le résultat de la mise en cache des réponses SERVFAIL a inclus certaines situations où cela a été perçu comme étant préjudiciable à l'expérience client, en particulier lorsque les causes de la SERVFAIL présentée au client étaient transitoires et à partir d'un scénario où une nouvelle tentative immédiate de la requête serait un action plus appropriée.
La deuxième tactique consiste à affirmer que les clients DNS répandus feront quelque chose de particulièrement mauvais lorsqu'ils ne pourront pas atteindre tous les serveurs DNS. Le problème avec cet argument est que la déclaration est fausse. Un tel client est clairement bogué et ne pourra pas survivre sur le marché: réfléchissez à ce qui se passe si les routeurs du client tombent brièvement en panne ou si le réseau du client est temporairement inondé.
En résumé, une réponse NXDOMAIN
serait mise en cache comme spécifié dans le SOA
de la zone applicable, tandis que SERVFAIL
est peu susceptible d'être mis en cache, ou, s'il est mis en cache, ce sera au plus un nombre à deux chiffres de secondes.
Il existe une RFC dédiée à ce sujet: RFC 2308 - Mise en cache négative des requêtes DNS (DNS NCACHE) .
La section pertinente à lire est 5 - Mise en cache des réponses négatives qui indique:
Comme les réponses normales, les réponses négatives ont un temps à vivre (TTL). Comme il n'y a aucun enregistrement dans la section réponse auquel ce TTL peut être appliqué, le TTL doit être effectué par une autre méthode. Ceci est fait en incluant le SOA enregistrement de la zone dans la section d'autorité de la réponse. Lorsque le serveur faisant autorité crée cet enregistrement, son TTL est pris à partir du minimum de SOA.MINIMUM et TTL de SOA. Ce TTL décroît de manière similaire à une réponse en cache normale et en atteignant zéro (0) indique que la réponse négative en cache NE DOIT PAS être utilisée à nouveau.
Permet d'abord d'identifier le SOA.MINIMUM
et SOA TTL décrit dans le RFC. Le TTL est le nombre avant le type d'enregistrement IN
(900
secondes dans l'exemple ci-dessous). Alors que le minimum est le dernier champ de l'enregistrement (86400
secondes dans l'exemple ci-dessous).
$ 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)
)
Voyons maintenant quelques exemples, le serverfault.com
zone est illustrative car elle possède des serveurs faisant autorité de deux fournisseurs différents qui sont configurés différemment.
Permet de trouver les serveurs de noms faisant autorité pour le 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.
Vérifiez ensuite l'enregistrement SOA à l'aide d'un serveur de noms 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
De cela, nous pouvons voir que le TTL de l'enregistrement SOA est 900
secondes tandis que la valeur négative TTL est 86400
secondes. La valeur SOA TTL de 900
est plus faible, nous nous attendons donc à ce que cette valeur soit utilisée.
Maintenant, si nous interrogeons un serveur faisant autorité pour un domaine inexistant, nous devrions obtenir une réponse sans réponse et avec un enregistrement SOA dans la section autorité:
$ 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
Lorsqu'un résolveur récursif (mise en cache) reçoit cette réponse, il analysera l'enregistrement SOA dans le AUTHORITY SECTION
et utilisez le TTL de cet enregistrement pour déterminer combien de temps il doit mettre en cache le résultat négatif (dans ce cas 900
secondes).
Permet maintenant de suivre la même procédure avec un serveur de noms 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
Vous pouvez voir que les serveurs de noms Google ont des valeurs différentes pour les valeurs SOA TTL et Negative TTL. Dans ce cas le négatif TTL de 300
est inférieur à SOA TTL of 21600
. Par conséquent, le serveur Google doit utiliser la valeur inférieure dans le AUTHORITY SECTION
SOA lors du renvoi d'une réponse NXDOMAIN
:
$ 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
Comme prévu, le TTL de l'enregistrement SOA dans la réponse NXDOMAIN
est 300
secondes.
L'exemple ci-dessus montre également à quel point il est facile d'obtenir des réponses différentes à la même requête. La réponse qu'un résolveur de mise en cache individuel finit par utiliser est à laquelle le serveur de noms faisant autorité a été interrogé.
Lors de mes tests, j'ai également observé que certains résolveurs récursifs (mise en cache) ne renvoient pas de AUTHORITY SECTION
avec un enregistrement SOA avec une décrémentation TTL pour les demandes ultérieures, contrairement aux autres).
Par exemple, le résolveur cloudflare fait (notez la décrémentation TTL):
$ 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
Alors que le résolveur par défaut dans un AWS VPC ne répondra avec une section d'autorité qu'à la première demande:
$ 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
Remarque: Cette réponse traite du comportement des réponses NXDOMAIN
.
Glossaire: