Eu posso ver como isso pode ser feito ..
Então você tem 3 computadores. A, B, C
A, B estão por trás do NAT. Digamos que B é o intermediário
Método 1
2 túneis
Assim você pode fazer uma conexão SSH de A a B (Túnel 1). E de C para B (Túnel 2). E para a frente o túnel 1, para o túnel 2.
O computador A se conecta ao SSH -L
O computador C se conecta com o SSH -R
O -L ou -R determina qual lado do túnel ouve e qual lado do túnel encaminha.
Então, a menos que eu tenha errado, você poderia fazer algo como -
A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB
Mas eu não tenho certeza se você pode fazer duas conexões para o mesmo servidor SSH, então tente isso ... Criando dois servidores sshd diferentes ...
Edite o sshd_config no CompB e você verá que ele diz que a Port 22 adiciona uma linha abaixo dele que diz Port 222. Em seguida, a CompB executará um servidor ssh em duas portas.
Em seguida, você pode se conectar aos servidores ssh em duas portas diferentes 22 e 222
A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222
A porta 1234 é a porta no computador A, onde você conecta seu programa cliente. É a entrada para o túnel 1
A porta 2345 é a porta no computador B e a entrada no túnel 2
A porta 3456 é a porta que você executa o programa do servidor no CompC
Dessa maneira, a CompA pode se conectar a um servidor no CompC, por meio do CompB
Método 2
um túnel
Uma opção é usar apenas um túnel, mas você só obtém criptografia ao longo da metade do caminho. 5.6.7.8 é o IP do CompC e a porta 3456 é o servidor no CompC e a porta 1234 é a porta de escuta do túnel.
A$ ssh -L 1234:5.6.7.8:3456 user@compB
Em seguida, na CompA, conecte o programa cliente à porta 1234 na CompA e ele irá para o CompC.