Skip to content

VPN et network manager, tester l'état de son VPN

Auteur : Philippe Le Van - @plv@framapiaf.org

Date : 24 novembre 2022

Introduction

Régulièrement j'ai des connexions VPN qui tombent. Là je dois me reconnecter pour pouvoir travailler.

Je travaille avec Ubuntu ou Debian.

J'ai notamment 2 cas :

  • sur mon poste bureautique, à chaque fois que change de réseau, mon VPN se déconnecte. Quand je reboot, mon VPN se déconnecte. Quand je passe en veille, idem.
  • sur un serveur, je dois rester connecté au VPN d'un client, mais le serveur VPN du client tombe régulièrement.

Dans tous les cas, je dois reconnecter automatiquement mon VPN. Pour ça, j'utilise Network Manager en ligne de commande.

Network Manager

Pour installer Network-Manager, il faut faire :

1
sudo apt install network-manager

Ce qui nous interessera ensuite, c'est le client en ligne de commande : nmcli.

Les connexions de la machine

Pour lister toutes les connexions sur sa machine :

1
/usr/bin/nmcli con show --active

Chez moi les connexions VPN sont soit de type "vpn", soit de type "tun". Pour les retrouver plus facilement on peut utiliser la commande suivante :

1
2
3
root@server-odin:~$ /usr/bin/nmcli con show --active | grep -E '(vpn|tun|TYPE)'
NAME             UUID                                  TYPE      DEVICE          
tun0             fce62942-xxxx-xxxx-xxxx-xxxx-82ee9c4  tun       tun0            

Relancer automatiquement les connexions

Le script bash de relancement : vpn_reconnect.sh

On crée un script bash suivant vpn_reconnect.sh :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash

CONNECTION_ID=$1

STATUS=$(/usr/bin/nmcli con show --active id "${CONNECTION_ID}" | wc -l)
echo ${STATUS}
if [ "0" == ${STATUS} ]; then
  /usr/bin/nmcli con up "${CONNECTION_ID}"
  echo "vpn reconnected"
else
  echo "vpn already up"
fi

Lancer le script en cron

dans la cron de root, j'ajoute une entrée qui relance le script toutes les minutes

1
2
3
4
5
# éditer la cron de root
sudo crontab -e

# dans la cron, ajouter la ligne suivante :
``*/1 * * * * /home/philippe/program/plv_scripts/vpn_reconnect.sh tun0 > /dev/null``