Plex sobre doble NAT

Plex sobre doble NAT

Estoy intentando sortear la NAT de nivel de operador de mi ISP y aún poder acceder a mi servidor Plex desde el exterior.

Encontré dos guías:

http://www.donaldsimpson.co.uk/2016/10/24/tunneling-out-of-carrier-grade-nat-cgnat-with-ssh-and-aws/

https://amoss.me/2017/05/port-forwarding-behind-a-carrier-grade-nat/

Para implementar tengo una VM ubuntu 16.04 alojada en digitalocean, que tiene una IP pública. Puedo hacer ssh desde mi servidor plex (también ubuntu 16.04) al servidor remoto de digital ocean.

En mi servidor Plex ejecuto el siguiente comando:

ssh -nNTv -R 32400:localhost:32400 root@<public IP of remote host>

Y déjalo ejecutándose en una pantalla.

El túnel es un éxito. Desde el host remoto aquí está netstat y nc -v a la interfaz loopback:

root@Ubuntu1604:~/.ssh# nc -v 127.0.0.1 32400
Connection to 127.0.0.1 32400 port [tcp/*] succeeded!

root@Ubuntu1604:~/.ssh# netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:32400         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:32400               :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
root@Ubuntu1604:~/.ssh# 

Pero como puede ver, no está escuchando en su IP pública. La única otra interfaz activa además del loopback es eth0, a la que se le asigna la dirección IP pública. Entonces, si intento acceder a remote server public IP:32400, no obtengo nada.

¿Cómo consigo que mi servidor remoto escuche en 32400 eth0 y al mismo tiempo lo reenvíe a mi servidor local: 32400?

Respuesta1

Ya tenía una dirección de enlace vacía, el problema era que necesitaba especificar el enlace a todas las direcciones, así:

ssh -nNTv -R 0.0.0.0:32400:localhost:32400 root@<public IP of remote host>

Respuesta2

Deman 1 ssh:

-R [bind_address:]port:host:hostport

[…]

De forma predeterminada, el socket de escucha en el servidor estará vinculado únicamente a la interfaz de bucle invertido. Esto se puede anular especificando un archivo bind_address. Un vacío bind_address, o la dirección *, indica que el socket remoto debe escuchar en todas las interfaces. La especificación de una dirección de enlace remota solo será exitosa si la GatewayPortsopción del servidor está habilitada (ver sshd_config(5)).

Entonces, lo más fácil de intentar primero es especificar un vacío bind_address:

-R :32400:localhost:32400

Tenga en cuenta la inicial :, hace la diferencia.

información relacionada