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 vaziobind_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 aGatewayPorts
opção do servidor estiver habilitada (consultesshd_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.