[technique] Script de watchdog VPN
Cyril
popolinux at gmail.com
Mer 14 Déc 18:57:16 CET 2011
Salut à vous !
On a des soucis à St Crotens.
Parfois le VPN tombe et ne se remet pas en route tant que l'on a pas
killé le process OpenVPN, puis relancé.
J'ai codé un petit script de watchdog pour veiller au grain et éviter de
me lever à 3h du mat pour relancer le bouzin.
Le voici ci-après, peut être que ça sera utile sur d'autres gateways.
Désolé si la façon de code n'est pas toujours très efficiente, moi et le
bash ça fait trois !
-------
#!/bin/bash
DATA_FILE='/root/watchdog_ping.dat'
RESTART_THRESHOLD=2
hosts[0]='8.8.8.8'
hosts[1]='81.93.255.70'
function check_ping() {
ping -nc 1 $1 >/dev/null
}
function count_reset() {
echo '0' > $DATA_FILE
}
function count_reset_up() {
if [ "$(cat /root/watchdog_ping.dat)" != "0" ]
then echo "$(date +"%m-%d-%Y %H:%I:%S") : Ping UP !"
fi
count_reset
}
function count_increment(){
nb_try=$(cat /root/watchdog_ping.dat)
new_nb_try=$(($nb_try + 1))
echo $new_nb_try > $DATA_FILE
echo "$(date +"%m-%d-%Y %H:%I:%S") : Ping down (try :
$new_nb_try/$RESTART_THRESHOLD)"
}
function restart_vpn(){
/root/tetaneutral.sh --setup
count_reset
echo "$(date +"%m-%d-%Y %H:%I:%S") : VPN Restart"
}
function check_all_hosts() {
nb_down=0
nb_hosts=0
# Test de ping sur tous les hosts
for i in ${!hosts[*]}
do
if ! check_ping ${hosts[$i]}
then nb_down=$((nb_down+1))
fi
nb_hosts=$((nb_hosts+1))
done
# Si tous les hosts test sont down on incremente le compteur
if [ $nb_down == $nb_hosts ]
then count_increment
else count_reset_up
fi
# Si le nombre d'echecs depassent le seuil
if [ "$(($(cat /root/watchdog_ping.dat)+1))" -gt
"$RESTART_THRESHOLD" ]
then restart_vpn
fi
}
check_all_hosts
-------
Fonctionnement :
- Les IP présentes dans l'array hosts seront pinguées l'une après
l'autre et si aucune ne répond, le script détectera la coupure.
- Si le nombre d'essais définis dans la variable RESTART_THRESHOLD est
dépassé, la fonction restart_vpn() sera appelée (à St Crotens
"/root/tetaneutral.sh --setup" fait un "killall -9 openvpn" et relance
le VPN).
- Le but de RESTART_THRESHOLD est de ne pas relancer le VPN pour rien
s'il s'agit d'une mini coupure, mais la valeur peut être passée à 1 pour
que ce soit plus agressif.
- Et... en fait c'est tout...
Installation :
- Avant tout il faut créer le fichier contenant le nombre d'essais :
echo '0' > /root/watchdog_ping.dat
- Ensuite, il suffit d'ajouter le script dans la crontab : * * * * *
/root/watchdog_ping.sh >> /root/watchdog_ping.log
Bien entendu je sous ouvert à toute proposition d'amélioration, il y a
peut être des coquilles :)
A++
Cyril
Plus d'informations sur la liste de diffusion technique