Cloudflare Tunnel: exponer servicios sin abrir puertos
Dedicated & VPS
2

El problema de abrir puertos

La forma clásica de publicar un servicio en internet es abrir un puerto en tu router o en el firewall del servidor y redirigirlo hacia la aplicación. Suena fácil, pero tiene varios problemas: expone una IP pública a escaneos constantes, depende de que tu proveedor de internet te deje abrir puertos (muchas conexiones domésticas hoy usan CGNAT y directamente no puedes), requiere mantener reglas de firewall, y si cambia tu IP pública se te rompe el acceso. Para un servidor dedicado es molesto; para un servicio casero o una app en desarrollo, a veces es imposible.

Qué es Cloudflare Tunnel

Cloudflare Tunnel es un daemon llamado cloudflared que instalas en la máquina donde corre tu servicio (puede ser una Raspberry Pi, un VPS, tu PC de casa, un contenedor...). Ese daemon abre una conexión saliente hacia la red de Cloudflare y mantiene un túnel cifrado. Cuando alguien visita tu dominio, la petición llega primero a Cloudflare y se reenvía por ese túnel hasta tu servicio. No hay ningún puerto abierto hacia internet: el tráfico entra por una conexión que tu máquina inició.

Ventajas frente al port forwarding

  • Nada que configurar en el router: funciona detrás de NAT, CGNAT, firewalls corporativos, redes móviles 4G/5G.
  • Sin IP pública expuesta: tu servidor no aparece en escaneos, porque no escucha en ningún puerto público.
  • Certificados HTTPS automáticos: Cloudflare se encarga del TLS en el borde, tu app puede seguir corriendo en HTTP plano localmente.
  • Sin preocuparse por IP dinámica: el túnel se reconecta solo si tu conexión cambia.
  • Gratis para uso personal y para la mayoría de casos pequeños.

Instalación paso a paso

El proceso general, sin entrar en detalles específicos por sistema, es:

  1. Descargar e instalar cloudflared para tu sistema operativo (hay paquetes para Linux, macOS, Windows y binarios ARM para Raspberry).
  2. Autenticarte con tu cuenta Cloudflare usando el comando de login, que abre una ventana del navegador.
  3. Crear un túnel nuevo, al que Cloudflare asigna un identificador único.
  4. Escribir un pequeño archivo de configuración en formato YAML donde indicas qué servicio local (por ejemplo http://localhost:8123) debe responder a qué dominio (por ejemplo casa.midominio.com).
  5. Crear el registro DNS apuntando al túnel. Lo puedes hacer desde el propio comando de cloudflared.
  6. Arrancar el túnel como servicio del sistema para que se mantenga activo al reiniciar la máquina.

Casos de uso habituales

  • Home Assistant o Jellyfin en casa: acceder a tu domótica o a tu mediateca desde fuera sin abrir nada.
  • Entorno de desarrollo local: mostrar a un cliente un prototipo que corre en tu portátil con una URL real con HTTPS.
  • VPS detrás de firewall restrictivo: publicar un panel de administración sin tocar iptables.
  • Servidores en redes corporativas: dar acceso externo a herramientas internas sin pedir cambios al equipo de redes.
  • Webhooks entrantes a un servicio local: recibir notificaciones de GitHub, Stripe o un CRM en tu máquina de trabajo.

Un detalle de seguridad

Abrir un túnel no significa que tu servicio sea seguro por sí solo. Sigue siendo buena idea combinar el tunnel con Cloudflare Access, que permite exigir login con Google o Microsoft antes de dejar entrar a cualquiera al servicio publicado. Con esa combinación, incluso una app sin autenticación propia queda detrás de un SSO en minutos.

Tunnel es una de esas herramientas que, una vez la usas, te cuesta volver atrás. Resuelve problemas que antes requerían VPNs caseras, IPs fijas contratadas aparte, o soluciones tipo ngrok con limitaciones.