Os túneis SSH são úteis para cruzar redes inseguras, aproveitando a criptografia de ponta a ponta, conectando dois end-points que ocupam redes confiáveis distintas.
EDITADO
Tanto quanto eu posso dizer (graças aos comentários), o que você tem é:
- Um host-A local: seu
localhost, em sua rede local (provavelmente por trás do firewall / NAT) - Um host-B publicamente acessível: o
awsserver - Um host-C acessível não publicamente: na rede remota restrita (provavelmente por trás do firewall / NAT)
- Um host-D acessível publicamente: aquele a que você se refere como
deviceIP, que escuta na porta80e está na rede restrita remota
Se você quiser conectar seu host A ao host D, permitindo que o seu navegador o alcance na porta 80 , será necessário:
1) Um túnel do host-A para o host-B, que:
- Permite que o host-A ouça na porta
8080 - Envia tráfego dessa porta pelo túnel
- No host-B (
aws), redireciona o tráfego proveniente do túnel para a porta local (ou seja, no host-B)15872(tirei de seus comentários; você pode escolher qualquer porta disponível; garantir que seja o mesmo em todos os comandos)
# Execute on host-A
$ ssh -L 8080:localhost:15872 user@host-B
2) Um túnel do host-C para o host-B, que:
- Permite que o host-B ouça na porta
15872 - Envia tráfego dessa porta pelo túnel
- No host-C (seu servidor linux), redireciona esse tráfego para a porta
80no host-D
# Execute on host-C
$ ssh -R *:15872:host-D:80 user@host-B
Desta forma, as solicitações feitas para o host-A na porta 8080 serão encapsuladas para o host-B, redirecionadas para a porta 15872 no mesmo host-B, encapsuladas para o host-C e redirecionadas no host-C para porta 80 do host-D.