- 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/A
debe hacer un túnel hacia 127.0.0.1:9000
cuá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/A
obtengo 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?