Outils pour utilisateurs

Outils du site


vpn-auto

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

vpn-auto [2016/09/08 17:55]
vpn-auto [2016/09/08 17:55] (Version actuelle)
Ligne 1: Ligne 1:
 +====== Lancement automatique d'un VPN en fonction du réseau ======
 +
 +Il peut être pratique, pour pas oublier de lancer son VPN, de le lancer
 +automatiquement. Ici on partira du principe que le VPN est lancé dans tout
 +autre réseau que son réseau local personnel.
 +
 +Du coup, une méthode est de créer des scripts pour dans les répertoires se
 +situant dans ''/​etc/​network/''​.
 +
 +Par exemple, lancer automatiquement le VPN lorsqu'​on est dans un certain réseau
 +on peut écrire un script dans le répertoire ''/​etc/​network/​if-up.d/​monvpn''​ :
 +
 +<code bash>
 +#!/bin/sh
 +if [ ! -e /​var/​run/​monvpn.pid ]; then
 +    echo "​monvpninactif"​ > /​var/​run/​monvpn.pid
 +fi
 +
 +pid=`cat /​var/​run/​monvpn.pid`
 +reseau_maison=`ip a | grep "​192.168.2.40"​`
 +reseau_lycee=`ip a | grep "​172.16."​`
 +
 +if [ ! -e /proc/$pid ] && [ -z ${reseau_maison} ]; then
 +    if [ -z ${reseau_lycee} ]; then
 +        openvpn /​home/​pec/​.vpn/​rezine443.vpn &
 +        echo $! > /​var/​run/​vpnrezine.pid
 +    else
 +        openvpn /​home/​pec/​.vpn/​rezine-lycee.vpn &
 +        echo $! > /​var/​run/​vpnrezine.pid
 +    fi
 +fi
 +</​code>​
 +
 +Il faut ensuite permettre l'​execution de ce script :
 +
 +<code bash>
 +chmod +x /​etc/​network/​if-up.d/​monvpn
 +</​code>​
 +
 +Dans ce script, on veut pouvoir utiliser deux fichiers de configuration
 +différents. On passe par le port 443 avec un fichier de conf classique dans
 +tout autre réseau que son réseau local. Si ce réseau correspond à une
 +établissement comme un lycée, on veut pouvoir s'​authentifier sur un proxy pour
 +lancer son VPN, du coup on veut lancer openvpn avec un autre fichier de conf.
 +
 +Dans tous les cas, on écrit dans un fichier le PID du processus (numéro qui
 +permet de connaitre le processus openvpn lancé). Cela sera utile lorsqu'​on se
 +déconnectera de ce réseau, pour terminer la session VPN proprement.
 +
 +Lorsqu'​on quitte un réseau, on veut que le VPN s'​arrête et ne reste pas bloqué en tâche de fond avec le risque d'​avoir des bugs en arrivant dans un autre réseau (mauvaises routes, processus qui ne s'​arrête pas, soucis DNS…). On crée donc un script dans le répertoire ''/​etc/​network/​if-post-down.d/''​ avec ceci dedans :
 +
 +<code bash>
 +#!/bin/sh
 +pid=`cat /​var/​run/​vpnrezine.pid`
 +
 +if [ "​$IFACE"​ != "​tun0"​ ]; then
 +  if [ -e /proc/$pid ]; then
 +    /​sbin/​resolvconf -d "​tun0.openvpn"​ ;
 +    kill $pid ; kill -INT $pid ; kill -HUP $pid ; kill -KILL $pid
 +  fi
 +fi
 +</​code>​
 +
 +On rend le script executable : ''​chmod +x /​etc/​network/​if-post-down.d/​arretvpn''​
 +
 +Ce script réccupère le PID d'​openvpn généré au lancement de celui-ci, si l'​interface désactivée est différente du tunnel (câble ou wifi), alors on supprime le serveur DNS le cas échéant (si il a été ajouté à resolv.conf et qu'on tue openvpn, ce serveur DNS reste dans resolv.conf et c'est très compliqué de le virer sans avoir à rebooter… :( ). Ensuite on arrête openvpn, ce qui fait tomber la connection ''​tun0''​. ​
 +
 +Ce même genre de scripts peuvent être lancés par ''​NetworkManager''​ ou par le client
 +DHCP. On pourra donc mettre des scripts dans
 +''/​etc/​dhcp/​dhclient-enter-hooks.d''​ qui se lancerons à l'​attribution d'une IP
 +par un serveur DHCP, dans ''/​etc/​dhcp/​dhclient-exit-hooks.d''​ à la "​perte"​
 +d'une IP ou dans les répertoires ''​pre-down.d'',​ ''​pre-up.d'',​ situés dans
 +''/​etc/​NetworkManager/​dispacher.d/''​. Ces scripts se lanceront selon l'​état des
 +interfaces réseau : à la déconnexion d'une interface ou à la connexion. (non
 +testé)
 +
  
vpn-auto.txt · Dernière modification: 2016/09/08 17:55 (modification externe)