Optimiser qBittorrent sur NAS Synology
De 3 Mo/s à 25 Mo/s sans changer le hardware. Configuration complète Docker + GlueTUN + WireGuard + qBittorrent avec tous les réglages optimisés.
Ce guide a un but éducatif. monratio.fr n'encourage en aucun cas le piratage ou le téléchargement illégal de contenus protégés par le droit d'auteur.
Synology DS418play (Intel Celeron J3355, 2 Go de RAM), HDD classiques en SHR, fibre 800 Mb/s, Docker avec GlueTUN + qBittorrent + ProtonVPN Plus.
Résultat mesuré : de 3 Mo/s à 25 Mo/s sur le même hardware.
🐢 Pourquoi votre NAS rame
Votre NAS télécharge à 3 Mo/s alors que vous avez une fibre à 800 Mb/s ? Le coupable n'est pas votre connexion. C'est le protocole VPN que vous utilisez.
Il existe deux grandes technologies pour chiffrer votre trafic VPN :
Comparaison OpenVPN vs WireGuard sur NAS :
Dans mes tests, le passage de l'un à l'autre a multiplié le débit par 8 sur le même serveur ProtonVPN, sans rien toucher d'autre. C'est LA première chose à changer.
OpenVPN = chiffrement userland, overhead CPU massif sur Celeron. WireGuard = kernel-level, zéro overhead. Résultat mesuré : ×8 en débit sur le même serveur ProtonVPN.
Benchmark DS418play (Celeron J3355) :
# OpenVPN (avant)
$ top
CPU : 98.2% user, openvpn pid 1234
$ iperf3 -c test.proton
[ 5] 0.00-10.00 sec 36 MBytes 30 Mbits/sec
# WireGuard (après)
$ top
CPU : 14.8% user, wireguard kernel
$ iperf3 -c test.proton
[ 5] 0.00-10.00 sec 240 MBytes 201 Mbits/sec Pourquoi la différence est si grande ? OpenVPN fait passer chaque paquet réseau par plusieurs couches logicielles avant de le chiffrer. WireGuard, lui, intercepte les paquets directement dans le noyau du système, là où c'est le plus rapide. Sur un PC avec un CPU puissant, vous ne verrez pas la différence. Mais sur un petit NAS, c'est le jour et la nuit.
🔑 Générer votre config WireGuard ProtonVPN
ProtonVPN fournit un fichier de configuration qu'on va utiliser dans Docker. On va le générer avec les bonnes options.
- Connectez-vous sur account.protonvpn.com
- Dans le menu de gauche, allez dans "Downloads" puis "WireGuard configuration"
- Configurez selon les options ci-dessous
- Cliquez sur "Create" puis téléchargez le fichier
.conf
Options à configurer :
Une fois le fichier .conf téléchargé, ouvrez-le avec un éditeur de texte (Bloc-notes, TextEdit…). Vous y trouverez deux infos importantes :
Contenu du fichier .conf :
[Interface]
PrivateKey = xxxxx...xxxxx ← Notez cette ligne
Address = 10.2.0.2/32 ← Notez cette ligne
DNS = 10.2.0.1
[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = ...:51820 Gardez ces deux valeurs sous la main, on va les coller dans le docker-compose à l'étape suivante.
Sur account.protonvpn.com → Downloads → WireGuard configuration :
# Config WireGuard :
Platform: Linux (ou Router)
Server: FR-P2P#XX
Options:
✓ NAT-PMP (Port Forwarding)
✓ VPN Accelerator
✗ Moderate NAT
✗ NetShield
# Récupérer dans le .conf :
PrivateKey = xxxxx
Address = 10.2.0.X/32 Pourquoi décocher Moderate NAT et NetShield ? Moderate NAT bloque le port forwarding (on en a besoin pour le ratio). NetShield est un bloqueur de pubs qui ralentit la connexion sans raison valable dans ce contexte (vos téléchargements ne téléchargent pas de pubs).
🐳 Créer le docker-compose GlueTUN + qBittorrent
Docker est déjà installé sur votre Synology (depuis DSM 7.2, c'est Container Manager). On va utiliser Docker Compose qui permet de lancer plusieurs conteneurs en une seule commande.
On va lancer 2 conteneurs qui travaillent ensemble :
Créez un fichier docker-compose.yml dans /volume1/docker/qbittorrent/ et collez le code ci-dessous. Remplacez VOTRE_CLE_PRIVEE par la clé récupérée à l'étape 2.
docker-compose.yml :
services:
gluetun:
image: qmcgaw/gluetun:latest
container_name: gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
- VPN_SERVICE_PROVIDER=protonvpn
- VPN_TYPE=wireguard
- WIREGUARD_PRIVATE_KEY=VOTRE_CLE_PRIVEE
- WIREGUARD_ADDRESSES=10.2.0.2/32
- SERVER_COUNTRIES=France
- VPN_PORT_FORWARDING=on
- VPN_PORT_FORWARDING_PROVIDER=protonvpn
- VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -q -O- --post-data "json={\"listen_port\":{{PORTS}}}" http://localhost:9775/api/v2/app/setPreferences 2>&1'
- TZ=Europe/Paris
ports:
- 9775:9775
volumes:
- /volume1/docker/gluetun:/gluetun
restart: always
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: "service:gluetun"
depends_on:
gluetun:
condition: service_healthy
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Paris
- WEBUI_PORT=9775
volumes:
- /volume1/docker/qbittorrent:/config
- /volume1/docker/qbittorrent/downloads:/downloads
restart: always Lancez ensuite les conteneurs. Dans Container Manager (DSM 7.2+), cliquez sur "Project" puis "Create", sélectionnez votre fichier docker-compose.yml et validez.
Décortiquons les lignes les plus importantes :
VPN_PORT_FORWARDING_UP_COMMAND: la ligne magique. Elle dit à GlueTUN : "quand tu obtiens un port du VPN, envoie-le automatiquement à qBittorrent via son API". Sans ça, vous devriez mettre à jour le port manuellement après chaque reconnexion.network_mode: "service:gluetun": qBittorrent utilise le réseau de GlueTUN. Si le VPN tombe, qBittorrent perd Internet. C'est votre kill switch automatique.PUID=1026 PGID=100: les identifiants utilisateur/groupe sur Synology. Vérifiez les vôtres en SSH avecid.ports: 9775:9775: le port pour accéder à l'interface web de qBittorrent. Doit être identique dansports,WEBUI_PORTet dans l'URL de la commande UP_COMMAND.
Fichier /volume1/docker/qbittorrent/docker-compose.yml :
services:
gluetun:
image: qmcgaw/gluetun:latest
container_name: gluetun
cap_add: [NET_ADMIN]
devices: [/dev/net/tun:/dev/net/tun]
environment:
- VPN_SERVICE_PROVIDER=protonvpn
- VPN_TYPE=wireguard
- WIREGUARD_PRIVATE_KEY=<key>
- WIREGUARD_ADDRESSES=10.2.0.2/32
- SERVER_COUNTRIES=France
- VPN_PORT_FORWARDING=on
- VPN_PORT_FORWARDING_PROVIDER=protonvpn
- VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -q -O- --post-data "json={\"listen_port\":{{PORTS}}}" http://localhost:9775/api/v2/app/setPreferences 2>&1'
ports: [9775:9775]
volumes: [/volume1/docker/gluetun:/gluetun]
restart: always
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
network_mode: "service:gluetun"
depends_on: { gluetun: { condition: service_healthy } }
environment:
- PUID=1026
- PGID=100
- WEBUI_PORT=9775
volumes:
- /volume1/docker/qbittorrent:/config
- /volume1/docker/qbittorrent/downloads:/downloads Déploiement :
# En SSH sur le NAS
cd /volume1/docker/qbittorrent
docker-compose up -d
docker logs -f gluetun # Vérifier "port forwarded: XXXXX" Le kill switch automatique. Grâce à network_mode: "service:gluetun", qBittorrent ne peut passer que par le VPN. Si GlueTUN s'arrête ou perd la connexion, qBittorrent perd Internet instantanément. Aucun risque de fuite de votre vraie IP, même pendant une fraction de seconde.
💾 Régler qBittorrent pour HDD classiques
Les disques durs mécaniques sont le deuxième goulot d'étranglement après le VPN. Un HDD lit/écrit à 100-150 Mo/s quand les données sont séquentielles. Mais BitTorrent télécharge par petits morceaux en désordre : c'est ce qu'on appelle les écritures aléatoires, et ça tue les performances.
L'astuce : utiliser la RAM du NAS comme tampon pour absorber ces écritures en vrac, puis les écrire sur le disque de façon plus ordonnée.
Connectez-vous à l'interface web de qBittorrent (http://IP-NAS:9775), puis allez dans Paramètres → Avancé :
Paramètres → Avancé :
Puis dans Comportement :
Paramètres → Comportement :
Paramètres → Avancé :
- Fils d'E/S asynchrones :
10 - Fils de hachage :
2 - Taille file disque :
1024Kio - Type E/S :
Compatible POSIX - Mode R/W E/S :
Cache du système d'exploitation - Affinité extension :
Oui
Comportement :
- Limite mémoire :
128 Mio(2Go) /512 Mio(4+Go) - Mémoire vérification :
128 Mio - Interface réseau :
tun0(kill switch)
Pourquoi upgrader la RAM fait une différence. Plus votre NAS a de RAM libre, plus le cache d'écriture peut absorber de données avant de les écrire sur le disque. Sur DS418play, passer de 2 Go à 6 Go coûte ~20€ et double facilement les débits sur HDD. C'est l'upgrade avec le meilleur rapport qualité/prix.
🎯 Limiter les torrents actifs
Ça peut sembler contre-intuitif : pourquoi limiter le nombre de téléchargements si on veut aller vite ? Parce que chaque torrent actif écrit sur le disque en même temps. Plus il y en a, plus le disque doit sauter entre des fichiers différents, et plus il ralentit.
C'est comme un serveur dans un restaurant : s'il sert 3 tables, tout va bien. S'il en sert 15, tout le monde attend.
Allez dans Paramètres → BitTorrent → File d'attente :
Résultat concret : passer de 15 torrents actifs à 3 peut doubler votre débit effectif sur HDD.
Paramètres → BitTorrent → File d'attente :
- DL actifs :
3 - UL actifs :
5 - Total actifs :
8 - Vérification :
1
Moins de torrents parallèles = I/O plus séquentielles = ×2 débit sur HDD.
📦 Préallouer l'espace disque
Dans Paramètres → Téléchargements, cochez "Préallouer l'espace disque pour tous les fichiers".
Que fait cette option ? Quand vous lancez un torrent de 20 Go, qBittorrent réserve immédiatement 20 Go d'espace continu sur le disque, avant même de commencer le téléchargement. Sans ça, les morceaux du fichier atterrissent un peu partout (fragmentation), ce qui ralentit tout : le téléchargement, le seeding, et même la lecture si vous utilisez Plex.
Le seul inconvénient : le démarrage d'un torrent prend quelques secondes de plus. Mais le gain en performance sur la durée en vaut largement la peine.
Paramètres → Téléchargements → cocher Préallouer l'espace disque pour tous les fichiers. Réduit la fragmentation HDD, améliore les perfs de seeding et de lecture Plex/Jellyfin.
✅ Vérification : la flamme verte
Une fois tout lancé, comment savoir si ça fonctionne ? Regardez en bas à droite de l'interface web de qBittorrent. Vous y verrez une petite icône de connexion :
Si l'icône reste orange, voici comment diagnostiquer :
- Vérifiez les logs GlueTUN : dans Container Manager, ouvrez les logs du conteneur
gluetun. Cherchez une ligne typeport forwarded: 42156. Si elle n'apparaît pas, le port forwarding n'est pas actif côté VPN. Revérifiez queNAT-PMPest bien coché dans votre config ProtonVPN. - Vérifiez le port dans qBittorrent : Paramètres → Connexion. Le port d'écoute doit correspondre exactement au numéro affiché dans les logs GlueTUN.
- Autorisez le localhost : Paramètres → WebUI → cochez "Ignorer l'authentification pour les clients localhost". Sans ça, la commande automatique qui transmet le port est rejetée car elle n'a pas de mot de passe.
CPU à 20%, RAM à 40%, Plex fluide en parallèle.
Icône de connexion qBittorrent :
- 🟢 Verte : port ouvert, OK
- 🟠 Orange : port fermé, à corriger
Si orange :
# 1. Logs GlueTUN : vérifier le port forwardé
docker logs gluetun 2>&1 | grep "port forwarded"
# 2. qBittorrent API : vérifier le listen_port
curl http://NAS_IP:9775/api/v2/app/preferences | jq .listen_port
# 3. WebUI → cocher "Bypass auth for clients on localhost"
# Sinon UP_COMMAND rejetée par auth qBittorrent Résultats mesurés sur le setup testé. Avant : OpenVPN + réglages par défaut = 3 Mo/s. Après : WireGuard + réglages optimisés HDD = 25 Mo/s (×8). Le CPU tourne à 20%, la RAM à 40%, Plex continue de streamer pendant les téléchargements, aucun lag système.
Pour aller plus loin : si vos HDD restent le goulot malgré tout, upgrader la RAM du NAS (sur DS418play, 2→6 Go pour ~20€) fait une vraie différence. Sinon, une seedbox pour les gros téléchargements est la solution ultime.
Vous avez votre NAS qui seed 24/7. Et le reste ?
Un seul abonnement ProtonVPN protège jusqu'à 10 appareils. Continuez à sécuriser votre écosystème.