fix(monitoring) : la sonde DNS interrogeait le seul nom qui marchait encore #36
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/dns-recursion-probe"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
La sonde du résolveur anycast demandait
thystips.dn42 SOA— notre propre zone, servie par unestub-zonequi pointe sur nos propres serveurs autoritatifs, sur nos propres loopbacks. Y répondre n'emprunte aucun des chemins par lesquels un résolveur récursif peut tomber.Mesuré le 12/08/2026 : deux des quatre résolveurs répondaient NOERROR à cette question et SERVFAIL à tout autre nom DN42, en annonçant la VIP anycast.
dn42_dns_probe_successvalait 1 sur les quatre.Ce que la PR ajoute
dn42_dns_recursion_success, qui pose une question que rien de local ne peut satisfaire :dn42., hors de notre zone — y répondre exige de joindre les serveurs de délégation ;recursive: truese déclare dansanycast.ymlplutôt que de se déduire du nom, pour la même raison queports: la boucle teste une propriété.Vérification
Les deux branches éprouvées sur fr-rbx2 :
Déployée sur les quatre nœuds,
changed=0au second passage.⚠ Ce que cette PR ne corrige pas
Le défaut que la sonde existe pour voir. Le
/64de services est partagé par les deux nœuds d'un site et annoncé par les deux, donc la réponse à un flux sortant d'un conteneur peut atterrir sur le nœud voisin, qui n'a pas l'entrée de conntrack et la jette surdrop "DN42 does not reach containers".Le commentaire de cette règle énonce l'hypothèse, et c'est elle qui est fausse : « le retour revient en
established, accepté tout en haut de la chaîne » — vrai seulement si le retour revient sur le même nœud.Le symptôme est par destination et intermittent, ce qui explique qu'il ait vécu inaperçu : Unbound a six serveurs de délégation et s'en sort tant qu'un seul reste joignable. Le correctif retenu est un
/64par nœud pour les conteneurs, et c'est le chantier suivant.🤖 Generated with Claude Code
https://claude.ai/code/session_01FGwvXLVXJ2PrRFwJTB3Xp9
`dns-metrics.sh` demandait `thystips.dn42 SOA` aux deux services anycast. Pour l'autoritatif c'est la bonne question. Pour le RÉSOLVEUR c'était la seule qu'il ne fallait pas poser : notre zone est servie par une `stub-zone` qui pointe sur nos propres serveurs autoritatifs, sur nos propres loopbacks — donc y répondre n'emprunte aucun des chemins par lesquels un résolveur récursif peut tomber. MESURÉ le 12/08/2026 : deux des quatre résolveurs répondaient NOERROR à cette question et SERVFAIL à tout autre nom DN42, en annonçant la VIP anycast pendant ce temps. `dn42_dns_probe_success` valait 1 sur les quatre. D'où `dn42_dns_recursion_success`, qui pose une question que rien de local ne peut satisfaire : - un nom sous `dn42.`, hors de notre zone : y répondre EXIGE de joindre les serveurs de délégation ; - un label aléatoire, donc jamais servi par le cache — une réponse en cache prouve que le chemin marchait la dernière fois, ce qui est le contraire d'une sonde ; - NXDOMAIN compte comme un SUCCÈS, et c'est le résultat attendu : la question n'est pas « ce nom existe-t-il » mais « la délégation a-t-elle répondu ». SERVFAIL et le silence sont les deux échecs. Les deux branches sont éprouvées sur fr-rbx2 : NXDOMAIN → 1, adresse muette → 0. `recursive: true` se DÉCLARE dans anycast.yml plutôt que de se déduire du nom du service, pour la même raison que `ports` : la boucle teste une propriété, donc un second résolveur l'obtient en le disant. ⚠ CE QUE CETTE PR NE CORRIGE PAS. Le défaut que la sonde existe pour voir est toujours là : le `/64` de services est partagé par les deux nœuds d'un site et annoncé par les deux, donc la réponse à un flux sortant d'un conteneur peut atterrir sur le nœud VOISIN, qui n'a pas l'entrée de conntrack et jette sur `drop "DN42 does not reach containers"`. Le commentaire de cette règle énonce l'hypothèse fausse : « le retour revient en established ». Vrai seulement si le retour revient sur le MÊME nœud. Capture à l'appui dans la conversation. Le correctif retenu est un /64 par nœud, et il fait l'objet du chantier suivant. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FGwvXLVXJ2PrRFwJTB3Xp9