Uso de NAT Traversal para conectar usuarios en modo pasivo

Este artículo es una traducción libre de una de las publicaciones en el blog de los desarrolladores de DC++.

Con el permiso del autor (y también para mayor claridad e interés), lo he enriquecido con enlaces y he añadido algunas reflexiones personales.

Introducción

Actualmente, al menos un usuario de la pareja que se conecta debe estar en modo activo. El mecanismo de «bypass» NAT será útil en casos donde el modo activo no se ha configurado en ninguno de los dos lados. Esto normalmente sucede debido a la restricción de conexiones entrantes por un cortafuegos o por el dispositivo NAT.

Si ambos clientes están en modo activo

El cliente iniciador envía un comando que contiene su propia dirección IP y puerto $ConnectToMe al otro cliente. Usando esta información, el cliente que recibe el comando establece una conexión con el iniciador.

Si uno de los clientes está en modo pasivo

A través del hub, el cliente pasivo A envía el comando $RevConnectToMe al cliente activo B, que luego responde con el comando $ConnectToMe.

Uso de NAT Traversal para conectar usuarios en modo pasivo
Como servidor S en el caso anterior actúa el hub DC

Si ambos clientes están en modo pasivo en el hub ADC

Los clientes detrás de diferentes NAT A y B se han unido al hub S.

Uso de NAT Traversal para conectar usuarios en modo pasivo
Así es como la conexión al hub se ve desde el lado del cliente A

El hub acepta conexiones en el puerto 1511. El cliente A realiza conexiones salientes desde su red privada a través del puerto 50758. El hub, a su vez, ve la dirección del dispositivo NAT, trabaja con ella y transmite a los clientes de acuerdo con sus identificadores.

Cliente A envía al servidor S un mensaje solicitando ayuda para conectarse con el cliente B.

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

También estando en modo pasivo, el cliente B, al recibir este comando, debe informar su puerto privado que se utiliza para conectarse al hub a través de NAT.

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

Después de recibir esta información, el cliente A intenta inmediatamente establecer una conexión con el cliente B y comunica su propio puerto privado.

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

¿Cuál es el interés? El interés radica en desplazar el punto final de la misma conexión creando una nueva conexión a una dirección pública a través del puerto privado ya utilizado.

Uso de NAT Traversal para conectar usuarios en modo pasivo
¡Bingo!

Sin duda, en este proceso el NAT del cliente B tiene todo el derecho de rechazar la primera solicitud de conexión del cliente A, pero ya su propia solicitud se dirige a la «agujero» creado por esa misma conexión, y la conexión se establece.

Uso de NAT Traversal para conectar usuarios en modo pasivo
Ilustración adecuada para todo el proceso con la salvedad de que el protocolo no utiliza puertos públicos abiertos por la sesión NAT‒S, así como direcciones privadas.

Epílogo

En el momento de la escritura (original) del artículo, aproximadamente la mitad de los clientes de DC están funcionando en modo pasivo. Esto significa que una cuarta parte de todas las posibles conexiones no puede ser establecida.

En adelante DC++ podrá «saltar» NAT, utilizando conexiones existentes A‒S y B‒S para establecer una conexión directa cliente-cliente, incluso si A y B están en modo pasivo.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster