Utilisation de NAT Traversal pour connecter les utilisateurs de manière passive

Cet article est une traduction gratuite de l'une des entrées du blog des développeurs DC ++ .

Avec la permission de l'auteur (ainsi que pour des raisons de clarté et d'intérêt, pour le bien), je l'ai épanoui avec des liens et ajouté quelques recherches personnelles.


Introduction

Actuellement, au moins un utilisateur d'une paire d'utilisateurs connectés doit être en mode actif. Le mécanisme de «contournement» NAT sera utile si le mode actif n'est configuré sur aucun côté. Cela se produit généralement car le pare-feu ou le périphérique NAT entrant bloque les connexions entrantes.

Si les deux clients sont en mode actif, le client initiateur envoie la

commande $ ConnectToMe contenant sa propre adresse IP et son propre port à un autre client. À l'aide de ces données, le client recevant la commande établit une connexion avec l'initiateur.

Si l'un des clients est en mode passif

Au moyen du concentrateur, le client passif A envoie la commande $ RevConnectToMe au client actif Bqui répond ensuite avec la commande $ ConnectToMe.


Comme le serveur S dans le cas des actes ci - dessus hub DC

Si les deux clients en mode passif, le hub ADC

situé derrière différents clients NAT A et B se sont joints au moyeu S .


Ainsi, la connexion au concentrateur regarde du côté client A. Le

concentrateur accepte les connexions sur le port 1511. Le client A établit les connexions sortantes de son réseau privé via le port 50758. Le concentrateur, à son tour, voit l'adresse du périphérique NAT, travaille avec lui et diffuse les clients en fonction de leurs identifiants.

Le client A envoie au serveur Sun message demandant de l'aide pour se connecter avec le client Bed and . Etant également en mode passif, le client B , ayant reçu cette commande, doit renseigner son port privé utilisé pour se connecter au concentrateur via NAT. Après avoir reçu ces informations, le client A essaie immédiatement d'établir une connexion avec le client B et signale son propre port privé.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991



Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991



Hub: [Outgoing][178.79.159.147:1511] DRNT AAAA BBBB ADCS/0.10 50758 1649612991

Quel est l'intérêt? L'intérêt est de déplacer le point de terminaison de la même connexion en créant une nouvelle connexion à une adresse publique via le port privé déjà utilisé.


Bingo!

Bien sûr, en même temps, le NAT du client B a le droit de rejeter la première demande de connexion du client A , mais sa propre demande se précipite déjà dans le «trou» créé par cette connexion, et la connexion est établie.


Illustration adaptée à l'ensemble du processus avec la mise en garde que le protocole n'utilise pas les ports publics ouverts par la session NAT - S , ainsi que les adresses privées.

Épilogue

Au moment de la rédaction de l'article (original), environ la moitié des clients DC sont passifs. Cela signifie qu'un quart de toutes les connexions possibles ne peuvent pas être établies.

À l'avenir, DC ++ pourra «contourner» NATutiliser les connexions A - S et B - S existantes pour établir une connexion client - client directe, même si A et B sont en mode passif.

All Articles