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
aws
server - 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 porta80
e 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
80
no 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.