Installer ProtonVPN sur NAS Synology
Configuration Docker + GlueTUN + WireGuard avec port forwarding NAT-PMP. Le seul combo qui maintient la flamme verte dans qBittorrent en 2026.
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 (WireGuard + NAT-PMP).
Résultat mesuré : de 3 Mo/s à 25 Mo/s sur le même hardware, avec flamme verte et port forwarding actif.
- NAS Synology DSM 7.0 ou supérieur avec Container Manager installé (ex-Docker). Vérifier dans Centre de paquets.
- Abonnement Proton VPN Plus minimum : c'est le seul plan qui inclut le port forwarding NAT-PMP et WireGuard. Le plan gratuit ne convient pas pour cet usage.
- Accès SSH au NAS (Panneau de configuration → Terminal & SNMP → activer SSH), utile pour vérifier les logs.
- Dossier partagé Docker déjà créé sur le NAS (par défaut :
/volume1/docker).
🎯 Pourquoi ProtonVPN et pas un autre sur NAS
En 2026, tous les VPN ne se valent pas pour un usage NAS torrent. La différence se joue sur deux critères techniques : le protocole (pour les débits) et le port forwarding (pour le ratio).
Comparatif VPN pour NAS en 2026 :
ProtonVPN Plus coche les deux cases avec un atout décisif : le port forwarding se fait via NAT-PMP, un protocole que GlueTUN sait interroger automatiquement. Résultat : à chaque reconnexion, le nouveau port est transmis à qBittorrent sans intervention manuelle. C'est unique sur l'écosystème Docker grand public en 2026.
Le plan Plus (~10€/mois, ~5€ en engagement long) reste le meilleur investissement si votre priorité est un ratio sérieux sur trackers privés et une connexion toujours opérationnelle sans script de maintenance.
ProtonVPN Plus coche les trois cases qui comptent pour un NAS Celeron en 2026 :
- WireGuard kernel-level : ×3 à ×8 en débit vs OpenVPN sur Celeron J3355
- Port forwarding via NAT-PMP : négocié dynamiquement à chaque session, réinjecté dans qBittorrent via l'UP_COMMAND GlueTUN
- Support natif GlueTUN avec
VPN_PORT_FORWARDING_PROVIDER=protonvpn, pas de script maison à maintenir
# DS418play, ProtonVPN WireGuard FR, NAT-PMP
$ top
CPU : 14.2% user, wireguard kernel
$ docker logs gluetun | grep "port forwarded"
port forwarded: 47821 (ProtonVPN)
$ curl -s http://localhost:9775/api/v2/app/preferences | jq .listen_port
47821
# Port pushed automatiquement → flamme verte garantie Plan requis : Proton VPN Plus. Le plan gratuit n'inclut ni WireGuard ni port forwarding.
Pourquoi ProtonVPN est devenu le standard sur NAS. Depuis 2023, Mullvad a supprimé le port forwarding et NordVPN ne l'a jamais proposé. AirVPN reste excellent mais exige une gestion manuelle des ports. ProtonVPN est le seul à combiner WireGuard, NAT-PMP dynamique et intégration GlueTUN "plug-and-play" : vous configurez une fois, le port se réinjecte tout seul à chaque reconnexion. Sur un NAS qui tourne 24/7, c'est la différence entre un setup qu'on oublie et un setup qu'on surveille.
🔑 Générer votre config WireGuard ProtonVPN
Contrairement à NordVPN ou AirVPN, ProtonVPN utilise un générateur de config WireGuard en ligne. Aucun identifiant OpenVPN à gérer, aucun port à réserver manuellement : tout est intégré au dashboard.
Attention : vous n'utiliserez pas votre email + mot de passe Proton directement dans Docker. Le dashboard génère une paire de clés WireGuard dédiée qu'on va injecter dans GlueTUN. Vos identifiants de compte Proton ne quittent jamais le navigateur.
- Connectez-vous sur account.protonvpn.com
- Dans le menu de gauche : Downloads → WireGuard configuration
- Configurez les options exactement comme indiqué ci-dessous
- Cliquez sur Create et téléchargez le fichier
.conf
Options à configurer dans le générateur Proton :
Une fois le fichier .conf téléchargé, ouvrez-le avec un éditeur de texte (Bloc-notes, TextEdit, Nano…). Vous y trouverez deux lignes importantes :
Contenu du fichier .conf ProtonVPN :
[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 = fr-xx.protonvpn.udp:51820 Gardez la PrivateKey et l'Address sous la main. Elles vont dans le docker-compose à l'étape suivante.
Sur account.protonvpn.com → Downloads → WireGuard configuration :
# Générateur WireGuard Proton :
Platform: Linux (ou Router)
Server: FR-P2P#XX (ou NL/CH/DE selon besoins)
Features:
✓ NAT-PMP (Port Forwarding) ← indispensable
✓ VPN Accelerator
✗ Moderate NAT ← bloque le PF
✗ NetShield ← inutile sur NAS
# Récupérer dans le .conf :
PrivateKey = xxxxx
Address = 10.2.0.X/32 NB : la PrivateKey Proton n'est pas le mot de passe du compte. C'est une clé WireGuard dédiée, révocable à tout moment depuis le dashboard sans toucher au compte principal.
Pourquoi décocher Moderate NAT et NetShield ? Moderate NAT filtre certains types de connexions entrantes et bloque le port forwarding : c'est exactement l'inverse de ce qu'on veut. NetShield est un bloqueur de pubs/trackers DNS qui n'a pas de sens pour un NAS dédié au torrent (aucune navigation web, zéro bénéfice, léger ralentissement).
🐳 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, et adaptez WIREGUARD_ADDRESSES à la valeur de votre fichier .conf.
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 vraiment spécifiques à ProtonVPN :
VPN_SERVICE_PROVIDER=protonvpn: dit à GlueTUN d'utiliser les serveurs ProtonVPN et les bons endpoints WireGuard.VPN_PORT_FORWARDING=on+VPN_PORT_FORWARDING_PROVIDER=protonvpn: active l'interrogation NAT-PMP pour négocier un port côté Proton. Spécifique à ProtonVPN, aucun autre VPN ne supporte cette combinaison dans GlueTUN.VPN_PORT_FORWARDING_UP_COMMAND: la ligne magique. Quand GlueTUN obtient un port, il lance automatiquement unwgetqui pousse ce port dans qBittorrent via l'API/api/v2/app/setPreferences. Plus besoin de toucher à qBittorrent manuellement.network_mode: "service:gluetun": qBittorrent utilise le réseau de GlueTUN. Si le VPN tombe, qBittorrent perd Internet instantanément. C'est votre kill switch automatique.PUID=1026 PGID=100: les identifiants utilisateur/groupe sur Synology. Vérifiez les vôtres en SSH avecid.
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
# Attendre "Wireguard is up" puis "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. C'est le même mécanisme que sur les autres VPN, sauf qu'ici le port forwarding est en prime.
💾 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.
🔓 Autoriser localhost dans qBittorrent (crucial)
Par défaut, qBittorrent exige un nom d'utilisateur et un mot de passe pour accéder à son API. Problème : la commande wget lancée par GlueTUN pour pousser le nouveau port ne connaît pas ces identifiants. Sans ce réglage, la flamme restera orange malgré une config par ailleurs correcte. C'est l'erreur la plus fréquente sur ce setup.
Dans l'interface web de qBittorrent, allez dans Paramètres → WebUI :
Paramètres → WebUI :
localhost viennent strictement du conteneur GlueTUN, pas de l'extérieur. Cette case est sûre.
Pourquoi c'est safe : qBittorrent tourne en network_mode: "service:gluetun", ce qui signifie que localhost (127.0.0.1) n'est accessible que depuis les processus qui partagent cette stack réseau, c'est-à-dire GlueTUN et qBittorrent eux-mêmes. Personne d'autre ne peut s'y connecter, même sur le réseau local.
Après avoir coché la case et cliqué sur Enregistrer, redémarrez GlueTUN pour qu'il relance l'UP_COMMAND :
# En SSH sur le NAS
docker restart gluetun
docker logs gluetun --tail 50 | grep -E "port forwarded|setPreferences" Paramètres → WebUI → cocher Bypass authentication for clients on localhost.
# Sans cette case :
# UP_COMMAND → 403 Forbidden → port jamais injecté → flamme orange
# Avec la case :
# UP_COMMAND → 200 OK → listen_port mis à jour → flamme verte
# Test manuel (après activation) :
docker exec qbittorrent wget -qO- \
--post-data "json={\"listen_port\":47821}" \
http://localhost:9775/api/v2/app/setPreferences
# → retour vide = succès Vérification ultérieure du flux complet :
docker logs gluetun | grep "port forwarded"→ port obtenu côté Protoncurl http://NAS_IP:9775/api/v2/app/preferences | jq .listen_port→ port effectivement injecté- Les deux doivent correspondre.
L'erreur qui fait perdre des heures. 90% des gens qui configurent ProtonVPN + GlueTUN + qBittorrent pour la première fois oublient cette case et passent des heures à chercher pourquoi la flamme reste orange. La config VPN est parfaite, le port est bien forwardé côté Proton, mais GlueTUN se fait recaler par l'auth qBittorrent et le port n'est jamais injecté. Cochez cette case, redémarrez GlueTUN, c'est réglé.
📦 Limiter les torrents actifs et préallouer
2 réglages complémentaires qui font gagner beaucoup de débit sur HDD : limiter le nombre de torrents actifs en parallèle, et préallouer l'espace disque.
Allez dans Paramètres → BitTorrent → File d'attente :
Puis dans Paramètres → Téléchargements, cochez Préallouer l'espace disque pour tous les fichiers. Cela évite la fragmentation des fichiers sur HDD et accélère à la fois le téléchargement, le seeding et la lecture Plex/Jellyfin.
Résultat concret : passer de 15 torrents actifs à 3 peut doubler votre débit effectif sur HDD, et la préallocation divise par 2 à 3 le temps de scan au démarrage de qBittorrent.
File d'attente : 3 DL / 5 UL / 8 total / 1 check.
Paramètres → Téléchargements → Préallouer l'espace disque pour tous les fichiers coché.
Moins de torrents parallèles = I/O plus séquentielles = ×2 débit sur HDD. Préallocation = zéro fragmentation, fichiers directement prêts pour lecture média.
✅ Vérification : la flamme verte
Une fois tout lancé, comment savoir si tout 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 le diagnostic pas à pas :
- Vérifiez les logs GlueTUN : cherchez une ligne du type
port forwarded: 47821. Si elle n'apparaît pas, le problème est côté VPN : revérifiez que NAT-PMP est bien coché dans votre config ProtonVPN (étape 2) et que votre plan est bien Proton VPN Plus ou supérieur. - Vérifiez le port dans qBittorrent : Paramètres → Connexion. Le port d'écoute doit correspondre exactement au numéro affiché dans les logs GlueTUN. S'il ne correspond pas, c'est que l'UP_COMMAND n'a pas fonctionné.
- Vérifiez le bypass auth localhost : Paramètres → WebUI → case Contourner l'authentification pour les clients localhost. Sans ça, la commande UP_COMMAND est rejetée en 403 Forbidden. C'est l'erreur #1 (voir étape 5).
- Redémarrez GlueTUN après avoir coché la case :
docker restart gluetun. Sans redémarrage, l'UP_COMMAND ne sera pas relancée.
CPU à 20%, RAM à 40%, Plex fluide en parallèle.
Vérification rapide en ligne de commande :
# 1. Tunnel WireGuard actif
docker logs gluetun 2>&1 | grep -iE "wireguard.*up|healthy"
# 2. Port forwardé côté Proton (NAT-PMP)
docker logs gluetun 2>&1 | grep "port forwarded"
# → "port forwarded: 47821"
# 3. Port injecté dans qBittorrent
curl -s http://NAS_IP:9775/api/v2/app/preferences | jq .listen_port
# → 47821 (doit matcher la ligne du dessus)
# 4. Les deux ports correspondent ? Flamme verte garantie.
# 5. Test kill switch
docker stop gluetun
curl -m 5 http://NAS_IP:9775 # → timeout attendu
docker start gluetun Le port NAT-PMP Proton change à chaque reconnexion. L'UP_COMMAND garantit la resynchronisation automatique, zéro maintenance après setup initial.
Résultats mesurés sur le setup testé. Avant : OpenVPN + réglages par défaut = 3 Mo/s. Après : WireGuard ProtonVPN + NAT-PMP + réglages optimisés = 25 Mo/s (×8). Le CPU tourne à 20%, la RAM à 40%, Plex continue de streamer pendant les téléchargements, aucun lag système.
Avantage décisif vs autres VPN : le port forwarding est automatiquement resynchronisé à chaque reconnexion. Zéro script à maintenir, zéro ré-intervention manuelle. Sur un NAS qui tourne 24/7 pendant des années, c'est ce qui fait la différence entre un setup qu'on oublie et un setup qu'on surveille.
🚀 Tester le seed et monitorer
Dernière étape : valider que tout tient la route en conditions réelles. Lancez un torrent de test (n'importe quel .torrent Linux officiel fait l'affaire, par exemple Ubuntu ISO) et surveillez trois indicateurs pendant 10-15 minutes.
Les 3 check à faire en live :
gluetun → tapez wget -qO- ipinfo.io/ip. Vous devez voir une IP ProtonVPN française, pas la vôtre.docker stop gluetun. qBittorrent doit immédiatement perdre l'accès réseau (tous les torrents passent à 0 Ko/s). Puis docker start gluetun pour tout relancer.Si les trois check passent : félicitations, votre NAS seede derrière ProtonVPN avec flamme verte, port forwarding actif, kill switch opérationnel. Vous pouvez laisser tourner 24/7.
Prochaine étape : configurer qBittorrent en profondeur (ratio, trackers, chiffrement).
Suite de tests en une commande :
# IP publique vue depuis le tunnel
docker exec gluetun wget -qO- ipinfo.io/json | jq '{ip, city, country, org}'
# → IP ProtonVPN
# Listen port effectif
curl -s http://NAS_IP:9775/api/v2/app/preferences | jq .listen_port
# Pairs entrants sur un torrent
curl -s "http://NAS_IP:9775/api/v2/sync/torrentPeers?hash=<hash>" \
| jq '.peers | to_entries | map(select(.value.connection == "BT")) | length'
# Test kill switch
docker stop gluetun; sleep 3
docker exec qbittorrent wget -qO- -T 5 ifconfig.me || echo "KILL SWITCH OK"
docker start gluetun Monitoring long terme recommandé : exporter les stats GlueTUN (endpoint /v1/vpn/status sur port 8000 si exposé) vers Prometheus + Grafana pour surveiller reconnexions, rotation de port NAT-PMP et débits.
Et maintenant ? Vous avez le setup VPN + NAS prêt à seeder. Si vous n'avez pas encore configuré qBittorrent en profondeur (profils ratio, chiffrement, trackers privés), continuez avec le guide Configurer qBittorrent : la config qui protège vraiment. Il couvre tous les réglages qui font la différence sur trackers privés en 2026.
Les trois pièges qui font perdre le plus de temps sur ce setup.
Cause n°1 : la case Contourner l'authentification pour les clients localhost n'est pas cochée dans qBittorrent WebUI. L'UP_COMMAND est rejetée en 403 Forbidden et le port n'est jamais injecté.
Solution : Paramètres → WebUI → cocher la case, enregistrer, puis docker restart gluetun. Vérifier ensuite que curl http://NAS_IP:9775/api/v2/app/preferences | jq .listen_port correspond à la ligne port forwarded: XXXXX dans les logs GlueTUN.
Cause probable : la PrivateKey ou WIREGUARD_ADDRESSES ne correspondent pas à votre fichier .conf téléchargé depuis Proton. Ou alors le serveur choisi (SERVER_COUNTRIES=France) ne supporte pas votre config (rare, mais testez Netherlands ou Switzerland).
Solution : recopiez précisément les deux valeurs depuis le .conf généré, sans espace en plus ni guillemets. Relancez docker-compose up -d --force-recreate gluetun.
C'est normal avec ProtonVPN : à chaque reconnexion (ou toutes les 60 minutes via renouvellement NAT-PMP), un nouveau port est attribué. L'UP_COMMAND gère la resynchronisation automatique, vous n'avez rien à faire. Si vous voyez la flamme orange très brièvement toutes les heures puis revenir verte, c'est le comportement attendu.
Si vous voulez un port vraiment fixe (pour certaines configs très spécifiques), AirVPN est la seule alternative avec port forwarding fixe. Mais à l'usage, l'UP_COMMAND de GlueTUN rend la rotation Proton totalement transparente.
Vous avez le NAS opérationnel derrière ProtonVPN. 2 guides complémentaires pour finir le travail : installer ProtonVPN sur vos autres appareils, et configurer qBittorrent en profondeur pour les trackers privés.
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.