Traversée NAT
Les appels vocaux, les appels vidéo, les jeux peer-to-peer et les outils de bureau à distance doivent tous connecter deux appareils situés derrière des NAT différents – aucun des deux n'a d'adresse IP publique accessible. La traversée NAT est l'ensemble des techniques qui font que cela fonctionne : STUN, TURN, ICE, perforation. Les mécanismes expliquent pourquoi certains appels fonctionnent directement et d'autres rebondissent via des serveurs relais.
Le corps complet de l’article est fourni en anglais ci-dessous.
NAT est l'ensemble de techniques qui permettent à deux appareils derrière des NAT distincts d'établir des connexions directes. Sans cela, les protocoles peer-to-peer dépendent entièrement des serveurs relais, ce qui ajoute du coût et de la latence. Grâce à lui, deux téléphones derrière des routeurs domestiques peuvent communiquer directement sur Internet pendant la majeure partie de la durée de vie de la connexion.
Le problème de base
NAT (voir notre article NAT) traduit les connexions sortantes d'adresses IP privées vers une adresse IP publique partagée. Les connexions entrantes sans mappage existant n'ont pas de destination : le NAT ne sait pas vers quel périphérique interne transférer. Deux appareils NAT ne peuvent pas établir de connexions entre eux ; les deux doivent être l'auteur.
STUN : "à quoi ressemble mon adresse IP publique ?"
STUN (Session Traversal Utilities for NAT), RFC 5389, est un protocole simple qui permet à un appareil de découvrir son mappage IP/port public. L'appareil envoie une requête STUN à un serveur STUN public ; le serveur répond avec l'adresse source qu'il a observée (qui est le mappage externe du NAT). Les serveurs
STUN sont sans état et libres d'exécution. Google exploite stun.l.google.com:19302 ; il en existe bien d’autres. Le coût d'exécution d'un tel système est négligeable car l'échange de protocole est minuscule.
Le modèle de parcours NAT le plus simple
Pour deux appareils A et B derrière les NAT :
- A interroge STUN et apprend que son mappage public est X.
- B interroge STUN et apprend que son mappage public est X. Y.
- A et B échangent ces adresses via un canal de signalisation (hors bande, comme un websocket via le serveur de l'application).
- A commence à envoyer des paquets à Y ; B commence à envoyer à X.
- Les deux NAT voient les paquets sortants vers l'adresse de l'autre, créent les mappages nécessaires, et à partir de là, les paquets entrants vers ces mappages sont transmis en interne.
- Le chemin direct A vers B fonctionne désormais.
Il s'agit de hole punching. Cela fonctionne lorsque les deux NAT sont raisonnablement permissifs (à cône plein ou à cône restreint). La perforation fonctionne facilement.
Les NAT symétriques sont courants dans les déploiements NAT de niveau opérateur et dans certains pare-feu d'entreprise. Les homologues derrière des NAT symétriques ne peuvent souvent pas se connecter directement ; ils ont besoin d'un relais.
TURN : lorsque la perforation échoue
TURN (Traversal Using Relays around NAT), RFC 5766, est la solution de secours. Lorsqu'une connexion directe n'est pas possible, les deux homologues se connectent à un serveur TURN, qui relaie le trafic entre eux. Les serveurs TURN voient tout le trafic multimédia – un coût de bande passante nettement plus élevé que STUN.
Pour les services d'appel vidéo (Zoom, Google Meet), l'exécution de serveurs TURN représente une dépense opérationnelle majeure. Les estimations suggèrent que 15 à 30 % des appels utilisent des relais TURN malgré les efforts visant à maximiser les connexions directes.
ICE : combinant tout
ICE (établissement de connectivité interactive), RFC 8445, est le cadre qui utilise STUN, TURN et la connectivité directe ensemble. Le processus :
- Chaque homologue rassemble toutes les adresses candidates : interfaces locales, mappages publics découverts par STUN, réservations de relais TURN.
- Les pairs échangent des listes de candidats complètes via la signalisation.
- Chaque homologue tente de se connecter à toutes les combinaisons de candidats distants.
- La première combinaison de travail devient la connexion active. Le direct est préféré au relayé ; latence inférieure par rapport à supérieure.
- La connexion peut être réévaluée en cours d'appel si les conditions changent.
WebRTC utilise ICE pour les connexions de navigateur peer-to-peer. Consultez notre article WebRTC. La plupart des protocoles P2P modernes utilisent ICE ou quelque chose de similaire.
Perforation UDP vs perforation TCP
XPLZ1La perforation UDP est simple (et est la valeur par défaut pour la plupart des cas d'utilisation de traversée NAT). La perforation TCP est beaucoup plus difficile car TCP nécessite une négociation synchronisée ; les deux côtés doivent établir des connexions simultanément et les NAT doivent autoriser l'état résultant. Certains NAT le prennent en charge ; beaucoup ne le font pas. La plupart du trafic P2P nécessitant un transport fiable utilise des protocoles basés sur UDP (QUIC, couches de fiabilité UDP personnalisées) plutôt que TCP.NAT64 et IPv6
IPv6 n'ont pas besoin de NAT : chaque appareil possède une adresse routable globalement. Théoriquement, IPv6 élimine la traversée NAT. En pratique, un déploiement IPv6 partiel signifie que certains points de terminaison sont uniquement IPv4 derrière NAT, d'autres sont directement accessibles en IPv6 et NAT64/DNS64 effectue la traduction entre eux. Le résultat est des décisions de routage plus complexes, mais des connexions directes généralement plus faciles pour les points de terminaison compatibles IPv6.
Ce que cela signifie pour les utilisateurs
Vous ne pensez généralement pas à la traversée NAT : les applications le gèrent. Les effets visibles :
- Les appels vidéo fonctionnent correctement sur les réseaux domestiques (généralement directs ou quasi-directs)
- Les appels derrière les pare-feu d'entreprise se dégradent parfois parce que le trafic passe par TURN
- Les appels sur les réseaux mobiles ont parfois des problèmes car les NAT des opérateurs sont souvent symétriques
- Le matchmaking de jeux P2P est plus fiable sur certains réseaux que autres
Pour les utilisateurs exécutant leurs propres services : l'évolution vers IPv6 et la réduction progressive du déploiement NAT symétrique ont rendu la traversée NAT moins pénible au cours de la dernière décennie.
Questions fréquemment posées
- Pourquoi mes appels vidéo sont-ils parfois connectés via un serveur ?
- La configuration de votre réseau empêchait la connexion directe entre homologues – généralement un NAT symétrique ou un pare-feu restrictif. L'appel revient au relais TURN. La latence augmente légèrement ; l'appel fonctionne toujours.
- Qu’est-ce que le NAT à cône plein ou symétrique ?
- Le cône complet conserve le même mappage externe pour toutes les destinations à partir d'un port interne donné. Symmetric utilise différents ports externes pour différentes destinations. Symmetric est plus restrictif et interrompt la plupart des traversées P2P.
- La traversée NAT peut-elle constituer un risque pour la sécurité ?
- La perforation ouvre des ports externes spécifiques à des homologues spécifiques. Effectué correctement, c'est sûr : le mappage est initié par votre trafic et n'autorise que l'homologue spécifique. Des erreurs de configuration ou des perforations universelles (UPnP ayant mal tourné) peuvent ouvrir un accès involontaire.
- Pourquoi IPv6 n’en a-t-il pas besoin ?
- IPv6 a tellement d'adresses que chaque appareil en obtient une qui soit routable à l'échelle mondiale. NAT devient inutile ; la traversée devient un non-problème. Le défi est que le déploiement mixte IPv4/IPv6 maintient le besoin de traversée NAT dans la partie IPv4.
- Quelle est la différence entre STUN et TURN ?
- STUN vous indique simplement votre cartographie publique ; vous essayez ensuite la connexion directe. TURN relaie en fait le trafic lorsque la connexion directe échoue. STUN est bon marché (petit échange de protocole) ; TURN est cher (relais toute la bande passante multimédia).