System

Synology DSM, VPN & Couple Certificat / Clé

J’ai voulu connecter mon nas Synology à un Serveur OpenVPN utilisant un certificat et une clé.
Cependant, je n’ai trouvé aucune option dans l’interface de Synology qui me permette de sélectionner ce mode de fonctionnement.

J’ai donc pris mon courage à deux mains, remonté mes manches et j’ai commencer à trifouiller dans les méandres du DSM.
Je suis tombé sur une page de documentation qui citait que les fichiers du client VPN étaient présent sous le chemin suivant:

/usr/syno/etc/synovpnclient/openvpn/

J’ai été voir et effectivement, les fichiers d’OpenVPN sont présents à l’arborescence.
Un petit coup de

openvpn --help
(...)
--cert file     : Local certificate in .pem format -- must be signed
                  by a Certificate Authority in --ca file.
--extra-certs file : one or more PEM certs that complete the cert chain.
--key file      : Local private key in .pem format.

On peut voir que les clés et certificats sont supportées.
J’ai donc importé ma configuration dans le répertoire ci-dessus ainsi que les certificats / clés.

Je pensais le lancer à travers l’interface de Synology (En utilisant le même nom pour le fichier de configuration) mais il semble
que cela fasse planter le client web.
D’autre part, j’ai remarqué que lors d’une coupure de connexion, cette version d’OpenVPN n’arrive pas à remonter la connexion de manière fiable.
Le processus reste bloqué sans que la connexion soit fonctionnelle.

Pour paler à ce soucis, j’ai donc créé un script sh qui, lancé toute les heures via un cron, ping la passerelle.
Dans le cas où le ping échoue, le script tue le processus et le relance.

IP_GATEWAY="10.88.0.1"
if [ $(ping -q -c 10 $IP_GATEWAY > /dev/null; echo $?) -eq 1 ] ; then
        if [ $(ps |grep openvpn | grep -v grep | grep -v openvpn.sh | wc -l) -gt 1  ] ; then
                echo "[$(date)]Killing proc in error" >> /root/openvpn.log
                killall openvpn
        fi
        echo "[$(date)]Connection lost, restarting VPN" >> /root/openvpn.log
        if [ $(lsmod | awk '{print $1}'|grep -E ^tun$ |wc -l) -ne 1 ] ; then
                /sbin/insmod /lib/modules/tun.ko
        fi
        cd /usr/syno/etc/synovpnclient/openvpn
        openvpn --config yun.conf --daemon
else
        echo "[$(date)]Connection successfull, VPN still functionning." >> /root/openvpn.log
fi