Utiliser NAT Traversal pour connecter les utilisateurs en mode passif

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

Avec la permission de l'auteur (ainsi que par souci de clarté et d'intérêt), je l'ai colorié avec des liens et l'ai complété par quelques recherches personnelles.

introduction

Au moins un utilisateur de la paire de connexion doit être en mode actif à ce moment. Le mécanisme de traversée NAT sera utile lorsque le mode actif n'est configuré d'aucun côté. Cela est généralement dû à un pare-feu ou à un périphérique NAT bloquant les connexions entrantes.

Si les deux clients sont en mode actif

Le client initiateur envoie une commande contenant sa propre adresse IP et son propre port $ConnectToMe à un autre client. A l'aide de ces données, le client qui a reçu la commande établit une connexion avec l'initiateur.

Si l'un des clients est en mode passif

Via le hub, un client passif A envoie une commande $RevConnectToMe client actif Bqui répond ensuite avec la commande $ConnectToMe.

Utiliser NAT Traversal pour connecter les utilisateurs en mode passif
En tant que serveur S dans le cas ci-dessus il y a un hub DC

Si les deux clients sont en mode passif sur Centre ADC

Clients derrière différents NAT A и B rejoint le hub S.

Utiliser NAT Traversal pour connecter les utilisateurs en mode passif
Voici à quoi ressemble la connexion au hub du côté client A

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

Client A envoie au serveur S message demandant de l'aide pour se connecter avec un client B.

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

Également en mode passif, le client B, après avoir reçu cette commande, doit signaler 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 ces informations, le client A essaie immédiatement d'établir une connexion avec le client B et déclare son propre port privé.

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

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

Utiliser NAT Traversal pour connecter les utilisateurs en mode passif
Bingo!

Bien entendu, dans ce cas, le NAT client B a le droit de refuser la première demande de connexion d'un client A, mais sa propre demande s’engouffre dans le « trou » créé par cette même connexion, et la connexion s’établit.

Utiliser NAT Traversal pour connecter les utilisateurs en mode passif
Illustration adaptée à l'ensemble du processus, avec la mise en garde suivante : protocole n'utilise pas les ports publics ouverts par la session NATS, ainsi que des adresses privées.

Le final

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

Dans le futur DC++ pourra contourner NATen utilisant les connexions existantes AS и BS pour établir une connexion client-client directe, même si A и B sont en mode passif.

Source: habr.com

Ajouter un commentaire