Cet article est une libre traduction d'un des billets sur .
Avec l'autorisation de l'auteur (et également pour la clarté et l'intérêt), je l'ai enrichi de liens et complété avec certaines de mes propres recherches.
Introduction
Actuellement, au moins un utilisateur des deux connectés doit être en mode actif. Le mécanisme de contournement NAT sera utile lorsque le mode actif n'est configuré pour aucun des deux. Cela se produit généralement en raison du blocage des connexions entrantes par un pare-feu ou un appareil NAT.
Si les deux clients sont en mode actif
Le client initiateur envoie une commande contenant son propre adresse IP et port à l'autre client. En utilisant ces données, le client qui a reçu la commande établit la connexion avec l'initiateur.
Si l'un des clients est en mode passif
Par l'intermédiaire du hub, le client passif A envoie la commande au client actif B, qui répond alors avec la commande $ConnectToMe.

En tant que serveur S dans le cas ci-dessus, le hub DC
Si les deux clients sont en mode passif sur
Les clients derrière différents NAT A et B se sont connectés au hub S.

Ainsi, la connexion au hub apparaît du point de vue du client A
Le hub accepte les connexions sur le port 1511. Le client A effectue des connexions sortantes de son réseau privé via le port 50758. Le hub, quant à lui, voit l'adresse de l'appareil NAT, interagit avec lui et transmet aux clients en fonction de leurs identifiants.
Client A envoie au serveur S un message lui demandant d'aider à se connecter au client B.
Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991
Étant également en mode passif, le client B, après avoir reçu cette commande, doit communiquer son port privé utilisé pour se connecter au hub via NAT.
Hub : [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991
Après avoir reçu cette information, le client A essaie immédiatement d'établir une connexion avec le client B et indique son propre port privé.
Hub: [Outgoing][178.79.159.147:1511] D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991Quel est l'intérêt ? L'intérêt réside dans le déplacement du point final de la même connexion en créant une nouvelle connexion à l'adresse publique via un port privé déjà utilisé.

Bingo !
Bien sûr, le NAT du client B a tout à fait le droit de refuser la première demande de connexion du client A, mais sa propre demande s'engouffre dans le « trou » créé par cette connexion, et la connexion est établie.

Une illustration appropriée pour tout le processus, sous réserve que n'utilise pas de ports publics, ouverts par session NAT‒S, ainsi que des adresses privées.
Épilogue
Au moment de la rédaction de l'article (original), environ la moitié des clients de DC fonctionnent en mode passif. Cela signifie qu'un quart de toutes les connexions possibles ne peut pas être établi.
Par la suite , en utilisant les connexions existantes A‒S et B‒S pour établir une connexion directe client à client, même si A et B ils sont en mode passif.
Source : habr.com
