Uso de NAT Traversal para conectar usuarios pasivamente

Este artículo es una traducción gratuita de una de las entradas del blog para desarrolladores de DC ++ .

Con el permiso del autor (así como en aras de la claridad y el interés, en aras del bien) lo florecí con enlaces y agregué algunas investigaciones personales.


Introducción

Actualmente, al menos un usuario de un par de usuarios conectados debe estar en modo activo. El mecanismo de "derivación" NAT será útil si el modo activo no está configurado en ninguno de los lados. Esto suele suceder porque el firewall entrante o el dispositivo NAT bloquea las conexiones entrantes.

Si ambos clientes están en modo activo, el Cliente iniciador envía el

comando $ ConnectToMe que contiene su propia dirección IP y puerto a otro cliente. Con estos datos, el cliente que recibe el comando establece una conexión con el iniciador.

Si uno de los clientes está en modo pasivo

Por medio del concentrador, el cliente pasivo A envía el comando $ RevConnectToMe al cliente activo Bque luego responde con el comando $ ConnectToMe.


Como el servidor S en el caso de las anteriores actúa centro de CC

Si los dos clientes en un modo pasivo, el centro de ADC

se encuentra detrás de los diferentes clientes NAT A y B se unieron al cubo S .


Por lo tanto, la conexión al concentrador se ve desde el lado del cliente A. El

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

El cliente A envía al servidor Sun mensaje pidiendo ayuda para conectarse con la cama del cliente y . Al estar también en modo pasivo, el cliente B , después de recibir este comando, debe informar su puerto privado utilizado para conectarse al concentrador a través de NAT. Después de recibir esta información, el cliente A intenta inmediatamente establecer una conexión con el cliente B e informa su propio puerto privado.

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

Cual es el interes El interés está en cambiar 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.


¡Bingo!

Por supuesto, al mismo tiempo, el NAT del cliente B tiene el derecho total de rechazar la primera solicitud de conexión del cliente A , pero su propia solicitud ya se precipita en el "agujero" creado por esta conexión, y la conexión se establece.


Ilustración adecuada para todo el proceso con la advertencia de que el protocolo no utiliza puertos públicos abiertos por la sesión NAT - S , así como direcciones privadas.

Epílogo

Al momento de escribir el artículo (original), aproximadamente la mitad de los clientes de DC son pasivos. Esto significa que una cuarta parte de todas las conexiones posibles no se pueden hacer.

En el futuro, DC ++ podrá "evitar" NATutilizando las 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.

All Articles