Exponiendo Localhost con Cloudflare Tunnel: Guía Completa

Cesar A. Fernandez B.

Cesar A. Fernandez B.

Sr. Software Engineer

18 de marzo de 2025 6 min
Artículo

Qué tal, muchachones!!!, imagínate esta vaina: tienes una app corriendo en 'localhost:3000', necesitas mostrar rapidamente, una demo, para ver los avances, pero no quieres subirla a un servidor remoto ni complicarte con problemas de configuración complicada. Justo me pasó!!! Hace poco me tocó resolver esto, y Cloudflare Tunnel fue la salvación. Aquí te dejo el paso a paso, con comandos, tips y errores que evitar, tanto si tienes dominio propio como si no. Asi que les explico paso a paso.


Ante todo qué es Cloudflare Tunnel?

Cloudflare Tunnel es un servicio que te permite exponer aplicaciones y servicios locales en Internet de forma segura, sin necesidad de abrir puertos en el router ni requerir una IP pública.

Básicamente, Cloudflare actúa como un puente entre tu servidor local y el mundo exterior, protegiéndolo de ataques y simplificando el acceso remoto. Esto se logra a través de una herramienta llamada cloudflared, que crea un túnel seguro entre tu máquina y la red global de Cloudflare.

Funcionamiento de Cloudflare Tunnel:

El servicio opera mediante una pequeña aplicación llamada cloudflared, que se instala en el sistema operativo del usuario (compatible con Windows, Linux, macOS e incluso Docker). Esta aplicación establece una conexión saliente segura hacia la infraestructura global de Cloudflare, creando un túnel VPN inverso. A través de este túnel, es posible acceder a servicios locales utilizando protocolos como HTTPS, SSH, RDP e incluso SMB, sin exponer directamente la red local a Internet. Es decir:

  • Tu máquina ejecuta cloudflared, que establece una conexión segura con Cloudflare.

  • Cloudflare asigna una URL (puede ser de tu dominio o una temporal como tunel.trycloudflare.com).

  • Todo el tráfico pasa por Cloudflare, filtrando amenazas y protegiendo tu servidor.

  • Tú accedes a tu servicio sin exponerlo directamente a Internet.

  • Esto significa que no tienes que abrir puertos ni preocuparte por firewalls o IPs dinámicas. Cloudflare maneja toda la conectividad y la seguridad.

Beneficios que ofrece Cloudflare Tunnel:

  • Seguridad Mejorada: Al no requerir la apertura de puertos en el router, se reduce la superficie de ataque, protegiendo la red local de posibles amenazas externas.

  • Simplicidad en la Configuración: A diferencia de las VPN tradicionales, que pueden requerir configuraciones complejas y la gestión de direcciones IP públicas, Cloudflare Tunnel simplifica el proceso al eliminar estas necesidades.

  • Acceso Remoto sin IP Pública: Es especialmente útil para usuarios cuyos proveedores de Internet implementan CG-NAT, permitiendo el acceso remoto a servicios locales sin complicaciones adicionales.

  • Protección Adicional: Además de facilitar el acceso, Cloudflare Tunnel actúa como un firewall de aplicaciones web (WAF) y protege contra ataques DDoS, filtrando el tráfico entrante a través de la red de Cloudflare antes de que llegue al servidor de origen.

Por Qué Cloudflare Tunnel y No Otras Herramientas (Como ngrok)?

Primero: olvídate de ngrok (a menos que te gusten las URLs que cambian cada vez y las limitaciones de la versión gratis). Cloudflare Tunnel crea un enlace directo y seguro entre tu máquina y los servidores de Cloudflare, totalmente gratis, usando tu dominio o uno temporal (como 'tunel-tuproyecto.trycloudflare.com'), con HTTPS incluido, y sin abrir puertos en el router. Además, queda más profesional para mostrarle al cliente.


Ahora si muchachones a lo que vinimos:

Paso 0: Prepara Todo lo que Necesitas

Antes de empezar, asegúrate de tener:

  1. Una cuenta en Cloudflare (gratis, obvio). Si tienes dominio propio, añádelo a Cloudflare (esto es clave).
  2. Instalar cloudflared (la herramienta de línea de comandos de Cloudflare).

Instalación en Linux/macOS:

# Descarga cloudflared (Linux)
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O cloudflared

# Si usas macOS:
# wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-darwin-amd64.tgz

# Dale permisos de ejecución
chmod +x cloudflared

# Opcional: Muévelo a /usr/local/bin para usarlo desde cualquier lado
sudo mv cloudflared /usr/local/bin/

En Windows:
Descarga el .exe desde Cloudflared Releases y agrégalo al PATH (o guárdalo en una carpeta que recuerdes).


Paso 1: Conecta Cloudflared con Tu Cuenta de Cloudflare

Ejecuta este comando:

cloudflared tunnel login

Esto abrirá tu navegador para que inicies sesión en Cloudflare. Importante: Si no tienes dominio, elige cualquiera de los que aparezcan (luego lo ajustamos). La autenticación genera un certificado en tu máquina.


Paso 2: Crea el Tunnel

Un "tunnel" es como un puente entre tu PC y Cloudflare. Para crearlo:

cloudflared tunnel create nombre-del-tunnel

Verás algo como:

Created tunnel nombre-del-tunnel with id abcdef12-3456-7890-...

Guarda el ID del túnel!!! (lo necesitarás después). Además, se crea un archivo JSON con las credenciales en '~/.cloudflared/' (Pana estoy asumiendo que estas en linux).


Paso 3: Configura el Tunnel

Crea un archivo YAML (ej: 'config.yml'):

tunnel: abcdef12-3456-7890-...  # El ID de tu tunnel
credentials-file: ~/.cloudflared/abcdef12-3456-7890-....json

ingress:
  - hostname: tunel.tudominio.com  # Si tienes dominio propio
    service: http://localhost:3000
  - hostname: proyecto-cliente.trycloudflare.com  # Si NO tienes dominio
    service: http://localhost:3000
  - service: http_status:404  # Respuesta para rutas no definidas

Explicación rápida:

  • 'ingress' define las reglas. Si usas tu dominio, asegúrate de configurar el DNS (Paso 4A).
  • Si no tienes dominio, Cloudflare te asigna uno temporal (ej: '*.trycloudflare.com').

Paso 4A: Si Tienes Dominio Propio...

  1. Configura un registro CNAME en Cloudflare DNS:

    • Tipo: 'CNAME'
    • Nombre: 'tunel' (o el subdominio que prefieras, ej: 'prueba')
    • Contenido: 'abcdef12-3456-7890-....pruebatunnel.com' (tu Tunnel ID + '.pruebatunnel.com').
  2. Inicia el túnel:

cloudflared tunnel run nombre-del-tunnel

En 2-3 minutos, 'tunel.tudominio.com' apuntará a tu localhost. HTTPS se activa automáticamente (sin certificados manuales).


Paso 4B: Si NO Tienes Dominio...

Más fácil todavía mi bro! Cloudflare te da una URL tipo https://proyecto-cliente.trycloudflare.com. Ejecuta:

cloudflared tunnel --url http://localhost:3000

Tip: Este comando es rápido para pruebas, pero si quieres algo más personalizado, usa el archivo de configuración del Paso 3.


Paso 5: Mantén el Tunnel Activo (Sin Que se Caiga!!!)

Si cierras la terminal, el túnel se muere. Soluciones:

  • Usa 'screen' o 'tmux' (si estás en Linux/macOS):

    screen -S tunnel
    cloudflared tunnel run nombre-del-tunnel
    # Presiona Ctrl+A, luego D para salir sin cerrar
    
  • Configúralo como servicio en Linux (pa que se inicie automático):
    Crea un archivo de servicio:

    sudo nano /etc/systemd/system/cloudflared.service
    

    Contenido del archivo:

    [Unit]
    Description=Cloudflare Tunnel
    After=network.target
    
    [Service]
    ExecStart=/usr/local/bin/cloudflared tunnel run --config /ruta/a/config.yml nombre-del-tunnel
    Restart=always
    User=tu_usuario
    
    [Install]
    WantedBy=multi-user.target
    

    Luego:

    sudo systemctl enable --now cloudflared
    

Errores Típicos y Cómo Evitarlos

  1. "Unable to reach the origin service":

    • ¿Tu app está corriendo localmente? Verifica 'http://localhost:3000'.
    • ¿El firewall está bloqueando el puerto? En Windows, revisa las reglas de entrada.
  2. Problemas con el DNS (cuando usas tu dominio):

    • ¿El registro CNAME está bien escrito? Debe apuntar a '[ID-TUNEL].cfargotunnel.com'.
    • Espera unos minutos: a veces el DNS tarda en propagarse.
  3. El túnel se cierra al salir de la terminal:

    • Usa 'screen', 'tmux', o el servicio systemd que te expliqué.
  4. Certificados HTTPS que no se generan:
    Ejecuta:

    cloudflared tunnel cleanup nombre-del-tunnel
    cloudflared tunnel run nombre-del-tunnel
    

Tips Pro (Pa' Que Quedes Como un Hackerman)

  • Personaliza la URL temporal: Si usas 'trycloudflare.com', puedes elegir el subdominio en el 'config.yml':

    - hostname: nombre-chévere.trycloudflare.com
      service: http://localhost:3000
    

    Pero ojo!!! Si el nombre ya está tomado, tocará probar otro.

  • Múltiples servicios en un solo túnel: ¿Tienes un backend en ':3000' y un frontend en ':8080'? Configura así:

    ingress:
      - hostname: api.tudominio.com
        service: http://localhost:3000
      - hostname: web.tudominio.com
        service: http://localhost:8080
    
  • Protege el acceso con Cloudflare Zero Trust:

    1. Entra a Access > Applications en el dashboard de Cloudflare.
    2. Crea una política de acceso (ej: solo usuarios con tu email corporativo).
    3. Asóciala al túnel. ¡Nadie indeseado entrará!

Y si el Cliente Necesita Subir Archivos o Usar WebSockets?

Tranquilo. Cloudflare Tunnel soporta WebSockets, HTTP/2 y tráfico bidireccional. Solo asegúrate de que tu app esté configurada correctamente. Por ejemplo, en Node.js:

// Configura Socket.io para aceptar conexiones
const io = require('socket.io')(server, {
  cors: { origin: "*" } // O restringe a tu dominio
});

Vale la Pena Usar Esto?

Claro que sí bro! Lo usé para un cliente que quería probar una API en desarrollo. En 10 minutos tenía una URL HTTPS profesional, sin tocar el router ni pagar hosting. Eso sí: no lo uses para producción, solo para pruebas o demo.

Ah, y no olvides parar el túnel cuando termines:

cloudflared tunnel stop nombre-del-tunnel

Bueno muchachones, espero que les sirva, asi que activence y a probar...!!!

👁️ 25 vistas