Table des matières

Network-Manager et VPN

Introduction

Network-Manager est une surcouche de haut-niveau pour la gestion du réseau. Cependant, il demeure certaines opérations qui ne sont pas simples à réaliser…

En particulier, dans la version de Jessie (0.9.10.0), il ne semble pas possible de gérer un démarrage automatique des VPN.

Ce mini-tuto propose la création d'un script pour palier à cela.

Installation

Récupération des uuid

Tout d'abord, il va vous falloir récupérer les uuid de deux connexions, l'uuid de la connexion au VPN, et l'uuid de la connexion réseau qu'il utilise. Pour se faire, la commande suivante fera l'affaire :

nmcli c

Notez bien les UUID respectifs. Ils ressemblent à des chaînes hexadécimales genre : 136e8b61-e704-4037-bf22-a2f6e5a1bd09.

Création du script de connexion

vpn-start
#!/bin/sh
 
# Les X sont à remplacer par l'UUID de la connexion réseau
ETH="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
# Les X sont à remplacer par l'UUID de la connexion VPN
VPN="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
 
activ_eth=$(nmcli con show --active | grep "${ETH}")
activ_vpn=$(nmcli con show --active | grep "${VPN}")
 
if [ -n "${activ_eth}" ] && [ -z "${activ_vpn}" ]
then
    nmcli c up uuid "${VPN}"
fi

(Pour en savoir plus, voir man nmcli)

chmod +x vpn-start

Utilisation

Pour que le script fonctionne, il doit être lancé depuis une session active ou par root.

En simple utilisateur

Pour le lancer depuis sa session, il suffit d'appeler le script depuis le .xsession, un fichier autostart, etc. Cependant, ce script ne se lancera qu'une fois. Vous pouvez cependant créer un script auxiliaire :

vpn-start-daemon
#!/bin/sh
while true
do
  ./vpn-start
  sleep 5m
done

Enregistrer tout cela dans votre ~/.local/bin et lancer le second script qui se chargera de lancer le premier…

En root

En root, vous pouvez utiliser la crontab (ça ne marchera pas en tant que simple utilisateur parce que la crontab n'est pas lancée dans la session active.)

Dans ce cas, vous allez plutôt vouloir enregistrer votre script dans /root ou dans /usr/local/bin (le script étant lancé par root, vous ne voulez pas qu'il soit modifiable, déplaçable, suppressible par n'importe qui.)

Puis, tout simplement :

crontab -e
*/5 * * * * /usr/local/bin/startvpn 2>/dev/null 1>/dev/null