Page cover

Comunicación punto a punto con ngrok

Ngrok es una herramienta que permite exponer un servidor local a Internet de manera segura y sencilla. Básicamente, crea una especie de "túnel" entre tu ordenador (o servidor local) y la red externa, asignándote una URL pública temporal.

Esta aplicación es sobretodo útil en entornos de testeo de aplicaciones o para acceder a servicios locales desde otros dispositivos o desde Internet, sin necesidad de configurar un dominio o modificar el router, algunas utilidades:

  • Desarrollo y pruebas remotas: Ideal para probar aplicaciones web y APIs con servicios externos o para mostrar avances a clientes sin desplegar la app en un servidor real.

  • Pruebas de Webhooks: Herramientas como Stripe, GitHub, Slack, entre otros, requieren URLs públicas para enviar notificaciones, y Ngrok facilita recibir esos datos en tu entorno de desarrollo.

  • Pruebas en diferentes dispositivos: Puedes acceder a tu aplicación desde otros dispositivos (como móviles) usando la URL pública que Ngrok genera.

ngrok funciona como servidor intermedio y seguro

Puedes redirigir el trafico de cualquier servicio y protocolo que requieras, por ejemplo:

ngrok tcp 22 (Para SSH)
ngrok http 80 (Para web)
ngrok http 3000 (Para node)

Para ello sigue estos pasos: primero de todo, regístrate en ngrok y elige que entorno de trabajo utilizas (Linux, Windows, Docker...) y sigue las instrucciones de instalación. Dependiendo de la plataforma elegida sigue los pasos:

Para Windows

Podrías hacerlo de dos formas:

  • Mediante el archivo .exe

  • Mediante chocolatey 🍫

Empezando de forma más sencilla:

  1. Descarga el archivo .exe a tu carpeta de proyecto (si es node.js o si esta en xampp con localhost)

  1. Ejecutamos ngrok en el mismo terminal de VScode y como aparece en las instrucciones o mediante el propio archivo .exe (.\ngrok.exe) con el token de autorización que te ha dado el propio ngrok:

.\ngrok.exe config add-authtoken XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  1. Ejecutamos el comando (siendo 80 el puerto http de localhost por defecto, 3000 si es node por ejemplo):

ngrok http 80
  1. Este creará un dominio de forwarding, accede a él a través de navegador.

En la imagen se ve abajo el enlace temporal
  1. Ya podemos entrar a nuestro servidor localhost a través de dominio público.

El enlace es temporal y solo funcionará mientras el tunel de terminal siga activo.

Instalación con chocolatey

Con el uso de chocolatey 🍫, este es un packet manager para Windows que se encarga de la instalación y mantenimiento de aplicaciones del paquete de forma automática. Para realizarlo con este gestor :

  1. Descarga e instala chocolatey desde su página oficial mediante el comando que te aparece

  2. Instala ngrok con el comando especificado en la documentación de ngrok (choco install ngrok)

  3. Revisa la versión con ngrok -v

  4. Añade el token de autenticación tal y como se ha visto en pasos anteriores.

  5. Ahora vuelve a ejecutar el comando ngrok http 80

Para un dominio estático

Si lo que quieres es servir tu aplicación a través de un dominio estático comprado, el comando seria tal que así:

ngrok http 8080 --url https://example.ngrok.app

Para Linux

En Linux, ngrok se ejecutará como un servicio de systemd pero podemos instalarlo de varias formas dependiendo de la distro, en distros de Debian:

apt install ngrok

o

curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
	| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
	&& echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
	| sudo tee /etc/apt/sources.list.d/ngrok.list \
	&& sudo apt update \
	&& sudo apt install ngrok

o

wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz

#despues de hacer el wget hacemos esto para descomprimir
tar -xvzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin/

A continuación, como siempre, añade el token:

ngrok config add-authtoken XXXXXXXXXXXX

Y ahora para que lo contemple como servicio deberemos crear una unidad service en /etc/systemd/system/ngrok.service:

sudo nano /etc/systemd/system/ngrok.service
[Unit]
Description=Ngrok Tunnel Service
After=network.target

[Service]
ExecStart=/usr/local/bin/ngrok http 80
Restart=always
User=root
WorkingDirectory=/usr/local/bin

[Install]
WantedBy=multi-user.target

Reiniciamos el daemon sin parar servicios:

systemctl daemon-reload

Reiniciamos el servicio de ngrok:

systemctl restart ngrok.servive

Podemos revisar ahora si está activo o no:

systemctl status ngrok.servive

Activarlo por defecto con el inicio del servidor:

systemctl enable ngrok.servive

En la web de Ngrok (en endpoints) podemos encontrar ahora la URL efímera que nos ha creado:

http://7.tcp.eu.ngrok.io:19089

Una aplicación interesante es crear un túnel SSH para poder conectarnos en remoto, para ello simplemente el comando es ngrok tcp 22 como ya hemos visto y desde la web, en endpoints copiaremos el dominio.

ssh -L 8006:localhost:8006 root@7.tcp.eu.ngrok.io -p 19089

Con esto podemos conseguir redirigir (como en el comando) la visualización de proxmox (puerto 8006) y generar una conexión SSH a la vez.

Para Docker

Con docker simplemente hay que descargar la imagen de ngrok con el siguiente comando:

docker pull ngrok/ngrok

Para el dominio público aleatorio de ngrok, ejecutaremos el contenedor redirigiendo el tráfico del servicio que queremos. Por ejemplo, en http por el puerto 80 (http://localhost:8080). Recuerda añadir el token correspondiente de la web:

docker run --net=host -it -e NGROK_AUTHTOKEN=XXXXXXXXXX ngrok/ngrok:latest http 80

Una vez ejecutado, podrás revisar los endpoints en su página correspondiente.

Última actualización