Por qué dejar Plex en 2026: 36.000 servidores expuestos
El 9 de septiembre de 2026, Shadowserver publicó sus hallazgos: más de 36.000 servidores Plex accesibles desde internet no habían aplicado la actualización 1.43.3, disponible desde el 19 de mayo. Dos CVE son el núcleo de este aviso. CVE-2026-96656 (CVSS 7.2) permite a un atacante con privilegios de administración escribir archivos arbitrarios que se ejecutan al inicio, es decir, cargar un plugin malicioso que instala un rootkit sin ninguna verificación de firma ni bit de ejecución. CVE-2026-96651 (CWE-22, path traversal) permite a cualquier sesión autenticada leer cualquier archivo accesible por el usuario de sistema de Plex, incluido el PlexOnlineToken. Combinadas, estas dos vulnerabilidades cubren un escenario de escalada completo: robo de sesión y luego ejecución de código. Plex corrigió ambas en la build 1.43.3.10861; la build 1.43.3.10896 es el objetivo recomendado. El problema estructural persiste: Plex es software propietario cuyo ciclo de parches depende de un único fabricante, y 36.000 administradores no habían aplicado una corrección de cuatro meses de antigüedad.
Lo que Plex oculta detrás de su modelo cloud
Plex ofrece una interfaz cuidada, pero su modelo en la nube introduce dependencias ocultas que se vuelven problemáticas ante parches de seguridad o discontinuación del servicio.
- Acceso remoto vía Plex Relay: cada stream pasa por los servidores de plex.tv, aunque tu VPS sea el único que almacena los archivos. Plex ve tus metadatos de reproducción.
- Plex Pass obligatorio para funciones clave: sincronización sin conexión, acceso multiusuario completo, TV en directo y acceso remoto sin reenvío de puertos están reservados para los suscriptores de pago.
- Autenticación centralizada: el inicio de sesión de tus clientes pasa por los servidores de Plex. Una caída de plex.tv te desconecta de tus propios archivos.
- Actualizaciones no controladas: Plex puede desplegar cambios en el lado del servidor (relay, autenticación) sin que puedas auditarlos ni bloquearlos.
- Telemetría activa por defecto: reproducción, búsquedas y hábitos de visualización se envían al fabricante a menos que los deshabilites manualmente en cada cliente.
Requisitos previos antes de comenzar la migración
Este procedimiento está orientado a un VPS root con Debian 12 o Ubuntu 22.04 LTS. Necesitas acceso SSH con root o sudo, Docker y Docker Compose instalados (v2+) y un directorio de medios accesible en lectura. Toma un snapshot del VPS antes de comenzar — los snapshots son reversibles con un solo comando y cuestan menos de una hora de cómputo. Jellyfin reemplaza la biblioteca de vídeo; Navidrome reemplaza la biblioteca de música. Ambos son de código abierto, sin suscripción, y se exponen detrás de un reverse proxy Nginx.
Migración Plex → Jellyfin: paso a paso
Aquí está el procedimiento completo para migrar tu biblioteca Plex a Jellyfin sin perder datos ni historial de visualización.
Crear un snapshot del VPS
Primero:
snapshot create plex-before-migrationdesde el panel de tu proveedor (o la API equivalente). Este paso es tu red de seguridad; no lo omitas.Detener Plex correctamente
systemctl stop plexmediaserver systemctl disable plexmediaserverEspera la confirmación de parada antes de continuar. Plex no debe seguir escuchando en el puerto 32400.
Instalar Jellyfin con Docker Compose
# /opt/jellyfin/docker-compose.yml services: jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin restart: unless-stopped ports: - "8096:8096" volumes: - /opt/jellyfin/config:/config - /opt/jellyfin/cache:/cache - /data/media:/media:ro environment: - JELLYFIN_PublishedServerUrl=https://jellyfin.tu-dominio.comSustituye
/data/mediapor la ruta exacta de tus archivos. El volumen se monta en solo lectura (:ro) como medida de precaución.Iniciar Jellyfin y ejecutar el asistente de configuración
cd /opt/jellyfin && docker compose up -dAccede a
http://IP-DEL-VPS:8096para el asistente web. Crea la cuenta de administrador y añade tus bibliotecas apuntando a/media/peliculas,/media/series, etc.Escanear bibliotecas y verificar metadatos
Jellyfin usa The Movie Database (TMDB) y TheTVDB por defecto. El primer escaneo completo tarda entre 5 y 30 minutos según el tamaño de la biblioteca. Verifica que las carátulas, sinopsis y valoraciones se muestran correctamente. Si un título no se reconoce automáticamente, usa la función Identificar para forzar la coincidencia.
Configurar los clientes de Jellyfin
Las aplicaciones oficiales de Jellyfin están disponibles en Android, iOS, Apple TV, Android TV, Roku y navegadores. Son gratuitas y de código abierto. Apunta cada cliente hacia la URL interna o pública de tu servidor; no se requiere autenticación de terceros.
Verificar transcodificación y subtítulos
En Panel > Reproducción, activa la transcodificación por hardware si tu VPS tiene GPU (Intel Quick Sync, NVIDIA NVENC). Prueba un archivo H.265 desde un cliente móvil para validar que la transcodificación por software funciona como respaldo. Verifica también que los subtítulos SRT y ASS/SSA se muestran correctamente.
Eliminar Plex
apt remove plexmediaserver --purge rm -rf /var/lib/plexmediaserverSolo elimina la instalación antigua después de validar Jellyfin en al menos un cliente durante 48 horas.
Migración musical: Plex → Navidrome
Navidrome es un servidor de música de código abierto compatible con la API Subsonic, lo que le da acceso a todo el ecosistema de clientes (DSub, Symfonium, Ultrasonic, Airsonic, etc.). Lee etiquetas ID3 v2.3 y v2.4, y archivos FLAC, MP3, AAC, OGG y Opus. Las listas de reproducción M3U presentes en tu directorio de música se importan automáticamente siempre que las rutas sean relativas a la raíz musical.
Verificar la estructura de carpetas
Navidrome espera una jerarquía
Artista/Álbum/Pista.mp3. Si tus archivos ya están organizados así (lo que Plex también requiere), no es necesaria ninguna reorganización. Comprueba la ausencia de caracteres especiales en los nombres de carpetas (/,:,?).Auditar las etiquetas ID3
find /data/music -name '*.mp3' | head -20 | xargs id3v2 -lLos campos
TPE1(artista),TALB(álbum) yTIT2(título) deben estar rellenos. Un archivo sin estas tres etiquetas se importará pero sin metadatos visibles. La herramientabeetspuede corregir etiquetas faltantes en masa a través de su base de datos MusicBrainz.Migrar listas de reproducción de Plex
Plex no exporta listas de reproducción en formato M3U de forma nativa desde la interfaz. Usa la herramienta
plexapide Python para exportar:python3 -m plexapi.playlist export --token TU_TOKEN --output /data/music/playlists/. Los archivos M3U generados son importados automáticamente por Navidrome si las rutas son relativas al volumen/music.
Comparativa Plex vs Jellyfin vs Navidrome
La siguiente tabla compara los criterios esenciales para elegir entre Plex, Jellyfin y Navidrome.
Desplace la tabla
| Criterio | Plex | Jellyfin | Navidrome |
|---|---|---|---|
| Licencia | Propietario (freemium) | GPL-2.0 código abierto | GPL-3.0 código abierto |
| Acceso remoto sin suscripción | No (requiere Plex Pass) | Sí, nativo | Sí, nativo |
| Autenticación de terceros requerida | Sí (plex.tv) | No | No |
| Biblioteca de vídeo | Sí | Sí | No (solo música) |
| Biblioteca de música | Sí (limitado) | Parcial | Sí (especializado) |
| Transcodificación por hardware | Requiere Plex Pass | Nativa (NVENC, QSV, VAAPI) | N/A (solo audio) |
| Clientes móviles oficiales | De pago en iOS/Android | Gratuitos, código abierto | Clientes Subsonic de terceros |
| Dependencia de la nube | Alta (relay, auth) | Ninguna | Ninguna |
Configuración de Nginx como reverse proxy para Jellyfin
Jellyfin debe exponerse mediante HTTPS. La configuración siguiente asume un certificado Let's Encrypt gestionado por Certbot o tu CDN en modo Full (strict). Nunca expongas el puerto 8096 directamente; pasa siempre por Nginx.
# /etc/nginx/sites-available/jellyfin
server {
listen 80;
server_name jellyfin.tu-dominio.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name jellyfin.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/jellyfin.tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jellyfin.tu-dominio.com/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
location / {
proxy_pass http://127.0.0.1:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_read_timeout 3600;
}
}Aplica la misma estructura para Navidrome reemplazando el puerto por 4533. Activa la configuración con nginx -t && systemctl reload nginx.
Solución de problemas: los 3 errores más frecuentes
Estos son los tres problemas más frecuentes durante una migración Plex/Jellyfin, con sus soluciones directas.
- Biblioteca vacía tras el primer escaneo: verifica que la ruta montada en Docker corresponde exactamente al directorio que contiene tus archivos.
docker exec jellyfin ls /mediadebe listar tus carpetas. Si el volumen está vacío, corrige el mapeo en docker-compose.yml y reinicia el contenedor. - Transcodificación falla con error ffmpeg: Jellyfin incluye su propia versión de ffmpeg. Si el contenedor no tiene acceso a GPU, deshabilita la transcodificación por hardware en Panel > Reproducción y cambia a transcodificación por software. En un VPS sin GPU, esta es la configuración normal.
- Los clientes iOS/Android no encuentran el servidor: asegúrate de que el cortafuegos permite el puerto 443 desde el exterior (
ufw allow 443), que tu DNS apunta a la IP del VPS y que el certificado TLS es válido. Prueba concurl -I https://jellyfin.tu-dominio.com/healthdesde tu máquina local.
Mantén Plex deshabilitado (no desinstalado) durante las primeras 48 horas tras la migración. El snapshot del VPS te permite volver atrás en menos de cinco minutos. Solo elimina los archivos de configuración de Plex (/var/lib/plexmediaserver) después de confirmar que todos tus clientes funcionan correctamente en Jellyfin y Navidrome.
Conclusión
Los 36.000 servidores Plex sin parche no son señal de negligencia individual: revelan una dependencia estructural de un fabricante propietario cuyo ciclo de parches es opaco. CVE-2026-96656 y CVE-2026-96651 muestran que esa dependencia tiene un coste medible. Jellyfin y Navidrome te devuelven el control: sin autenticación de terceros, sin relay cloud, sin suscripción para el acceso remoto. La migración lleva menos de una hora con esta guía; la biblioteca llega intacta. Si alojas tus medios en un VPS root, ya no hay razón para esperar.