Llevaba unos cuantos días intentando resolver un problema de configuración de Apache a otra persona, por email. Me enviaba detalles del problema, pantallazos en algún caso y yo le respondía con posibles soluciones, comandos que debería ejecutar y ficheros de configuración que debería editar. Se trataba de una máquina local, detrás de un NAT. Tras muchas idas y venidas, no conseguíamos resolver y pensando en cómo solucionarlo, me encontré con una herramienta que me ha permitido hacerlo en 2 minutos, ngrok 🙂 Permite exponer puertos tras el NAT de forma muy sencilla, de tal forma que si expone por ejemplo el puerto 22, yo pueda conectarme de forma remota a administrar su máquina. Lógicamente debe haber confianza entre ambas partes, para evitar sustos de seguridad.
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install openssh-server
Poner en marcha openssh:
$ sudo service ssh start
Instalar ngrok (la aplicación que expone puertos tras el NAT)
./ngrok authtoken XXXXXXX
Abrir el puerto 22 (ssh) al exterior: (magia!)
$ ./ngrok tcp 22
$ ssh -l usuario 0.tcp.ngrok.io -p13011
Lógicamente, la persona con el problema antes debe haberle enviado al ayudante un nombre de usuario y contraseña para conectar por ssh.
Una vez conectado, el ayudante puede abrir otras sesiones para tunelizar más puertos. Por ejemplo:
$ ssh -l usuario 0.tcp.ngrok.io -p13011 -L 8080:localhost:80
Ese comando permite tunelizar el puerto 80 de la máquina remota para dejarlo accesible a través del puerto 8080 de la máquina local. Es decir, si el ayudante en su navegador teclea ahora: http://localhost:8080 en realidad se estará conectando a través del túnel ssh al puerto 80 de la máquina remota (tras el NAT). Muy, muy interesante para permitir la administración remota de equipos. Lo dicho, en dos minutos he podido resolver así un problema que se estaba estirando ya unos cuantos días por la incomodidad de analizar el problema vía email…