Edge Shield para Jellyfin — guía
Instalación
Necesitas Jellyfin Server 12.2 o superior y una cuenta de MediaLab Works con una licencia que cubra el plugin (una suscripción activa, una licencia de por vida dentro de su período de actualizaciones, el paquete de Jellyfin o la prueba gratuita de 30 días).
Desde tu repositorio de plugins (recomendado). Jellyfin instala y actualiza el plugin por sí solo.
- En tu cuenta de MediaLab Works abre Licenses → Jellyfin plugin repository y haz clic en Create address. Cópialo: es privado (contiene un token), así que no lo compartas; puedes regenerarlo o revocarlo en cualquier momento.
- En Jellyfin abre Dashboard → Plugins → Repositories, haz clic en +, dale un nombre (por ejemplo MediaLab Works), pega la dirección y guarda.
- En Dashboard → Plugins → Catalog busca Edge Shield by MediaLab, haz clic en Install y reinicia Jellyfin.
El repositorio lista solo los plugins que cubren tus licencias, y solo las versiones que permiten. Sus enlaces de descarga están firmados y caducan a las pocas horas, así que Jellyfin siempre lee una lista nueva.
Desde el catálogo público. https://medialab.works/jellyfin/manifest.json lista cada plugin publicado de MediaLab Works con su compilación pública; medialab Server lo añade por sí solo. Puedes añadirlo del mismo modo para instalar un plugin antes de tener una clave: el plugin entonces pide la licencia, o inicia la prueba, en su página License. Con una licencia de por vida cuyo período de actualizaciones ha terminado, mantente en tu repositorio privado, que ofrece solo las versiones que tu licencia permite.
Manualmente, desde un archivo zip.
- En Account → Licenses descarga
jf-edgeshield_x.y.z.zip(el SHA-256 del archivo se muestra junto al botón). - Extráelo en una carpeta nueva
Edge Shield by MediaLab_x.y.z.0dentro de la carpeta de plugins de Jellyfin:- Linux (paquete):
/var/lib/jellyfin/plugins/ - Docker (imagen oficial):
/config/plugins/en el volumen de configuración - Windows:
%ProgramData%\Jellyfin\Server\plugins\
- Linux (paquete):
- Reinicia Jellyfin.
Activación de la licencia
- Abre la página del plugin en Dashboard → Plugins → Edge Shield by MediaLab y haz clic en License.
- Pega tu clave de licencia y haz clic en Activate with key. El plugin contacta con el servidor de licencias, vincula la clave a este servidor de Jellyfin y muestra la licencia como Active.
- ¿Aún no tienes clave? En la misma página escribe tu correo e inicia la prueba gratuita de 30 días (se necesita tarjeta, nada que pagar hoy) o compra una licencia; el plugin se activa solo cuando el pago se ha hecho.
La licencia se comprueba una vez al día y en cada arranque de Jellyfin. Sin internet, el plugin sigue funcionando durante 7 días tras la última comprobación exitosa. Sin una licencia válida, el plugin detiene su trabajo y solo su página License sigue funcionando (prueba, clave, renovación); no se borra nada y todo se reanuda en cuanto la licencia es válida de nuevo. Move license (release this server) en la misma página libera la clave para otro servidor.
Actualizaciones y vuelta atrás
- Desde el repositorio: Jellyfin muestra las versiones nuevas en Dashboard → Plugins y puede actualizar el plugin automáticamente; reinicia Jellyfin para cargar la nueva versión.
- Desde la página License del plugin: con una licencia válida, Install update instala la versión más nueva que tu licencia permite y Roll back to x.y.z vuelve a la versión anterior (por ejemplo, si algo dejó de funcionar tras una actualización). Reinicia Jellyfin después de cualquiera de las dos. Ambos paquetes se comprueban contra la suma de verificación publicada por el servidor de licencias.
- Una licencia de por vida recibe las versiones publicadas durante su período de actualizaciones; después, el plugin sigue funcionando en la última versión que puede usar.
- Tras una vuelta atrás, si tu repositorio de plugins está añadido en Jellyfin, la tarea programada Update Plugins de Jellyfin (en el arranque y cada día) instala de nuevo la versión más nueva. Para permanecer un tiempo en la versión anterior, quita los desencadenantes de esa tarea en Dashboard → Scheduled Tasks y añádelos de nuevo más tarde.
Código fuente
El código fuente GPL-3.0 de cada versión está en Account → Licenses (Source code), junto a la descarga, como archivo .tar.gz creado a partir del commit exacto de esa versión.
Configuración
- Connection: en Cloudflare crea un token de API (Create Token → Custom token), restringido a tu zona, con los permisos que indica la página: Zone · Zone · Read, Zone · DNS · Edit, Zone · Zone Settings · Edit, Zone · SSL and Certificates · Edit, Zone · Zone WAF · Edit, Zone · Single Redirect · Edit, Zone · Cache Rules · Edit, Zone · Origin Rules · Edit y Account · Account Filter Lists · Edit. Pégalo y elige la zona (tu dominio). El token se guarda cifrado en el servidor y no se vuelve a mostrar nunca; un permiso que falta se indica con su nombre en la página de estado.
- Mode:
- Recomendado: la interfaz por Cloudflare, el vídeo directo («stream offload»). El host de la aplicación pasa por el proxy de Cloudflare; las solicitudes de vídeo, audio y descarga se redirigen (307) al host de streaming, que es «DNS only» y va directo a tu servidor.
- DNS only (sin proxy): Cloudflare solo para DNS, DDNS y el certificado. Las reglas WAF y los bloqueos en el borde no se aplican, porque el tráfico no pasa por Cloudflare.
- Names and ports: el app host (por ejemplo
media.example.com) con el puerto HTTPS que usan tus clientes (443 o uno de los puertos que Cloudflare enruta por proxy: 2053, 2083, 2087, 2096, 8443), el puerto externo que tu router redirige al servidor (si es distinto, Edge Shield añade una regla de origen) y el streaming host (por ejemplodirect.example.com) con su puerto HTTPS externo. La IPv4 pública se detecta cuando el campo está vacío; DDNS mantiene los registros actualizados cuando cambia. - Server certificate: Let's Encrypt automatically (DNS-01, with the token) para ambos nombres, o uno que gestiones tú. Full (strict) necesita un certificado válido en el servidor. El certificado se renueva 30 días antes de que caduque.
- TLS: la versión mínima de TLS y, opcionalmente, HSTS en el app host (actívalo solo cuando HTTPS funcione de forma fiable; es difícil de deshacer).
- Protection: bloqueo automático de las IP con inicios de sesión fallidos (por defecto 5 en 10 minutos y 24 horas, ×4 en cada repetición), las IP o rangos CIDR que nunca deben bloquearse, el límite de frecuencia de inicio de sesión (más de 10 solicitudes en 10 s desde una IP → bloqueo de 10 s), el bloqueo de cabeceras IP enviadas por el cliente y los países permitidos (códigos ISO; vacío significa todos). The streaming host accepts media paths only (activado por defecto): cualquier otra solicitud a ese host recibe un 403.
- Guarda y abre Status and fixes; haz clic en Fix everything para que los ajustes y las reglas lleguen a Cloudflare y a Jellyfin. Restart Jellyfin cuando la página lo indique (HTTPS, el certificado y los rangos de Cloudflare en los proxies conocidos de Jellyfin surten efecto tras un reinicio; los rangos se actualizan a diario y la página pide un reinicio cuando cambian).
Uso diario
- La status page comprueba el token, los registros DNS, los ajustes TLS, el certificado, las reglas, la IP real del cliente y HTTPS en Jellyfin; cada problema tiene un botón Fix.
- Blocked IPs: la lista muestra la dirección, el motivo y la caducidad; puedes desbloquear una IP o bloquearla a mano, con una nota y una duración. Tu LAN, los rangos de Cloudflare y la lista de permisión nunca se bloquean.
- Under Attack: actívalo de 30 minutos a 12 horas durante un ataque; se desactiva solo. Mientras está activo, las apps nativas (Android TV, Roku, iOS, Kodi…) no pueden conectar.
- Port restriction (firewall): la página muestra comandos listos para que solo Cloudflare pueda llegar al puerto del app host; Edge Shield nunca cambia tu firewall por sí mismo.
- Remove the Edge Shield rules elimina solo las reglas que creó el plugin; los ajustes DNS y TLS quedan como están.
Qué envía y adónde
- A Cloudflare, con tu token: ajustes de la zona, registros DNS con tu IP pública, reglas y las IP que bloquear. El comentario de una entrada de la lista de bloqueo solo guarda la caducidad y el motivo (el número de inicios de sesión fallidos, o «manual» con tu nota). Desde la 0.1.1 el nombre de usuario intentado no se envía a Cloudflare; se queda en la lista de bloqueo y en el registro de tu servidor.
https://www.cloudflare.com/cdn-cgi/tracepara detectar la IP pública, y la API pública de Cloudflare para sus rangos de IP (a diario).- A Let's Encrypt: la solicitud del certificado para tus nombres de host; la clave privada se queda en tu servidor.
- No va nada a medialab.works salvo la comprobación de la licencia.
Solución de problemas
- «The token lacks the … permission»: edita el token en Cloudflare, añade el permiso que se muestra y haz clic de nuevo en Fix.
- «Video would flow through the Cloudflare CDN»: el app host tiene el proxy activado pero no hay ningún streaming host configurado. Define un streaming host («DNS only») o cambia al modo DNS only.
- «The server's public IP could not be detected»: introduce la IPv4 pública en los ajustes.
- Las apps no pueden conectar: comprueba que Under Attack esté desactivado y que el puerto externo del streaming host se redirija al puerto HTTPS de Jellyfin.
- Los cambios no aparecen en Jellyfin: la página de estado indica Restart needed; reinicia Jellyfin.