Você deve iniciar o servidor primeiro e depois iniciar o encaminhamento remoto da porta. Não o contrário.
Não sei por que isso acontece, mas obviamente resolve o problema.
Eu tenho a seguinte configuração:
server <-NAT-> VPS <-> client
Eu configurei o ssh para meu servidor por meio de um túnel reverso e as seguintes configurações:
GatewayPorts yes
autossh -f -M 57575 -N -R <VPS ip>:9991:localhost:<server ssh port> vps
Com essa configuração, posso simplesmente ssh -p 9991 <server user>@<VPS ip>
e fazer login no meu servidor a partir do cliente.
GatewayPorts yes
e configuração idêntica ao caso SSH
autossh -f -M 57576 -N -R <VPS ip>:9992:localhost:8988 vps
python -m http.server 8988
para iniciar o servidor http. Eu posso confirmar que ele se liga a 0.0.0.0
e eu posso acessá-lo na máquina local.
No entanto, quando tento acessar o site por meio de http://<VPS ip>:9992
, recebo um ERR_EMPTY_RESPONSE.
Olhando para o netstat, as duas situações parecem idênticas. No VPS:
tcp 0 0 0.0.0.0:9992 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:9991 0.0.0.0:* LISTEN -
No servidor:
tcp 0 0 0.0.0.0:8988 0.0.0.0:* LISTEN 21003/python
tcp 0 0 0.0.0.0:<ssh port> 0.0.0.0:* LISTEN 550/sshd
tcpdump
mostra que uma conexão é estabelecida com a porta 9992 no VPS, mas nada alcança a porta 8988 em server
. A conexão é FIN
ned imediatamente no VPS.
Por que isso não funciona, quando a situação exatamente análoga da SSH ocorre?
Tags ssh http ssh-tunneling