BookinglyTech News
Infraestructura

Jellyfin falla en apps móviles tras exponer el servidor mediante Cloudflare Tunnel

Un usuario de Ubuntu con Docker y Cloudflare Tunnel logra acceder a Jellyfin desde navegadores, pero las apps de iOS, Apple TV y Shield no conectan.

2 min de lecturar/selfhosted0 vistas

Un administrador de sistemas ha montado un servidor de medios con Jellyfin en una máquina Ubuntu usando contenedores Docker. Además, ha configurado Portainer y un túnel de Cloudflare para exponer la instancia al exterior y restringir el acceso mediante el identificador de Google que actúa como filtro de usuarios.

Desde cualquier navegador web, la URL pública (p.ej. jellyfin.ejemplo.com) carga la interfaz de Jellyfin sin problemas y muestra el candado de conexión segura. Sin embargo, al introducir la misma dirección en la aplicación nativa de Jellyfin en dispositivos Shield, Apple TV e iPhone, la app devuelve unable to connect y Connection timed out.

El autor sospecha que el problema podría estar en el certificado TLS, pero también contempla la posibilidad de una configuración de red incorrecta, como puertos bloqueados o incompatibilidad del túnel con los clientes nativos. En un entorno Docker, el contenedor de Jellyfin suele escuchar en el puerto 8096 (HTTP) y 8920 (HTTPS). Cloudflare Tunnel crea un endpoint externo que reenvía tráfico al puerto interno especificado; si el túnel solo reenvía HTTP, la app, que prefiere HTTPS, no podrá establecer la conexión.

Una causa frecuente es que los clientes móviles y de TV requieren que el certificado presentado coincida exactamente con el nombre de host usado en la URL. Si el túnel emplea el certificado de Cloudflare para el dominio jellyfin.ejemplo.com, pero la app intenta validar un certificado auto‑firmado o un certificado de otro dominio, la verificación falla y la conexión se aborta. En navegadores, la tolerancia a ciertos errores de certificado es mayor, lo que explica la diferencia de comportamiento.

Para diagnosticar, se recomienda:

  1. Verificar que el túnel reenvíe tanto el puerto HTTP como el HTTPS del contenedor.
  2. Comprobar que el certificado TLS sea válido para el dominio público y que la cadena de confianza esté completa.
  3. Usar curl -v https://jellyfin.ejemplo.com desde una máquina externa para observar la negociación TLS.
  4. Revisar los logs de Jellyfin y de Cloudflare Tunnel en busca de rechazos de conexión o errores de certificado.

Si el túnel solo abre el puerto 80, la app intentará conectarse por 443 y fallará. Configurar el túnel para exponer ambos puertos o forzar a la app a usar HTTP (aunque menos seguro) resolvería el bloqueo.

En conclusión, el problema probablemente no sea una cuestión de “magia de certificados” sino una combinación de configuración de puertos y certificación TLS dentro del túnel. Ajustar la exposición del túnel y asegurarse de que el certificado coincida con el dominio público debería permitir que las apps de Jellyfin se conecten sin errores.