Vous montez dans un TGV pour Marseille. Trois heures de trajet, vous avez téléchargé un épisode Netflix, mais vous vous souvenez qu'une saison complète de « Severance » vous attend en 1080p sur votre Jellyfin maison. Vous vous connectez au Wi-Fi du wagon-bar, ouvrez l'application Jellyfin sur votre téléphone. Les huit premières secondes passent bien. Puis buffering. Le bitrate chute de 8 Mbps à 2. De 1080p à 480p. Le visage de Ben Stiller devient une mosaïque JPEG. Pause, redémarrage - pareil. WireGuard ? Encore pire, parce que le chiffrement et la fragmentation MTU s'ajoutent. Vous repassez sur le Netflix téléchargé. La plupart des méthodes de streaming distant sont tout simplement cassées - et ce n'est pas la faute de votre Wi-Fi.
Pourquoi Jellyfin est plus difficile à streamer que HA ou Nextcloud#
Home Assistant pousse quelques kilo-octets de télémétrie et un instantané de caméra de temps en temps. La sync Nextcloud tourne une fois par jour et peut attendre. Jellyfin doit livrer un flux constant avec un débit garanti, sans frame drops, sans pause supérieure au buffer du player (typiquement 10 secondes).
La bande passante est une équation impitoyable. 4K HDR HEVC = 25 Mbps soutenus. 1080p H.264 = 8 Mbps. WireGuard + fragmentation UDP + retransmissions = surcharge réelle de 20-30% end-to-end. Vos 50 Mbps d'upload domestique deviennent soudainement 35 Mbps utilisables - critiquement proche des 25 Mbps requis pour la 4K.
HTTPS est exigé par les players modernes. Chromecast refuse de cast les flux HTTP depuis 2023. Jellyfin Mobile (iOS/Android) demande TLS pour la lecture en arrière-plan. Jellyfin Web dans Chrome bloque le mixed content. Sans HTTPS - seul le navigateur desktop avec --disable-web-security fonctionne. Donc rien.
Cloudflare Tunnel a une limite de streaming inscrite dans ses CGU - la Section 2.8 du Self-Serve Subscription Agreement interdit l'usage des services gratuits pour « caching or serving disproportionate amounts of non-HTML content ». En pratique : au-delà de ~50 Go/mois de vidéo, vous recevez d'abord un avertissement, puis un bannissement de la sous-domaine. Jellyfin avec une famille qui regarde des séries après le travail = 200 Go/mois facilement.
DLNA / uPnP suppose un broadcast UDP local sur le port 1900. Ne fonctionne pas via VPN, ne fonctionne pas via tunnel HTTP - oubliez DLNA pour l'accès distant.
4 façons d'accéder à Jellyfin à distance - classement brutal#
1. Redirection de port 8096#
Comment ça marche : vous ouvrez le port 8096 (HTTP) ou 8920 (HTTPS) sur le routeur, vous le pointez vers la machine Jellyfin. Configurez DynDNS (mesfilms.duckdns.org), générez un cert Let's Encrypt via certbot ou un reverse proxy, et voilà - Jellyfin accessible publiquement.
Avantages : zéro dépendance externe, contrôle total, latence minimale (1 hop).
Inconvénients :
- Pas d'HTTPS by default - le port 8096 est en HTTP brut, vous devez ajouter Caddy/Nginx + LE séparément.
- Vous exposez le panel admin Jellyfin à internet public. CVE-2023-49096 (path traversal) et similaires apparaissent régulièrement.
- Ne fonctionne pas derrière CGNAT (opérateurs mobiles, certaines fibres). Vérifiez l'IP routeur - si elle commence par
100.64.x.xà100.127.x.x, vous êtes derrière CGNAT. - Les bots Shodan trouvent votre Jellyfin dans les 6 heures suivant l'ouverture du port.
Verdict : comme HA en port forwarding - peu sûr et sans HTTPS by default.
2. WireGuard VPN#
Comment ça marche : vous montez WG sur le routeur (UniFi, MikroTik, OpenWRT) ou dans un conteneur séparé. Chaque appareil de la maisonnée a l'app WG et une config peer. Ils se connectent comme s'ils étaient à la maison, Jellyfin reste sur le LAN (http://192.168.1.50:8096).
Avantages : chiffrement ChaCha20 fort, zéro exposition de Jellyfin, accès aussi aux autres services maison.
Inconvénients :
- App sur chaque appareil. Votre conjointe doit lancer WireGuard avant de regarder une série dimanche ? Bonne chance. Les enfants sur Switch ? Pas de WG là-dedans.
- Chromecast / smart TVs ne supportent pas WG. Pas d'app native = pas de streaming sur grand écran à l'hôtel.
- Surcharge ~20-30% sur le débit HD/4K.
- Ne fonctionne pas derrière CGNAT côté serveur - votre routeur derrière CGNAT = clients externes inaccessibles à votre WG.
Verdict : correct pour un dev solo qui regarde seul sur laptop. Médiocre pour la famille et les grands écrans.
3. Cloudflare Tunnel#
Comment ça marche : installez cloudflared sur la machine Jellyfin, autorisez le tunnel, dans le panel CF mappez mesfilms.votredomaine.fr → http://localhost:8096. HTTPS automatique via le CDN Cloudflare.
Avantages : gratuit, fonctionne derrière CGNAT, votre propre domaine, bouclier DDoS intégré.
Inconvénients que les docs ne crient pas :
- CGU Section 2.8 interdit le streaming vidéo > ~50 Go/mois sur le free tier. Cloudflare bannit les sous-domaines après détection - parfois après un mois, parfois après un an, loterie.
- Throttling imprévisible. CF se met à throttler votre trafic vidéo, le bitrate chute, le player buffer sans raison apparente.
- Limite de 100 Mo par requête HTTP sur le plan gratuit - certaines opérations Jellyfin (scan initial de la library avec images de métadonnées) peuvent échouer.
- Le WAF bloque parfois des requêtes player légitimes (chunks HLS, range requests) - le debug devient « pourquoi la série de 2009 ne stream pas ».
Verdict : gratuit, MAIS les CGU Cloudflare interdisent le streaming > ~50 Go/mois - ils bannissent. Comparaison plus large.
4. Tunnel SSH inverse (SmartHomeEntry)#
Comment ça marche : un agent sur la machine Jellyfin ouvre un tunnel SSH sortant vers un serveur relay. Le relay expose votre Jellyfin sous une sous-domaine HTTPS stable, par ex. mesfilms.smarthomeentry.com. Zéro port chez vous.
Avantages :
- Pas de surcharge de transcoding - le relay fait juste du forward TCP, ne décode pas la vidéo. Bitrate intact.
- Pas de problèmes de CGU - aucune limite sur le transfert vidéo.
- Fonctionne avec n'importe quelle app cliente - Jellyfin Web, Jellyfin Mobile, Findroid, Streamyfin, Chromecast, Apple TV, smart TV (via navigateur).
- Sous-domaine HTTPS stable, cert LE automatique au niveau du relay.
- Fonctionne derrière CGNAT (tunnel sortant).
Inconvénients :
- Dépendance au relay (uptime managed).
- Payant - à partir de 7 €/mois pour le plan hobby.
Verdict : pour la majorité des utilisateurs Jellyfin - meilleur ratio qualité/confort/sécurité.
| Méthode | Derrière CGNAT | HTTPS | Limite CGU | Famille/TV apps | Setup |
|---|---|---|---|---|---|
| Redirection 8096 | non | manuel | aucune | oui | difficile |
| WireGuard | non | n/a | aucune | non | moyen |
| Cloudflare Tunnel | oui | auto | ~50 Go/mois | oui | moyen |
| SSH inverse (SHE) | oui | auto | aucune | oui | 60 sec |
Setup Jellyfin + tunnel SSH en 60 secondes#
Je suppose que Jellyfin tourne en local à http://192.168.1.50:8096 ou http://jellyfin.local:8096. Sinon - commencez par le pillar HA sur l'install self-hosted (le processus est analogue).
-
Créez un compte SmartHomeEntry et choisissez une sous-domaine (par ex.
mesfilms.smarthomeentry.com). À l'inscription nous allouons un port relay unique et lions la sous-domaine à votre enregistrement de tunnel. -
Renseignez l'adresse locale de Jellyfin dans le dashboard (champ « Adresse locale » de l'onboarding). C'est l'adresse sur laquelle Jellyfin écoute dans votre réseau - l'agent y redirige le trafic du tunnel. Jellyfin tourne par défaut sur le port 8096, saisissez donc
localhost:8096. La valeur par défaut du champ estlocalhost:8080, et le tunnel ne fonctionnera pas avec celle-ci. Pour vérifier sur l'hôte Jellyfin :sudo ss -tlnp | grep 8096 -
Récupérez la commande d'installation depuis le dashboard et collez-la dans le terminal de l'hôte Jellyfin :
curl -sSL https://api.smarthomeentry.com/api/install/VOTRE_TOKEN | sudo bashLe script installe l'agent en service systemd, récupère la clé SSH via un install token usage unique (TTL 15 min), écrit l'adresse locale dans
/etc/smarthomeentry/agent.envet ouvre le tunnel vers le relay. -
Éditez
/etc/jellyfin/network.xml- ajoutez la sous-domaine dansBaseUrl(vide = root) et l'IP relay dansKnownProxies, pour que Jellyfin lise correctement la vraie IP client depuis X-Forwarded-For :<NetworkConfiguration> <BaseUrl></BaseUrl> <RequireHttps>false</RequireHttps> <EnableHttps>false</EnableHttps> <KnownProxies> <string>relay.smarthomeentry.com</string> </KnownProxies> <PublishedServerUriBySubnet> <string>external=https://mesfilms.smarthomeentry.com</string> </PublishedServerUriBySubnet> </NetworkConfiguration> -
Dans Jellyfin Dashboard → Networking réglez :
- Public HTTPS port :
443 - External Domain :
mesfilms.smarthomeentry.com - Enable automatic port mapping : OFF (inutile, le relay s'en charge)
- Public HTTPS port :
-
Restart Jellyfin (
systemctl restart jellyfin) et ouvrezhttps://mesfilms.smarthomeentry.com. Vous devriez voir l'écran de login Jellyfin en HTTPS - sans avertissement de certificat, sans config routeur.
Le tier gratuit Cloudflare Tunnel interdit explicitement le streaming vidéo > ~50 Go/mois dans la CGU Section 2.8. Jellyfin avec une famille dépasse cette limite la première semaine. Le bannissement de sous-domaine arrive sans préavis - vous perdez l'accès à tous les tunnels du compte d'un coup.
Bonnes pratiques après le setup#
Le tunnel marche, vous pouvez regarder depuis un hôtel. Maintenant cinq minutes d'hygiène pour ne pas y revenir dans six mois.
- Désactivez le transcoding côté serveur (Dashboard → Playback → Transcoding) sauf si vous avez Hardware Acceleration NVENC (Nvidia), QSV (Intel) ou VAAPI (AMD). Le transcoding CPU 4K → 1080p mange 100% des cores et ne tient quand même pas en realtime.
- Réglez le bitrate max par utilisateur (Dashboard → Users → choisissez user → Playback → Internet streaming bitrate). 4 Mbps pour les parents, 20 Mbps pour vous. Protège du scénario « gamin lance du 4K sur un forfait mobile 100 Go et le crame en 8 heures ».
- Activez le redirect HTTPS-only dans Jellyfin (Dashboard → Networking → Require HTTPS pour les connexions externes).
- Désactivez DLNA (Dashboard → DLNA → tout OFF). Ne fonctionne pas via le tunnel de toute façon, et c'est un vecteur d'attaque local (CVE dans la découverte SSDP).
- Backup library : DB de métadonnées seulement, pas les fichiers média. Backup
/var/lib/jellyfin/data/library.db+metadata/via Borg / Restic. Vous ne tunnelez pas des pétaoctets de.mkven backup - le tunnel sert au streaming, pas au backup offsite. - Mettez Jellyfin à jour mensuellement - patches de sécurité pour la web UI (XSS dans les descriptions de films est un classique).
Si vous avez un CPU Intel à partir de la 7e génération, activez le transcoding QSV (Dashboard → Playback → Hardware acceleration → Intel QuickSync). Un encode HEVC single-pass en 4K → 1080p consomme ~3% de CPU au lieu de 100%. Ça change complètement l'économie du streaming distant depuis un laptop-serveur.
Réglez les logs Jellyfin (/var/log/jellyfin/) sur le niveau Information en production, pas Debug. Debug enregistre chaque chunk HLS et chaque seek - quelques heures de streaming = des centaines de Mo de logs par jour et de l'IO disque inutile.
FAQ#
| Question | Réponse |
|---|---|
| Le streaming 4K marche-t-il via le tunnel ? | Oui, mais il faut un upload domestique > 25 Mbps soutenus. Testez Speedtest upload aux heures de pointe, pas à 3h du matin. Réalistement il faut 30-35 Mbps pour avoir une marge contre la surcharge TCP + SSH. |
| Chromecast et apps TV fonctionnent ? | Oui - entrez https://mesfilms.smarthomeentry.com comme adresse serveur dans Jellyfin Mobile, le cast passe par la sous-domaine HTTPS. Les smart TVs (LG, Samsung, Android TV) lancent Jellyfin Web dans le navigateur. |
| Live TV / DVR via le tunnel ? | Oui, mais le tuner DVB-T/DVB-C reste physiquement à la maison (USB sur la machine Jellyfin). Le tunnel forwarde le flux du tuner exactement comme les fichiers enregistrés. Les enregistrements se sauvent aussi en local, pas dans le cloud. |
| Et les sous-titres / HDR ? | Le tunnel est transparent - il forwarde le flux bit par bit. SRT, ASS, VobSub, PGS, HDR10, HDR10+, Dolby Vision (si le player le supporte) - inchangés. |
| Plex vs Jellyfin via le tunnel - différences ? | Plex Remote a un relay intégré via plex.tv (transcoding chez eux, compte requis), marche sans setup mais est bandwidth-throttled sur le free tier et demande Plex Pass pour certaines fonctions ($120 lifetime). Jellyfin n'a pas de remote intégré - vous devez l'exposer vous-même via tunnel/VPN/port-fwd. Avantage : contrôle total, pas de compte tiers, FOSS. |
| Puis-je tunneler d'autres services depuis la même machine ? | Oui. Un agent gère plusieurs sous-domaines - mesfilms.smarthomeentry.com → Jellyfin, cloud.smarthomeentry.com → Nextcloud, ha.smarthomeentry.com → Home Assistant. |
Verdict#
Le tunnel SSH inverse est le meilleur choix pour Jellyfin si vous voulez : streaming sans la loterie des CGU Cloudflare, fonctionnement derrière CGNAT, HTTPS pour chaque app cliente (Chromecast, mobile, TV), contrôle total de votre library, sans dépendance à plex.tv. Plus : votre famille ouvre un lien dans le navigateur - pas d'app VPN à installer.
Alternative ? Plex Remote si vous ne voulez pas vous embêter et acceptez un compte plex.tv plus leur throttling. WireGuard si vous regardez seul. Redirection de port uniquement si l'IT est votre métier et que vous lisez auth.log tous les matins. Pour tous les autres - Jellyfin + SmartHomeEntry - un lien dans le navigateur, marche partout, setup en 60 secondes.



