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
  echo "VPN is running ($CHECKIP pingable)"
  synovpnc get_conn
  route
else
  echo "Reconnecting VPN ($CHECKIP unresponsive)"

  echo "Killing VPN ($NAME)"  
  synovpnc kill_client --name=$NAME
  
  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