Faire tomber en marche la reconnexion automatique du VPN d'un NAS synology

L'article qui suit part du principe qu'on souhaite avoir un NAS synology avec un profil openvpn (client donc), qui se connecte à un serveur ; en vue de pouvoir accéder au NAS à distance - même s'il est derrière un NAT et sans nécessiter de configuration particulière au niveau parfeu du réseau (dans la majorité des cas).

Le mécanisme de reconnexion automatique de synology ne fonctionne pas ou très mal (certain·e·s parlent du fait que leur mécanisme arrête de tenter sa chance au bout d'une minute d'échec...).

Pas assez fiable pour imaginer droper un NAS dans la nature en le gardant joignable pour ses sauvegardes hors-site.

Une solution plus robuste est de créer une tâche planifiée (DSM -> Panneau de configuration -> Planificateur de tâches) et de créer une tâche avec les paramètres suivants :

  • utilisateur : root
  • Exécuter les jours suivants, répéter: Quotidienne [sic]
  • Heure de début : 00:00
  • Répéter : Toutes les minutes
  • Dernière heure d'exécution : 23:59
  • Script défini par l'utilisateur : voir ci-dessous.

Le script (quasi-Verbatim de celui-ci) :

CHECKIP='10.1.0.1'  # IP à vérifier, si celle-ci ne ping plus alors le vpn est relancé ; typiquement la gateway du tunnel est une solution
NAME='mon-vpn'  # doit correspondre au nom du profil VPN à redémarrer
ID='p1489396766'  # trouvé via `grep conf_id /usr/syno/etc/synovpnclient/vpnc_last_connect`
PROTO='openvpn'  # nom du proto VPN utilisé

if ping -c 1 $CHECKIP &> /dev/null
then
  synovpnc get_conn
  route
else
  # echo "Killing VPN ($NAME)"
  # synovpnc kill_client n'est pas bulletproof
  #synovpnc kill_client --name=$NAME
  # un peu violent de tuer tous les processus openvpn mais au moins ça marche
  # (tant qu'on a qu'un seul tunnel)
  pkill openvpn
  
  echo "Reconnecting VPN ($NAME - $PROTO)"  

  echo conf_id=$ID > /usr/syno/etc/synovpnclient/vpnc_connecting
  echo conf_name=$NAME >> /usr/syno/etc/synovpnclient/vpnc_connecting
  echo proto=$PROTO >> /usr/syno/etc/synovpnclient/vpnc_connecting
  synovpnc reconnect --protocol=$PROTO --name=$NAME
fi
exit 0