cat synology-maj-dsm-module-tun-docker-vpn.md
Synology : après une mise à jour DSM, ta stack Docker VPN ne redémarre pas
Après une mise à jour DSM sur mon NAS Synology, mauvaise surprise : aucun de mes conteneurs Docker n’était remonté. Toute la stack — gluetun et tous les conteneurs qui passent par lui — affichait Exited depuis le reboot, alors que tout est censé redémarrer tout seul.
Si tu utilises gluetun (ou n’importe quel conteneur VPN) sur un Synology, il y a de bonnes chances que tu tombes un jour sur ce cas. Voici le diagnostic complet, parce qu’il y a en fait deux causes indépendantes qui se cumulent.
Le symptôme
Relancer gluetun à la main échoue avec :
error gathering device information while adding custom device "/dev/net/tun":
no such file or directory
Et sans gluetun, tous les conteneurs en network_mode: container:gluetun restent bloqués derrière.
Cause n° 1 : la mise à jour DSM a déchargé le module tun
La MAJ DSM a retiré le module noyau tun : /dev/net/tun n’existe plus. Sans lui, gluetun ne peut pas monter son interface VPN. C’est le bloqueur dur.
Le fix immédiat, en SSH sur le NAS :
sudo insmod /lib/modules/tun.ko
sudo mknod /dev/net/tun c 10 200
sudo chmod 666 /dev/net/tun
Puis on relance gluetun d’abord (les autres conteneurs utilisent son réseau, l’ordre compte) :
sudo /usr/local/bin/docker start gluetun
# attendre qu'il soit healthy, puis :
sudo /usr/local/bin/docker start <tes-autres-conteneurs>
Au passage, un piège Synology : sudo a un PATH réduit qui ne contient pas /usr/local/bin, donc sudo docker ne marche pas — il faut le chemin complet sudo /usr/local/bin/docker.
Cause n° 2 : restart: unless-stopped ne fait pas ce que tu crois
Mes conteneurs sont tous en restart: unless-stopped. Alors pourquoi rien n’est remonté ?
Parce que pendant une mise à jour, Container Manager stoppe explicitement les conteneurs (Exited (0)). Et unless-stopped, c’est littéral : un conteneur arrêté « proprement » ne sera pas relancé au boot suivant. La politique de restart ne te protège donc pas contre les mises à jour DSM.
Le fix durable : un script au démarrage
Plutôt que de refaire ça à la main à chaque MAJ, j’ai mis un script de boot qui :
- recharge le module
tunet recrée le device node si absent ; - attend que le daemon Docker soit prêt ;
- relance la stack dans le bon ordre (gluetun d’abord, le reste ensuite) ;
- logge tout dans
/var/log/pour vérifier après coup.
À câbler dans le Planificateur de tâches DSM : tâche déclenchée « Au démarrage », utilisateur root. C’est la seule étape qui passe par l’interface — le Planificateur ne se crée pas proprement en CLI.
En résumé
/dev/net/tunpeut disparaître à chaque mise à jour DSM : ce n’est pas toi, c’est Synology.restart: unless-stoppedne survit pas à un arrêt explicite par Container Manager.- Un script « Au démarrage » qui recharge
tunet relance la stack dans l’ordre règle les deux problèmes d’un coup.