TecnoHN · Tecnología práctica

Configurar Cloudflare Tunnel en Ubuntu

Ubuntu · Cloudflare · Servidores

Publica una aplicación que corre en tu servidor Ubuntu mediante un dominio de Cloudflare, sin abrir puertos en el router y sin exponer directamente el servicio local.

Actualizado: 12 de noviembre de 2026Nivel: básico/intermedioTiempo aproximado: 15–25 min
Al terminar tendrás:
  • cloudflared instalado en Ubuntu.
  • Un Tunnel administrado desde Cloudflare.
  • Un subdominio apuntando a una aplicación local.
  • El conector ejecutándose como servicio de systemd.

Paso 1

Antes de comenzar

Cloudflare Tunnel crea conexiones salientes desde tu servidor hacia la red de Cloudflare. Esto permite publicar una aplicación sin configurar redirección de puertos en el router.

Necesitas

  • Una cuenta de Cloudflare.
  • Un dominio administrado por Cloudflare.
  • Un servidor o máquina virtual con Ubuntu y acceso a Internet.
  • Una aplicación local funcionando, por ejemplo en http://localhost:3000.
  • Acceso con permisos sudo.
Ejemplo de esta guía

Usaremos una aplicación local en http://localhost:3000 y la publicaremos como app.example.com. Sustituye esos valores por los de tu proyecto.

No publiques paneles privados sin protección adicional.

Una aplicación publicada mediante un hostname público puede ser accesible desde Internet. Para paneles administrativos o servicios privados, añade Cloudflare Access.

Paso 2

Comprobar que la aplicación funciona localmente

Antes de crear el Tunnel, comprueba que el servicio responde desde el propio servidor. Esto evita confundir un problema de la aplicación con un problema de Cloudflare.

curl -I http://localhost:3000

Una respuesta HTTP 200, 301, 302 u otro estado esperado de tu aplicación indica que el servicio está accesible.

Si la aplicación está en otro equipo de la LAN

También puedes usar una dirección como http://192.168.1.20:3000. El servidor que ejecuta cloudflared debe poder alcanzar esa IP y puerto.

Paso 3

Instalar cloudflared en Ubuntu

Cloudflare ofrece un repositorio APT oficial para Debian y Ubuntu. Primero crea el directorio de llaves y descarga la llave de firma:

sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

Añade el repositorio:

echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main" | sudo tee /etc/apt/sources.list.d/cloudflared.list

Actualiza los índices e instala el paquete:

sudo apt-get update && sudo apt-get install cloudflared

Comprueba la instalación:

cloudflared --version

Paso 4

Crear el Tunnel desde Cloudflare

Para la mayoría de instalaciones nuevas recomendamos el método administrado desde Cloudflare.

  1. Entra al Dashboard de Cloudflare.
  2. Ve a Networking → Tunnels.
  3. Selecciona Create Tunnel.
  4. Escribe un nombre descriptivo, por ejemplo servidor-casa.
  5. Confirma con Create Tunnel.
  6. En Setup Environment, selecciona Linux y la arquitectura de tu servidor.
¿Por qué administrado remotamente?

La configuración del Tunnel queda almacenada en Cloudflare y puedes administrar rutas y aplicaciones desde el Dashboard sin editar archivos YAML en el servidor.

Paso 5

Conectar Ubuntu al Tunnel

Cloudflare mostrará un comando que contiene un token exclusivo del Tunnel. El formato es similar a este:

sudo cloudflared service install <TUNNEL_TOKEN>

Copia el comando real que aparece en tu Dashboard y ejecútalo en Ubuntu. Esto registra cloudflared como servicio y conecta el servidor con tu Tunnel.

El token es una credencial.

No lo publiques en GitHub, capturas, videos, foros ni archivos compartidos. Quien tenga un token válido puede ejecutar un conector para ese Tunnel.

Comprueba el servicio:

sudo systemctl status cloudflared

En el Dashboard, el Tunnel debería aparecer como Healthy.

Paso 6

Publicar la aplicación con un subdominio

Ahora vamos a asociar un hostname público con el servicio local.

  1. Abre el Tunnel que acabas de crear.
  2. Ve a Routes y selecciona Add route.
  3. Selecciona Published application.
  4. En Hostname, escribe el subdominio y selecciona tu dominio, por ejemplo app.example.com.
  5. En Service URL, escribe http://localhost:3000.
  6. Guarda con Add route.

Cuando agregas la ruta desde el Dashboard, Cloudflare crea el registro DNS que apunta al Tunnel. No necesitas abrir el puerto 3000 en el router.

Servicio en otra máquina

Si la aplicación corre en otro equipo de tu red, el Service URL puede ser algo como http://192.168.1.20:3000.

HTTPS local

Si el servicio de origen utiliza HTTPS, usa una URL como https://localhost:8443. Si hay certificados propios o nombres de servidor específicos, revisa las opciones TLS del origen antes de desactivar la verificación de certificados.

Paso 7

Comprobar que el Tunnel funciona

Abre el hostname desde un navegador o comprueba las cabeceras desde la terminal:

curl -I https://app.example.com

También puedes revisar las últimas líneas del servicio:

sudo journalctl -u cloudflared -n 50 --no-pager
Señal de que todo está bien

El Tunnel aparece Healthy, el servicio local sigue respondiendo y el hostname público abre la aplicación mediante HTTPS.

Paso 8

Uso diario y seguridad

Comprobar el estado del servicio

systemctl status cloudflared

Reiniciar el conector

sudo systemctl restart cloudflared

Ver logs en tiempo real

sudo journalctl -u cloudflared -f

Agregar más aplicaciones

Un mismo Tunnel puede publicar múltiples aplicaciones. Desde Routes, añade otro hostname y apunta cada uno al puerto o servicio local correspondiente.

Proteger aplicaciones privadas con Cloudflare Access

Si publicas Home Assistant, un panel administrativo, una API interna u otra aplicación que no debería ser pública, crea una aplicación de Cloudflare Access y una política que exija autenticación antes de permitir el acceso.

Tunnel no sustituye la autenticación de tu aplicación.

Cloudflare Tunnel transporta y publica el tráfico. Si el hostname no tiene una política de Access ni autenticación propia, cualquier persona que conozca la URL puede intentar acceder.

Alternativa

Tunnel administrado localmente con config.yml

Cloudflare mantiene el método administrado localmente para escenarios específicos. En este modelo, el servidor conserva las credenciales y las reglas de ingress en archivos locales.

Primero autentica cloudflared:

cloudflared tunnel login

Crea el Tunnel:

cloudflared tunnel create mi-tunnel

Comprueba los túneles disponibles:

cloudflared tunnel list

Una configuración típica con varias reglas usa un archivo config.yml parecido a este:

tunnel: <TUNNEL-UUID>
credentials-file: /home/usuario/.cloudflared/<TUNNEL-UUID>.json

ingress:
  - hostname: app.example.com
    service: http://localhost:3000
  - service: http_status:404

Las reglas de ingress deben terminar con una regla catch-all. Para crear el DNS:

cloudflared tunnel route dns mi-tunnel app.example.com

Y para probar el Tunnel manualmente:

cloudflared tunnel run mi-tunnel
Recomendación para instalaciones nuevas

Si no necesitas mantener la configuración localmente, utiliza el método administrado desde el Dashboard. Es el flujo recomendado actualmente por Cloudflare para la mayoría de casos.

Listo

Tu aplicación ya está publicada mediante Cloudflare Tunnel

Desde este punto puedes añadir más hostnames, proteger servicios con Cloudflare Access y mantener varias aplicaciones detrás del mismo servidor sin abrir puertos de entrada en el router.

Fuentes oficiales