Apuntar:
Quiero realizar la transferencia de archivos basada en TCP más rápida posible entre dos máquinas ubicadas detrás de dos NAT diferentes, en una situación en la que un puerto público no se puede redirigir a ninguna de las dos máquinas (políticas locales).
Aproximaciones:
Hasta ahora pude: 1) Configurar una VPN con un nodo público central que actúa como retransmisión (OpenVPN), 2) Configurar una VPN en malla para obtener un enlace directo entre ambas máquinas sin retransmisión (tinc). Luego, la VPN se puede usar sin problemas para realizar transferencias de datos a través de cualquier cliente/servidor de transferencia de archivos de terceros (como si ambas máquinas estuvieran en la misma LAN).
Problema:
La línea entre las dos máquinas es bastante inestable y un único flujo TCP normalmente sólo alcanza una pequeña fracción del ancho de banda disponible. Además, encapsular TCP sobre TCP genera una sobrecarga adicional y es notoriamente ineficiente para líneas inestables. Por lo tanto, me gustaría establecer un enlace de tráfico directo (sin retransmisión) y nativo (sin encapsulación VPN) entre las dos máquinas. Una elección natural es el marco STUN, pero llegué a la conclusión de que para interactuar con un servidor STUN público y lograr un recorrido NAT, una aplicación debe compilarse con bibliotecas STUN ad-hoc y depender de sockets específicos de STUN en lugar de sockets normales. Básicamente, esto significa que cada nuevo conjunto de aplicaciones cliente/servidor habilitadas para STUN debe escribirse desde cero.
Pregunta:
Para simplificar el proceso, me pregunto si sería posible implementar un cliente STUN genérico que básicamente se ejecutaría como un demonio en ambas máquinas. Los clientes se conectarían a un servidor STUN público para registrarse y consultar información sobre otros clientes. También redirigirían todo el tráfico saliente desde un puerto local monitoreado al IP/puerto correcto (configuración de usuario + información del servidor STUN) para llegar a la otra máquina. Esto podría permitir que cualquier aplicación cliente/servidor de terceros abra sin problemas sockets TCP regulares (posiblemente varios) y establezca una conexión con la otra máquina (como si estuviera en la misma LAN).
Respuesta1
Puedes probarSoftEther VPN
- él:
- tener bastante bien
NAT Traversal
. - Permite configurar múltiples
Listener Ports
.
En mi opinión, es un software bastante bueno que puede ahorrarle mucho trabajo...