Déconnexion intempestive de client OpenVPN ?
Posté : 02 février 2016, 18:22
Ceci est probablement la solution !
Je suis tombé sur ce code sur le site ubuntu-fr.org.
Bon, dans les choses sur lesquelles il faut être bien vigilant :
Pour information, je suis sur une version Ubuntu 14.04 LTS.
Je suis tombé sur ce code sur le site ubuntu-fr.org.
Code : Tout sélectionner
#--------------------------------------------------
#!/bin/bash
# auteur: alan524 -- 06 Avril 2014
#
# surveillance de la liaison vpn
# -> arret du programme de transfert si le vpn se déconnecte
# -> essai périodique de reconnexion vpn avec relance prpgramme
#
#--------------------------------------------------
# ce programme est basé sur la note publiée ci-après:
# --- cf http://ubuntuforums.org/showthread.php?t=1941380&page=2
#--------------------------------------------------
#
#
#
#Note: can not use a string to represent the program because the name
#of the string will be stored as the job name instead of the program name.
#
function lanceprocess()
{
#myprogram01 & # replace myprogram01 by program name
#qbittorrent & #
transmission-gtk &
#programID=`pidof myprogram01` # replace myprogram01 by program name
#programID=$(pidof qbittorrent) #
programID=$(pidof transmission-gtk) #
}
#
#nameVPN="myconnexionVPN" # replace myconnexionVPN by vpn name
#nameVPN="vyprvpn-PPTP" #
nameVPN="mullvad_linux" #
#
#myIPext="xxx.xxx.xxx.xxx" # replace xxx par mon adresse ip externe (provider)
myIPext="12.345.67.89"
#-----------------
#
#
#
#==== Test etat VPN ====
function testVPN()
#if vpn connected vpn=1
{
connected=$(nmcli con status | awk -v nVPN=$nameVPN '{if($1 == nVPN) {print $5;}; }')
if [ "$connected" = "oui" ] || [ "$connected" = "yes" ]; then
vpnuuid=$(nmcli con status | awk -v nVPN=$nameVPN '{if($1 == nVPN) {print $2;}; }')
vpn=1
else
vpn=0
fi
}
#==== Test etat VPN ====
function rwaitIPext()
{
IPext=$myIPext
vpn=0
testVPN
while [ "$IPext" = "$myIPext" ]
do
while [ "$vpn" = 0 ]
do
sleep 5
testVPN
done
nmcli -p con up uuid $vpnuuid #Retry the VPN
# essai sur un 2eme site si le premier est out
IPext=$(wget -qO- www.adresseip.com | grep -Eo '[0-9]{1,3}(\.[0-9]{1,3}){3}' | awk 'BEGIN {flag = 0}{if (flag == 0){print $1; flag = 1;}}')
if [ "$IPext" = "" ]; then
IPext=$(wget -qO- www.ipchicken.com | grep -Eo '[0-9]{1,3}(\.[0-9]{1,3}){3}' | awk 'BEGIN {flag = 0}{if (flag == 0){print $1; flag = 1;}}')
fi
if [ "$IPext" = "" ]; then
IPext=$myIPext
fi
if [ "$IPext" != "$myIPext" ]; then
break
fi
sleep 10 # attente que le vpn soit effectif
done
}
#==== VPN nok ====
function nokVPN()
{
date
echo "VPN disconnected. Stoping VPN dependancies"
if [ "$programID" != 0 ]; then
kill -SIGKILL $programID #Connection lost stop the VPN dependancy.
fi
echo "VPN dependancies stopped."
jobs
rwaitIPext # attente reconnexion
echo "VPN dependencies restarted."
lanceprocess # relance du process
date
}
#==== VPN OK ====
function okVPN()
{
sleep 1 # surveillance périodique 1 seconde
}
#===================
#==== Main Proc ====
#===================
#
#
programID=0
vpn=0
vpnuuid=''
IPext=''
date
echo "-- lancement torrent --"
echo "-- Activation surveillance VPN --"
rwaitIPext # connexion OK?
lanceprocess
while true; do
testVPN
if [ $vpn = 1 ]; then
okVPN
else
nokVPN
fi
done
- nommer sa connexion sans espace
- obtenir son adresse ip externe "avant" de se connecter à son VPN (via le site http://www.adresseip.com
- renseigner le nom du programme à monitorer (ici, par exemple, c'est transmission-gtk)
Pour information, je suis sur une version Ubuntu 14.04 LTS.