diff --git a/CHANGELOG.md b/CHANGELOG.md index e13190a..88e944c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,40 @@ Chezlepro n'en a qu'une. créée, 0 retirée. Le changement ne ferme rien — `REJECT` et `DROP` refusent tous deux, l'un répond. + +### Le REJECT est instantané — et c'est mon instrument qui disait le contraire + +J'avais présenté « 3,05 s » comme le signal d'un refus. **C'était faux, et l'exploitant a +eu raison de le contester** : un REJECT répond en microsecondes. Ces 3 secondes étaient +l'ARP qui abandonne pour une machine inexistante — aucun pare-feu n'était impliqué. + +Puis, sondé depuis l'hyperviseur, un port non déclaré a expiré à 8 s. La mesure qui tranche +n'est pas le délai mais le **compteur** : + +``` +compteur tcp-reset AVANT : 17 +sonde vers ops-01:9999 (non déclaré) → TimeoutError en 4,001 s +compteur tcp-reset APRÈS : 21 +``` + +**Quatre RST émis en quatre secondes**, un par retransmission du SYN. Le refus part +immédiatement, chaque fois. Ce qui manquait, c'était le retour : + +``` +ip route get 10.17.19.41 -> dev vrf_t17 src 10.17.21.1 +``` + +`10.17.21.1` est une **passerelle anycast**. Le RST revient au nœud qui porte cette adresse +dans le VRF, pas à la socket émettrice. *Troisième instrument fautif de la journée, et +celui-ci était déjà documenté — « anycast n'est pas une source de test ».* + +**Entre deux VM d'un tenant — le cas réel — la source est une adresse propre, et le +routage inter-zone ne la réécrit pas : le refus arrive instantanément.** L'artefact ne +vaut que depuis un hyperviseur. + +*Ce qui manque n'est donc pas dans le pare-feu, c'est une sonde qui rapporte l'errno et le +délai au lieu de les écraser dans un « échec ».* + make verifier : vert. make prouver : CONFORME, 53 OK, 0 echec, 0 saute. ## 2026-08-28 — L'insémination aboutit : un runner de tenant, né d'un runner de site