reenvío de puertos nginx / túnel ssh

reenvío de puertos nginx / túnel ssh
  • Tengo una computadora (llamémosla A) en una red local sin una dirección IP estática accesible desde el exterior. (puerto SSH AAAAA)
  • A tiene un servidor web al que quiero poder acceder desde el exterior
  • Tengo un servidor (B) accesible desde Internet, que también ejecuta un servidor web (puerto ssh BBBBB:)
  • Quiero poder acceder al servidor web de A a B desde cualquier computadora con un navegador web.

He estado usando el túnel remoto SSH con éxito con la siguiente configuración:

  • en la máquina A:

    $> ssh -f -N -p BBBBB -R 0.0.0.0:9000:localhost:AAAAA [email protected]

  • en la máquina C:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • en el navegador web de la máquina C,manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5

Esto funciona muy bien, pero es muy complicado tener que ejecutar el comando SSH en C y cambiar la configuración en el navegador web cada vez...

Así que hablé de esto con alguien, quien me dijo que probablemente podría simplificar la configuración haciendo la parte en la máquina C directamente en el servidor B, con alguna configuración web en nginx en el servidor web de B. Así que ahora probé esto:

  • En A, igual que antes
  • en B:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • en la configuración nginx de B:

    $> cat /etc/nginx/sites-available/default:

upstream tunnel {
    server 127.0.0.1:9000;
}

server {
        listen 80;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass http://tunnel;
  }
    [...]
}
server {
        listen 443 ssl;
        [...]
      location /A {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://tunnel;
  }
    [...]    
}

Según tengo entendido, desde un navegador web en una máquina conectada a Internet, la solicitud http://B.B.B.B/Adebe hacer un túnel hacia 127.0.0.1:9000cuál es el puerto reenviado para mi máquina A, lo que me da acceso al servidor web en A.

Sin embargo, algo anda mal en esta configuración, ya que cuando intento conectarme http://B.B.B.B/Aobtengo un tiempo de carga prolongado (aproximadamente un minuto) seguido de una página en blanco, con el siguiente mensaje de error escrito en ella:

SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3
Protocol mismatch.

Busqué en Google ese error un poco y encontré algunas publicaciones con problemas relativamente similares, pero honestamente, con mis (muy) limitadas habilidades en este tipo de cosas, estoy perdido al intentar proyectar su solución a mi caso de uso. ... ¿Alguien podría ayudarme?

información relacionada