Durante semanas he estado dándole vueltas al tema para pensar en una arquitectura autoalojada para…
Cómo exponer tu servidor casero con Cloudflare Tunnel (ejemplo con Navidrome)
Si quieres escuchar tu música fuera de casa sin pelearte con el router, UPnP o certificados, esta guía es tu salvoconducto. He montado Cloudflare Tunnel para llevar el Navidrome (Docker en Linux) a Internet con SSL gestionado, cero puertos abiertos y control total. Pim, pam, toma lacasitos.
Llevaba tiempo dándole vueltas a cómo exponer mis servicios caseros sin montar el circo de los puertos abiertos, NAT, certificados caducados y demás dolores de cabeza. Ya os conté en esta entrada sobre mi homelab cómo tengo montado mi tinglado musical con Navidrome.
Pero claro, de poco sirve tener toda tu música bien organizada si no puedes escucharla cuando sales de casa. Ahí es donde entró en juego la charla con mi colega Rubén (también SRE y programador de los que se pelean con la máquina y ganan). Me soltó:
“Tío, deja de sufrir. Tira de Cloudflare Tunnel y lo tienes en dos patadas, con SSL y sin abrir ni un maldito puerto.”
Y dicho y hecho. Me lié la manta a la cabeza, monté el túnel y ahora escucho mi música desde cualquier sitio, como un señor. Aquí te dejo la receta completa, para que tú también te lo montes y dejes de llorar delante del router.
1. Preparar el dominio
C:\> Requisitos mínimos para no llorar más tarde:
-
-
- Un dominio (ej.:
ejemplo.com.es
) dedicado a tus servicios caseros. Yo me he cogido un .com.es en dondominio pensando en tener algo económico. - El dominio debe estar gestionado por Cloudflare (nameservers apuntando a Cloudflare).
- Un dominio (ej.:
-
Ojocuidao: Cloudflare no acepta solo subdominios. Tiene que gestionar el dominio entero.
2. Instalar cloudflared en el servidor
En el host donde corre Navidrome (Linux+ Docker):
sudo apt update && sudo apt install -y curl
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
3. Crear y autenticar el túnel
- Login contra tu cuenta de Cloudflare:
cloudflared tunnel login
Abre una URL en el navegador para seleccionar tu dominio gestionado.
- Crear el túnel:
cloudflared tunnel create navidrome-tunnel
- Mover credenciales a la ruta del sistema:
sudo mkdir -p /etc/cloudflared sudo mv ~/.cloudflared/*.json /etc/cloudflared/ sudo chown root:root /etc/cloudflared/*.json
4. Configurar el túnel
Edita /etc/cloudflared/config.yml
con tus datos. Placeholder everywhere:
tunnel: <ID_DEL_TUNEL>
credentials-file: /etc/cloudflared/<ID_DEL_TUNEL>.json
ingress:
- hostname: subdominio.ejemplo.com.es
service: http://localhost:4533
- service: http_status:404
Navidrome por defecto expone en 4533
. Ajusta si cambiaste el puerto o usas un reverse proxy local.
Valida la sintaxis antes de liarla:
sudo cloudflared --config /etc/cloudflared/config.yml tunnel ingress validate
5. Asociar el subdominio en Cloudflare (DNS)
Deja que cloudflared
cree el CNAME mágico hacia el túnel:
cloudflared tunnel route dns navidrome-tunnel subdominio.ejemplo.com.es
Esto genera un CNAME que apunta a 123456789.cfargotunnel.com
, por ejemplo, aunque será lo que realmente toque. Tú no tocas más DNS. Esta es el magia que hará que aparzca el registro directamente en cloudflare sin que tengas que hacer nada.
6. Probar el túnel
Primero en primer plano para ver logs claros y enterarse bien de qué va la movida:
sudo cloudflared --config /etc/cloudflared/config.yml tunnel run navidrome-tunnel
Luego, abre el navegador y visita:
https://subdominio.ejemplo.com.es
Si aparece el login de Navidrome, vas bien:

7. Arranque automático con systemd
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
# Logs en vivo
journalctl -u cloudflared -f
Con esto, reinicias la máquina y el túnel se levanta solo como un campeón. Para que no haya más sufrimiento del necesario
Resultado rápido
Item | Estado |
---|---|
Acceso externo | https://subdominio.ejemplo.com.es |
SSL | Gestionado por Cloudflare |
Puertos en router | No hace falta abrir nada |
Servicios extra | Reutiliza túnel y añade ingress (ej.: ombi.ejemplo.com.es , jellyfin.ejemplo.com.es ) |
Tip: para añadir más servicios, duplica bloques
ingress
con hostname
y service
apuntando al puerto correspondiente y listo.FAQ mínimas (porque te las vas a preguntar)
¿Hace falta IPv6 pública o abrir el 443? No. El túnel sale desde dentro hacia Cloudflare.
¿Y si el dominio no está en Cloudflare? Muévelo o no hay túnel con DNS gestionado.
¿Puedo proteger con Access (Zero Trust)? Sí. Añade políticas en Cloudflare Access por grupo/identidad.
¿Rinde para streaming? Sí. Para audio va sobrado. Latencia mínima y SSL incluido.
Resumen
Montar Navidrome expuesto con Cloudflare Tunnel es básicamente: dominio en Cloudflare, cloudflared
, un config.yml
de dos líneas y a volar. Sin abrir puertos, con certificados y con tu música sonando en cualquier sitio. Menos lloros, más temazos.
Comments (0)