UDP hole punchingL' UDP hole punching est une technique communément utilisée dans les systèmes utilisant un système de translation d'adresses (NAT) afin de faire communiquer, par UDP (User Datagram Protocol), deux machines se trouvant sur des réseaux privés différents.
L'UDP hole punching établit la connectivité entre deux hôtes communiquant à travers un ou plusieurs traducteurs d'adresses. Généralement, un hôte tiers présent sur le réseau public est utilisé pour établir les numéros de ports réseau qui seront utilisés pour une communication directe entre les hôtes privés. Une fois que la communication a été établie, l'état des serveurs NAT est maintenu par un trafic de communication normal, ou en absence d'un tel trafic, par des paquets keep-alive (consistant généralement en paquets UDP vides ou en paquets ayant un contenu minimal). FonctionnementL'UDP hole punching est une méthode pour établir une communication UDP bidirectionnelle, à travers Internet, entre deux hôtes situés dans des réseaux privés. Cette technique n'est pas applicable dans tous les scénarios ou avec tous les types de NAT. Rappel sur le NATPlusieurs types de NAT existent. Dans l'explication suivante nous prendrons comme cas le NAT dynamique masquerading. Le NAT permet aux machines d'un réseau privé d'établir des connexions sortantes vers Internet avec une seule adresse IP publique, l'adresse de la machine NAT. Pour ce faire le NAT va maintenir un suivi des connexions démarrées par les machines du réseau privé et au tuple d'adresses IP et de port réseau, source puis destination, (IP1, P1, IPdst, Pdst) va faire correspondre le tuple (EIP, EPX, IPdst, Pdst). Lorsque la machine contactée va répondre elle répondra avec le tuple (IPdst, Pdst, EIP, PX).
Au passage du premier paquet UDP de M1 vers Malpha le NATA enregistrera dans ses connexions ouvertes le fait qu'il attend un retour. Au passage du premier paquet UDP de Malpha vers M1 à travers le NATB, ce dernier enregistrera cette connexion comme en cours d'ouverture et attendra un retour. À ce point là les NAT/Firewall auront été poinçonnés (traduction littérale de Hole Punching) et permettront donc le dialogue entre M1 et Malpha
Les machines M1 et Malpha doivent donc trouver un moyen de s'échanger ces informations. Echanges d'informationLes hôtes se trouvant sur réseau privé et accédant à Internet par un NAT utilisent généralement la méthode STUN (Session Traversal Utilities for NAT) ou ICE (Interactive Connectivity Establishment (en)) pour déterminer l'adresse publique du serveur NAT de l'autre bout de la communication. Dans le processus d'UDP Hole punching on utilise un serveur de rendez-vous S, sur le réseau public, pour échanger les informations nécessaires à la communication directe entre les deux pairs.
Le NAT enregistre ensuite le fait qu'il y ait eu l'envoi d'un premier paquet vers l'hôte distant et permettra la réception de tout paquet ayant l'adresse IP et le port de l'hôte distant. Maintien de connexionSur un serveur NAT, l'état d'une communication UDP expire après une certaine période, quelques dizaines de secondes généralement[2], le UDP hole punching ré-envoie donc périodiquement des paquets keep-alive pour s'assurer de la mise à jour des compteurs de la machine d'état du NAT et ainsi l'empêcher de clore la communication. LimitationsL'UDP hole punching ne marche pas avec machines faisant du symmetric NAT (en) (aussi appelé NAT bi-directionnel) qui se retrouve fréquemment dans les réseaux de grosses entreprises. Le Firewall du serveur NAT doit rejeter l'ouverture de connexion depuis l'extérieur sinon ce premier flux prendra le port prévu et les flux sortant du NAT en provenance de la Machine privée seront contraint de prendre un port différent, cassant le mécanisme de Hole Punching. Etapes de la mise en place du Hole PunchingSoient M1 et Malpha, deux hôtes, chacun sur son propre réseau privé; Soient NATA et NATB les deux routeurs NAT avec des adresses publiques respectives EIPA et EIPB; Soit S est un serveur public avec une adresse IP publique connue.
Voir également
Références
Liens externes
Information related to UDP hole punching |