Plex sobre NAT duplo

Plex sobre NAT duplo

Estou tentando contornar o NAT de nível de operadora do meu ISP e ainda conseguir acessar meu servidor plex de fora.

Encontrei dois guias:

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 eu tenho uma VM ubuntu 16.04 hospedada pela digitalocean, que possui um IP público. Posso fazer ssh do meu servidor plex (também Ubuntu 16.04) para o servidor digital ocean remoto.

No meu servidor Plex executo o seguinte comando:

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

E deixe isso rodando em uma tela.

O túnel foi bem-sucedido. Do host remoto aqui estão netstat e nc -v para a interface de 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# 

Mas como você pode ver, ele não está escutando seu IP público. A única outra interface ativa além do loopback é a eth0, à qual é atribuído o endereço IP público. Então, se eu tentar acessar remote server public IP: 32400, não recebo nada.

Como faço para que meu servidor remoto esteja escutando em 32400 eth0, enquanto ainda o encaminho para meu servidor local:32400?

Responder1

Eu já tinha um endereço de bind vazio, o problema era que eu precisava especificar o bind para todos os endereços, assim:

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

Responder2

Deman 1 ssh:

-R [bind_address:]port:host:hostport

[…]

Por padrão, o soquete de escuta no servidor estará vinculado apenas à interface de loopback. Isso pode ser substituído especificando um arquivo bind_address. Um vazio bind_address, ou o endereço *, indica que o soquete remoto deve escutar em todas as interfaces. A especificação de um bind_address remoto só terá sucesso se a GatewayPortsopção do servidor estiver habilitada (consulte sshd_config(5)).

Portanto, a coisa mais fácil de tentar primeiro é especificar um vazio bind_address:

-R :32400:localhost:32400

Observe a inicial :, isso faz a diferença.

informação relacionada