Eu consegui descobrir isso sozinho. Parece que o tunelamento ssh é basicamente o encaminhamento de porta. Eu corri o seguinte código no servidor por trás do NAT
ssh -N -R 4321:localhost:1234 user@client &
isso configura o túnel que roteia o tráfego de client:4321
para server:1234
, com o &
para executá-lo em segundo plano. Ainda no servidor, eu corri:
ncat -lk -c "python myscript.py" localhost 1234 &
que inicia o processo netcat executando myscript.py
. Agora posso me conectar ao servidor do meu cliente via netcat
nc localhost 4321
(Eu não tenho ncat
no meu cliente, mas nc
também funcionou. Meu caso de uso real foi usar a biblioteca socket
em python para conectar, o que funcionou da mesma forma)