
NAT Tunnel: para servir sin esfuerzo desde detrás de NAT
Si tienes acceso a un servidor con IP pública y puertos sin filtrar, puedes ejecutar el servidor NAT Tunnel (NT) en ese servidor, y el cliente NT en tu máquina detrás de un NAT. El servidor requiere 2 puertos abiertos: uno para la comunicación con el cliente NT (--admin), y el otro para que los clientes regulares se conecten (--public: este es el puerto que quieres que usen tus usuarios).
El cliente NT abre una conexión hacia la IP/puerto admin del servidor. Tan pronto como el servidor recibe una nueva conexión, se lo notifica al cliente NT, quien entonces crea una nueva conexión de túnel hacia el servidor, la cual se conecta al servicio deseado del lado del cliente NT (--local)
La conexión entre el Cliente NT y el Servidor NT en la interfaz admin está protegida por un secreto compartido contra usos no autorizados. Un adversario que pueda interceptar paquetes podría descifrar el secreto si este tiene una complejidad insuficiente. Se recomiendan al menos 10 caracteres y números aleatorios.
Ejemplo: Tienes un servidor HTTP escuchando en tu máquina local en el puerto 80. Quieres hacerlo accesible en la IP pública de tu servidor en la nube/VPS/etc. en el puerto 7000. Usamos el puerto 8000 en el servidor en la nube para el canal de control.
Servidor:
natsrv.py --mode server --secret s3cretP4ss --public 0.0.0.0:7000 --admin 0.0.0.0:8000
Cliente:
natsrv.py --mode client --secret s3cretP4ss --local localhost:80 --admin example.com:8000