🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • Para Windows
  • Instalación con chocolatey
  • Para un dominio estático
  • Para Linux
  • Para Docker
  1. Redes
  2. VPN y escritorio remoto

Comunicación punto a punto con ngrok

AnteriorVPN y escritorio remotoSiguienteVPN

Última actualización hace 2 meses

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.

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 Windows

Podrías hacerlo de dos formas:

  • Mediante el archivo .exe

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.

  1. Ya podemos entrar a nuestro servidor localhost a través de dominio público.

Instalación con chocolatey

  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.

Para ello sigue estos pasos: primero de todo, 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:

Mediante 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 :

🍫
🍫
regístrate en ngrok
🕸️
Page cover image
ngrok funciona como servidor intermedio y seguro
En la imagen se ve abajo el enlace temporal
El enlace es temporal y solo funcionará mientras el tunel de terminal siga activo.