8.8.8.9:5061
INVITE mTLS hermétique; ce pair n’est pas un carrier réel.
Signalisation carrier
Admission mTLS, routage de dialogue, frontières réseau et comportement de panne des deux cellules.
La cellule admet le carrier sur son interface publique, ancre le SDP localement et transmet à Asterisk sur loopback.
INVITE mTLS hermétique; ce pair n’est pas un carrier réel.
Admission publique, double Record-Route puis dialogue interne 5063.
SDP ancré sur 8.8.8.8, plage 10000-11000.
TLS loopback exact puis cycle Stasis answer/hangup.
Le chemin des paquets et la terminaison SRTP sont détaillés dans Média RTP.
Une identité valide sur une mauvaise interface reste refusée. Le DID est traduit vers un alias opaque généré, jamais vers une route arbitraire.
| Contrôle | Décision | Échec | Preuve |
|---|---|---|---|
| Transport / identité | TLS, certificat vérifié et CN carrier exact | 403 | mTLS local avec rôles/CA carrier et cellule séparés; pair sans certificat refusé |
| Intégrité SIP | Sanity, Max-Forwards et pike fixé à 12 requêtes par fenêtre de 2 s | 400, 483 ou 429 | Configuration seulement; seuil, CPS et bursts carrier non qualifiés |
| Service | DID allowlisté vers alias Stasis | 404 | Service inconnu et tentative outbound refusés en lab |
| Méthode | Profil inbound explicitement borné | 405 | Code; interop carrier absente |
Input, output et forwarding sont fermés par défaut. Chaque autorisation associe interface, CIDR, protocole et port.
| Plan | Flux admis | Interdits | Statut |
|---|---|---|---|
| Public carrier | SIP TLS 5061 depuis CIDR carrier | 5060, HTTP, TURN, SSH | Règles lab; carrier absent |
| Edge privé | 8089 depuis contrôle Navy | Exposition Internet | Contrat IaC; réseau absent |
| Management | SSH 22 via VPN/bastion, NTP 123 | Admin publique directe | Cible; VPN/BGP absent |
| Loopback cellule | SIP TLS 127.0.0.1:5062, NG UDP 127.0.0.1:22222 | Accès inter-cellule | Sockets exacts exercés dans un namespace partagé local |
La santé lie la politique canonique, ses permissions, le fichier rendu et les règles nft effectivement chargées.
Mode de configuration, SHA de la politique, SHA du fichier rendu et SHA de la table active sont testés séparément.
Le timer local n’écoute sur aucun socket et sa panne ne coupe pas un appel. La readiness n’est consommée par aucun carrier.
Kamailio, RTPEngine et Asterisk partagent le namespace réseau du lab; aucun port hôte, PSTN, cloud ou action externe n’est utilisé.
Le lab brut prouve un sous-ensemble précis du dialogue. Une route présente en code ne vaut toujours pas preuve pour les scénarios non exercés.
| Surface | Comportement actuel | Limite exacte |
|---|---|---|
| INVITE / ACK | Routes pour tout 1xx avec SDP et réponses finales; 1 re-INVITE offerless reçoit l’offre SDP 2xx puis une réponse SDP transformée dans ACK, avec compteur de succès. INITIAL_LATE_OFFER et REINVITE_LATE_OFFER vérifient ack-done avant toute mutation RTPEngine: un 2xx retransmis ne rouvre plus ack-answer. | Un ACK late-offer sans SDP est relayé après journalisation; un échec de transformation RTPEngine interrompt le chemin. Les deux cas restent sans teardown contrôlé ni preuve d’alarme. |
| Réponses finales | Production et lab chargent tmx.so. Les named onreply_route utilisent t_drop() pour une réponse finale invalide ou impossible à ancrer; le core drop n’arrêtait pas ces réponses finales. | Comportement prouvé dans les labs runtime et SBC locaux, pas avec un carrier ou un UAS externe. |
| PRACK / RFC 3262 | La campagne isolée du 29 août 2026 observe 7 PRACK: 1 RAck mal formé refusé localement en 400; 2 RAck bien formés mais non corrélés relayés au UAS sans mutation RTPEngine côté proxy; 1 PRACK corrélé sans answer SDP relayé; 1 PRACK d’acquittement sans SDP; 1 answer-in-PRACK; 1 offer-in-PRACK avec answer SDP dans le 2xx. La retransmission 183 cesse après le PRACK corrélé. | Les deux unmatched reçoivent un 200 Asterisk 22.9.0 vérifié sans corps SDP. Le SDP brut entrant peut néanmoins être accepté par l’UAS aval: contournement possible de l’ancrage RTPEngine côté aval. Le lab ne prouve jamais que l’UAS n’a pas muté son état. Le 200 au PRACK privé de l’answer attendue reste également un risque, pas un succès. |
| État offer/answer | Clé exacte Call-ID + orientation des tags + RSeq/CSeq, modes prack-answer / prack-offer, tombstone prack-done. Le late offer ACK est corrélé au CSeq puis devient ack-done idempotent. Pour l’appel initial, l’early offer sans answer est réinitialisée avant la final offer; tous les dialogues synthétiques drainent à zéro. | Une seule orientation active est stockée, jamais une copie reverse. Le cleanup et le delete RTPEngine essaient explicitement les deux orientations From/To. Seules les réponses 101-199 sont corrélées, pas 100; forks runtime et plusieurs 1xx fiables séquentiels restent non exercés. |
| re-INVITE / UPDATE | 3 re-INVITE: late offer, hold, reprise; 1 UPDATE SDP et 1 refresh offerless avec 2xx sans SDP; réponses reliable/late-offer/hold/reprise/UPDATE validées sur v/o/c/m/crypto, IP 172.31.93.20, ports 16000-16099 et directions recvonly/sendrecv | Aucun reset équivalent n’est appliqué au re-INVITE, car il pourrait tuer l’ancien média. Aucun RTP post-renégociation; rejet, glare ou timeout ne prouvent pas sa conservation. |
| Hold / reprise | 1 hold sendonly puis 1 reprise sendrecv traversent Kamailio | inactive, adresse nulle, changement codec/port et effet média non exercés |
| Session timers | timers=yes, Min-SE 90 s, expiration 1800 s; une requête RFC avec Session-Expires 30 et sans Min-SE invalide reçoit 422 + Min-SE 90, ACK même branche, puis le dialogue normal réussit | Rotation/refresher et expiration réelle de session non testées |
| CANCEL / échec / BYE | CANCEL inconnu = 481. L’appel exact-socket observe le double Record-Route 5063 / 5061; le BYE Asterisk repasse par Kamailio interne 8.8.8.8:5063 et revient sur la même connexion TLS carrier | Courses CANCEL/183/200/BYE, retransmissions et double cleanup non prouvés |
| REFER / INFO / REGISTER | Hors profil inbound | Transfert, DTMF INFO et enregistrement non acquis |
A et B sont deux domaines de panne complets sans état d’appel partagé ni bascule interne cross-cell.
Le retrait de la cible en échec et l’envoi vers l’autre IP dépendent du carrier.
La perte d’une cellule peut couper ses sessions. Aucun drain ou transfert à chaud n’est prouvé.
La perte simulée refuse un nouvel appel en lab; aucune route RTP centrale ne contourne la cellule.
DNS/SRV, causes, codecs, DTMF, forks, suites de 1xx fiables, timers, SRTP et anti-fraude restent à qualifier avec le carrier.
Les labs valident des comportements locaux ciblés. Le pair de test n’est ni un carrier réel, ni une preuve PSTN ou cloud.
Kamailio 6.0.7 accepte le rendu sous UID 1000 avec tmx.so. Les labs runtime et SBC passent avec t_drop(), tombstones ACK vérifiés avant média, 7 PRACK et sessions drainées à zéro.
mTLS 8.8.8.9:5061 vers 8.8.8.8:5061, Asterisk TLS 127.0.0.1:5062, NG 127.0.0.1:22222, SDP ancré et cycle ARI Stasis complet.
OpenTofu teste une cible mockée, pas l’API Scaleway.
Le lab exact-socket ne prouve aucun RTP bidirectionnel sur ce même appel. Carrier/PSTN/cloud, forks, plusieurs 1xx fiables séquentiels, ancien média sur rejet/glare, reset sûr après re-INVITE, teardown ACK-SDP, timers réels, courses CANCEL/200/BYE et RTP après chaque renégociation restent non prouvés.
La matrice complète est dans Preuves, décisions et risques.