Optimiser qBittorrent sur NAS Synology
0 / 7
← Tous les guides

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.

Choisissez votre guide

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.

Setup testé dans ce guide

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.

1

🐢 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 :

OpenVPN (l'ancien)
Tourne comme un programme classique. Votre CPU doit faire tout le chiffrement. Sur un petit CPU type Celeron, il sature à 100% et freine tout.
CPU : 100% · Débit : 3 Mo/s
WireGuard (le moderne)
Tourne au cœur du système (kernel). Quasi aucune charge CPU. Même sur un petit NAS, il délivre.
CPU : 15% · Débit : 25 Mo/s (×8)

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.

2

🔑 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.

  1. Connectez-vous sur account.protonvpn.com
  2. Dans le menu de gauche, allez dans "Downloads" puis "WireGuard configuration"
  3. Configurez selon les options ci-dessous
  4. Cliquez sur "Create" puis téléchargez le fichier .conf

Options à configurer :

Plateforme Linux (ou Router)
Pays France (le plus proche)
✓ NAT-PMP (Port Forwarding) COCHÉ
✓ VPN Accelerator COCHÉ
✗ Moderate NAT DÉCOCHÉ
✗ NetShield DÉCOCHÉ

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).

3

🐳 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 :

🔒 GlueTUN
Gère la connexion VPN. Crée le tunnel WireGuard vers ProtonVPN.
→
📥 qBittorrent
Le client torrent. Passe par le réseau de GlueTUN. Aucun accès direct à Internet.

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 avec id.
  • ports: 9775:9775 : le port pour accéder à l'interface web de qBittorrent. Doit être identique dans ports, WEBUI_PORT et 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.

4

💾 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é :

Fils d'E/S asynchrones 10
Fils de hachage 2
Taille file d'attente disque 1024 Kio
Type d'E/S du disque Compatible POSIX
Mode d'écriture E/S disque Cache du système ⭐
Mode de lecture E/S disque Cache du système
Affinité par extension de morceau Oui
⭐ Le plus important : le "cache du système" utilise la RAM libre du NAS comme tampon d'écriture.

Puis dans Comportement :

Paramètres → Comportement :

Limite mémoire physique 128 Mio (2Go RAM) / 512 Mio (4+Go)
Mémoire en suspens (vérification) 128 Mio
Interface réseau 🛡️ tun0 (obligatoire)
🛡️ Interface tun0 = kill switch de qBittorrent. Si le VPN tombe, aucun trafic ne sort.

Paramètres → Avancé :

  • Fils d'E/S asynchrones : 10
  • Fils de hachage : 2
  • Taille file disque : 1024 Kio
  • 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.

5

🎯 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 :

Téléchargements actifs max 3
Envois actifs max 5
Torrents actifs max 8
En vérification max 1

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.

6

📦 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.

Sans préallocation
Fichier éparpillé sur le disque
Avec préallocation
Fichier continu, lecture rapide

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.

7

✅ 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 :

🟢 Verte : tout est bon
Le port est ouvert, les autres peers peuvent se connecter à vous. Débits optimaux.
🟠 Orange : port fermé
Personne ne peut initier une connexion vers vous. Débits limités. À corriger.

Si l'icône reste orange, voici comment diagnostiquer :

  1. Vérifiez les logs GlueTUN : dans Container Manager, ouvrez les logs du conteneur gluetun. Cherchez une ligne type port forwarded: 42156. Si elle n'apparaît pas, le port forwarding n'est pas actif côté VPN. Revérifiez que NAT-PMP est bien coché dans votre config ProtonVPN.
  2. Vérifiez le port dans qBittorrent : Paramètres → Connexion. Le port d'écoute doit correspondre exactement au numéro affiché dans les logs GlueTUN.
  3. 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.
🎉
Setup complet !
Votre NAS est optimisé : 25 Mo/s constants, kill switch actif, port forwarding automatique.
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.

🤝
Besoin d'un coup de main ?

Je peux vous aider à configurer tout ça à distance. Petit forfait ou au chapeau, on s'arrange.

Me contacter