Tunel SSH

Iniciado por DonQuimi, 8 Marzo 2016, 12:56 PM

0 Miembros y 1 Visitante están viendo este tema.

MinusFour

Cita de: jkphreak en 14 Marzo 2016, 08:36 AM
No me he explicado bien, creo. El puerto 80 quiero dejarlo libre para un servidor apache que tengo en la misma maquina, de aqui que utilize el puerto 8080.

Por otro lado, cuando digo que me varia el link, quiero decir lo siguiente: yo pongo en el navegador del smartphone: eldominiodemicasa.no-ip.com:8080 y, efectivamente, nginx me redirige a la pagina de mi router. Todo bien hasta aqui.

Ahora, cuando hago login con el usuario y password (convenientemente modificado el que viene por defecto), nginx me dirige a eldominiodemicasa.no-ip.com/index.stm.

Es decir, en este punto, se pierde el ":8080". Si escribo manualmente este puerto en la barra de direcciones, y actualizo, entonces ya me entra a la configuración, ya que el login se ha efectuado antes correctamente y la sesión aún esta iniciada. Pero es algo engorroso tener que ir introduciendo manualmente el numero de puerto cada vez que hago click en un link.

Creo que lo solucionaria canviando algo en la configuración de nginx, no? Por lo que he entendido, utilizando "http_post" en el "proxy_set_header" deberia respetarse el puerto indicado... pero no es así.

Gracias!

Honestamente, no se que este pasando. Verifica las peticiones HTTP que estas recibiendo de tu router (lo puedes hacer desde las herramientas de desarrollador de tu navegador en la sección de Red). Ahi debes poder revisar las peticiones que fallan.

Lo único que se me ocurre quizas es que hagas:


proxy_redirect http://192.168.1.1:80/ http://$host:$server_port/;


Pero esta configuración aplica solo para redirects no para los links.

DonQuimi

He probado la configuración que me indicavas para las redirecciones, pero no parece haberle gustado tampoco a nginx.

Respecto a revisar las peticiones del router. Cuelgo un par de imagenes con las peticiones que se generan cuando hago click en el boton de login. (He ocultado el nombre de mi dominio, espero no os importe, es por precaución, no por desconfianza).

En primer lugar, se observa como, al llamar al programa login.exe mediante el metodo POST, en la cabecera de la petición aparece el puerto 8080, tanto en el campo "Host", como en el "Referer", pero en la cabecera de la respuesta, este ya desaparece:



En segundo lugar, se observa como se genera otra petición, por metodo GET, que ya no incluye el numero de puerto en el campo "Host", aunque si en el "Referer".



Llegados a este punto, mis escasos conocimientos de informatica creo que se han agotado. Pido disculpas por las molestias, aunque ganas de aprender no me faltan!


MinusFour

Tengo la ligera sospecha que tu servidor está regresando tu hostname en Location incorrectamente. Yo probaría con usar:

proxy_set_header Host 192.168.1.1

Si esto no funciona, revisa nuevamente Location en las cabeceras de Respuesta de la primera petición.

DonQuimi

Nada, he probado con tus indicaciones y tampoco. Al hacer la peticion GET, por algún motivo, se pierde el dato del puerto asociado.

Lo que si que he notado es que, una vez dentro del apartado de configuración del router, cuando he insertado de nuevo el puerto manualmente en la barra de direcciones, las distintas peticiones por metodo GET funcionan perfectamente, respetando el puerto asociado en el Host. Es algo curioso.

Tampoco es algo que me haya pasado solamente a mi. Buscando en google "nginx missing port", veo que hay mas gente que ha tenido este problema:


http://www.redmine.org/boards/2/topics/36256
http://serverfault.com/questions/363159/nginx-proxy-pass-redirects-ignore-port

Pero por algun motivo, las soluciones que plantean no me funcionan...

DonQuimi

Solucionado!

No se si he resuleto el problema, o solamente lo he parcheado. Los que sabeis de esto direis. Lo que he hecho es (aparte de leer mucha documentacion) añadir la siguiente linea:

proxy_redirect http://eldominiodemicasa.no-ip.com/index.stm http://eldominiodemicasa.no-ip.com:8080/index.stm

Con esto ya accedo normalmente a la pàgina del router y funciona todo correctamente.

También, ahora que ya se como funciona esto, he añadido otro redirect para que, al cerrar la sesion, me dirija nuevamente a la pàgina de inicio:

proxy_redirect http://eldominiodemicasa.no-ip.com/login.stm http://eldominiodemicasa.no-ip.com:8080;

Cuelgo el contenido entero del fichero de dentro de sites-available, por si a alguien le interesa:

server{
        listen 8080;
        server_name eldominiodemicasa.no-ip.com;

        location /{
                proxy_pass http://192.168.1.1:80;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_redirect http://eldominiodemicasa.no-ip.com/index.stm http://eldominiodemicasa.no-ip.com:8080/index.stm;
                proxy_redirect http://eldominiodemicasa.no-ip.com/login.stm http://eldominiodemicasa.no-ip.com:8080;
                }
        }


Así por lo menos queda en algún sitio recogida esta información, ya que yo no fuí capaz de encontrar en ningún sitio como hacerlo para acceder remotamente a un router que no permite esta opción...