Usando NAT Traversal para conectar usuarios en modo pasivo

Este artigo é unha tradución gratuíta dunha das entradas en Blog de desenvolvedores de DC++.

Co permiso do autor (así como por claridade e interese), coloreino con ligazóns e complementei con algunha investigación persoal.

Introdución

Polo menos un usuario do par de conexión debe estar en modo activo neste momento. O mecanismo de atravesamento NAT será útil cando o modo activo non estea configurado a ningún lado. Isto xeralmente débese a que un firewall ou un dispositivo NAT bloquean as conexións entrantes.

Se ambos os clientes están en modo activo

O cliente iniciador envía un comando que contén o seu propio enderezo IP e porto $ConnectToMe a outro cliente. Usando estes datos, o cliente que recibiu o comando establece unha conexión co iniciador.

Se un dos clientes está en modo pasivo

A través do hub, un cliente pasivo A envía un comando $RevConnectToMe cliente activo Bque entón responde co comando $ConnectToMe.

Usando NAT Traversal para conectar usuarios en modo pasivo
Como servidor S no caso anterior hai un concentrador de CC

Se ambos os clientes están en modo pasivo activado Hub ADC

Clientes detrás de diferentes NAT A и B uniuse ao centro S.

Usando NAT Traversal para conectar usuarios en modo pasivo
Así se ve a conexión ao concentrador desde o lado do cliente A

O concentrador acepta conexións no porto 1511. Cliente A realiza conexións de saída desde a súa rede privada a través do porto 50758. O concentrador, á súa vez, ve o enderezo do dispositivo NAT, traballa con el e remíteo aos clientes segundo os seus identificadores.

Cliente A envía ao servidor S mensaxe solicitando axuda para conectarse cun cliente B.

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

Tamén en modo pasivo, o cliente B, ao recibir este comando, debe informar do seu porto privado utilizado para conectarse ao concentrador mediante NAT.

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

Despois de recibir esta información o cliente A inmediatamente tenta establecer unha conexión co cliente B e informa do seu propio porto privado.

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

Cal é o interese? O interese está en cambiar o punto final da mesma conexión creando unha nova conexión a un enderezo público a través dun porto privado xa usado.

Usando NAT Traversal para conectar usuarios en modo pasivo
Bingo!

Por suposto, neste caso o cliente NAT B ten todo o dereito a rexeitar a primeira solicitude de conexión dun cliente A, pero a súa propia solicitude apura ao "burato" creado por esta mesma conexión, e establécese a conexión.

Usando NAT Traversal para conectar usuarios en modo pasivo
Ilustración apta para todo o proceso coa advertencia de que protocolo non utiliza portos públicos abertos pola sesión NATS, así como enderezos privados.

Epílogo

No momento de escribir o artigo (orixinal), aproximadamente a metade dos clientes de DC están traballando en modo pasivo. Isto significa que non se poden facer unha cuarta parte de todas as conexións posibles.

Ademais DC++ poderá ignorar NATutilizando as conexións existentes AS и BS para establecer unha conexión directa cliente-cliente, aínda que A и B están en modo pasivo.

Fonte: www.habr.com

Engadir un comentario