script de reconnexion automatique des vpn

Forum traitant de la distribution sécurisée montante nommée IP cop et basée sur la distribution Smoothwall. C'est à l'heure actuelle le forum le plus actif du site.

Modérateur: modos Ixus

script de reconnexion automatique des vpn

Messagepar mab » 22 Oct 2010 17:57

:roll: encore un post là dessus... :D
salut à tous,
Décidément le VPN d'ipcop (option RPV en bon français), je n'ai jamais réussi à le faire fonctionner sans avoir à cliquer quasiment tous les jours sur "reconnecter" pour qu'il se relance, et même des fois plusieurs fois par jour. J'ai mis en place Zerina, qui fonctionne très bien, mais j'aime moins la sécurité, j'ai donc arrêté.
J'ai voulu absolument remettre ce vpn fiable (c'est plutôt pénible d'appeler son client et lui expliquer qu'il faut cliquer sur la flèche en rond, etc :lol: )

Et pour ce faire, j'ai fait un script qui fonctionne très bien (taux de connexion de 97% entre 2 points en moyenne), et je vous le propose : :D
Code: Tout sélectionner
cat ./reconn_vpn_v2.sh
#!/bin/sh
# creation par mab - le 27/09/2010
# remise en service d'un vpn ipcop en cas de coupure
# cas teste : - perte de la configuration d'un vpn (manque une ligne dans "ipsec eroute")
#             - vpn en attente de reconnexion (message "%hold" dans "ipsec eroute" pour le vpn concerne)
#             - la route du vpn est active dans l'interface, mais est morte de l'autre cote (le RUHERE ne fonctionne pas)
#             - todo : le ping du réseau local distant semble impossible, merci de m'aider si vous savez comment on fait
# Script sous licence gpl
#
LOG=/var/log/messages

nosec=0
/usr/sbin/ipsec eroute >/tmp/liste2.txt
while IFS=' ' read a01 evpn_netlanloc[$nosec] a02 evpn_netlandist[$nosec] a03 evpn_netwandist[$nosec];
do
  evpn_netreseaulandist[$nosec]="$(echo ${evpn_netlandist[$nosec]}|cut -f1 -d"/")"
  evpn_netreseauwandist[$nosec]="$(echo ${evpn_netwandist[$nosec]}|cut -f2 -d"@"|cut -f1 -d":")"
  nosec=$((nosec + 1 ))
done < /tmp/liste2.txt
back_ifs=$IFS
novpn=0
while IFS=, read vpn_no[$novpn] vpn_actif[$novpn] vpn_nom[$novpn] a04 vpn_typevpn[$novpn] a06 a07 a08 a09 vpn_netlanloc

[$novpn] a11 vpn_netwandist[$novpn] vpn_netlandist[$novpn] a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26

vpn_commentaire[$novpn] a28 a29
do
  if [ "${vpn_actif[$novpn]}" == "on" ]&&[ "${vpn_typevpn[$novpn]}" == "net" ]; then
    vpn_addresselandist[$novpn]="$(echo ${vpn_commentaire[$novpn]}|awk '{print $1}')"
    vpn_reseaulandist[$novpn]="$(echo ${vpn_netlandist[$novpn]}|cut -f1 -d"/")"
    vpn_down[$novpn]="non"
    #on va tester si la route existe dans ipsec mais est morte
    ligne[$novpn]="$(echo ${evpn_netreseaulandist[*]}|grep "${vpn_reseaulandist[$novpn]}")"
    if [ "${ligne[$novpn]}" == "" ]; then
      vpn_down[$novpn]="oui"
    fi
    cptpassage=0
    #on va tester si la route manque dans ipsec
    while (( $cptpassage <= $nosec ));
    do
      if [ "${evpn_netreseaulandist[$cptpassage]}" == "${vpn_reseaulandist[$novpn]}" ]&&[ "${vpn_down[$novpn]}" != "oui" ];

then
        if [ "${evpn_netreseauwandist[$cptpassage]}" == "%hold" ]; then
          vpn_down[$novpn]="oui"
        fi
      fi
      cptpassage=$((cptpassage + 1))
    done
###    on peut pas pinguer un reseau local distant via le vpn sur ipcop.... :-(
###    si quelque'un sait comment faire, ça serait sympa de m'expliqer comment.
###    #on va tester si 5 pings passent
###    ping -c 5 -q -w 10 ${vpn_addresselandist[$novpn]}
###    retval=$?
###    if [ "$retval" > 0 ]; then
###      vpn_down[$novpn]="oui"
###    fi
   
#   maintenant, on sait si le canal est bon ou mauvais
    if [ ${vpn_down[$novpn]} == "oui" ]; then
      /usr/bin/logger -t reconn-vpn "le reseau ${vpn_nom[$novpn]} n est pas actif, tentative de relance du vpn numero

${vpn_no[novpn]}"
      echo -e "le reseau ${vpn_nom[$novpn]} n est pas actif, tentative de relance du vpn numero ${vpn_no[novpn]}"
      /usr/local/bin/ipsecctrl S ${vpn_no[$novpn]}
    fi
    novpn=$((novpn + 1 ))
fi
done < /var/ipcop/vpn/config
IFS=$back_ifs


il faut aussi rajouter évidemment dans le crontab un
Code: Tout sélectionner
*/2 * * * * /endroit-du-script-a-adapter-en-fonction/reconn_vpn_v2.sh


Bien entendu, il faut mettre le script ET la modif du crontab de chaque côté du VPN/RPV. :wink:

Ce script est plus précis que l'autre qui se trouve dans le Newbie kit, car il teste vpn par vpn et ne reconnecte que le vpn qui est déconnecté au lieu de tout redémarrer en aveugle, tuant tous les VPN en cours, même ceux qui ne sont pas déconnectés !
J'ai essayé de le rendre le moins gourmand possible en ressources, il y a peut-être moyen de faire mieux.
J'aimerais savoir aussi où est-il le plus convenable d'écrire ce script.

J'attends vos commentaires !
:mrgreen:
Dernière édition par mab le 19 Juin 2011 11:24, édité 2 fois au total.
Avatar de l’utilisateur
mab
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 293
Inscrit le: 03 Sep 2004 22:42
Localisation: centre

Re: script de reconnexion des vpn

Messagepar mab » 26 Oct 2010 01:44

Ca n'intéresse personne ? :lol: pourtant, au vu du nombre de posts sur ce sujet ... :)
Dernière édition par mab le 03 Nov 2010 14:04, édité 1 fois au total.
Avatar de l’utilisateur
mab
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 293
Inscrit le: 03 Sep 2004 22:42
Localisation: centre

Re: script de reconnexion des vpn

Messagepar mab » 03 Nov 2010 14:03

salut,
J'aimerais avoir vos retours sur ce script :wink:
Avatar de l’utilisateur
mab
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 293
Inscrit le: 03 Sep 2004 22:42
Localisation: centre

Re: script de reconnexion des vpn

Messagepar Franck78 » 03 Mai 2011 14:54

J'aimerais savoir aussi où est-il le plus convenable d'écrire ce script.

dans

/usr/local/bin

Tu pourrais logguer le contenu de
"ipsec barf"
à chaque relance pour essayer de comprendre le problème plus tard.

Un script de chaque coté reglé à la même freq trop rapide de check pourrait poser problème.
Un genre d'étreinte fatale. Tiens mon peer est absent, je redémarre et même réaction de l'autre coté.


Jète un oeil à vpn_watch déja existant pour éventuellement t'en inspirer ou remplacer son test ou carrément le remplacer (et profiter de son intégration dans IPCop).
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Re: script de reconnexion des vpn

Messagepar mab » 03 Mai 2011 18:02

MERCI franck78 pour ce retour,

Franck78 a écrit:Tu pourrais logguer le contenu de
"ipsec barf"
à chaque relance pour essayer de comprendre le problème plus tard.

Je vais voir ça, effectivement ça peut être utile de savoir à postériori à de fins d'analyse. Cependant, d'après ce que j'avais noté quand j'ai fait ce script, c'est qu'un des deux vpn est tombé, l'autre ne le voit pas tombé (est vert dans l'interface gui) et les log d'ipcop notifient simplement le message standard "...but no connection has been authorized with policy=PSK" sans cesse et surtout sans être capable de se reconnecter. L'état vert n'est pas forcément fiable, parfois, les deux ipcop (quand c'est de l'ipcop) voient la connexion vpn en "vert', alors que ce n'est pas le cas.
En fait, j'ai perdu quelques détails de tête (il faudrait si besoin que je me replonge dans mes notes de l'époque) suite à ce script qui m'a fait oublier les soucis de connexions pénibles (plusieurs fois par jour, appel aux clients pour qu'il cliquent sur relance vpn, etc :shock: ). J'ai analysé les logs à la main pour créer ce script à l'époque, maintenant que ça fonctionne, j'ai laissé tombé un peu le "pourquoi ça plante", pour m'intéresser à "comment refaire fonctionner".

Le script
Franck78 a écrit:vpn_watch
correspond à une demande : relancer les vpn en cas de changement d'adresse ip publique rouge. Il demande à ipsec de relancer toutes les connexions mais ne cherche pas à savoir quel vpn est tombé ou non. Il est en effet probable que tous les vpn soient tombés en cas de changement d'adresse ip rouge.
Franck78 a écrit:Un script de chaque coté reglé à la même freq trop rapide de check pourrait poser problème.
Un genre d'étreinte fatale. Tiens mon peer est absent, je redémarre et même réaction de l'autre coté.

Tu as tout a fait raison, cependant, bizarrement, j'ai noté que jamais les 2 machines (analyse des logs des différents routeurs à postériori) ne voient le même vpn tombé en même temps ! C'est aussi pour cette raison que j'avais besoin de retours afin de vérifier cet état de fait à plus grande échelle. D'autre part, une fois la panne détectée par mon script, la reconnexion rapide, environ 15-20 secondes, le temps que la renégociation se refasse.

J'ai apporté quelques modifications depuis, et remis le code en place, il y avait un problème dû au coller dans le forum :( : contenu du /usr/local/bin/reconn_vpn_v2.sh
Code: Tout sélectionner

#!/bin/sh
# creation par mab - le 27/09/2010
# remise en service d'un vpn ipcop en cas de coupure
# cas teste : - perte de la configuration d'un vpn (manque une ligne dans "ipsec eroute")
#             - vpn en attente de reconnexion (message "%hold" dans "ipsec eroute" pour le vpn concerne)
#             - la route du vpn est active dans l'interface, mais est morte de l'autre cote (le RUHERE ne fonctionne pas)
#             - todo : le ping du réseau local distant semble impossible, merci de m'aider si vous savez comment on fait
# Script sous licence gpl
#
#MAB v2.0 - version de production
#MAB v2.1 - update le 2011/02/13 : ajout de l'arret du vpn avant relance
#MAB v2.2 - update le 2011/03/03 : ajout du bip en cas de défaillance détectée

#mettre 0 ou 1 dans biper pour signaliser ou non la panne auditivement.
biper=1

#fin des paramètres à optimiser

nosec=0
/usr/sbin/ipsec eroute >/tmp/liste2.txt
while IFS=' ' read a01 evpn_netlanloc[$nosec] a02 evpn_netlandist[$nosec] a03 evpn_netwandist[$nosec];
do
  evpn_netreseaulandist[$nosec]="$(echo ${evpn_netlandist[$nosec]}|cut -f1 -d"/")"
  evpn_netreseauwandist[$nosec]="$(echo ${evpn_netwandist[$nosec]}|cut -f2 -d"@"|cut -f1 -d":")"
  nosec=$((nosec + 1 ))
done < /tmp/liste2.txt
back_ifs=$IFS
novpn=0
while IFS=, read vpn_no[$novpn] vpn_actif[$novpn] vpn_nom[$novpn] a04 vpn_typevpn[$novpn] a06 a07 a08 a09 vpn_netlanloc [$novpn] a11 vpn_netwandist[$novpn] vpn_netlandist[$novpn] a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 vpn_commentaire[$novpn] a28 a29
do
  if [ "${vpn_actif[$novpn]}" == "on" ]&&[ "${vpn_typevpn[$novpn]}" == "net" ]; then
    vpn_addresselandist[$novpn]="$(echo ${vpn_commentaire[$novpn]}|awk '{print $1}')"
    vpn_reseaulandist[$novpn]="$(echo ${vpn_netlandist[$novpn]}|cut -f1 -d"/")"
    vpn_down[$novpn]="non"
    #on va tester si la route existe dans ipsec mais est morte
    ligne[$novpn]="$(echo ${evpn_netreseaulandist[*]}|grep "${vpn_reseaulandist[$novpn]}")"
    if [ "${ligne[$novpn]}" == "" ]; then
      vpn_down[$novpn]="oui"
    fi
    cptpassage=0
    #on va tester si la route manque dans ipsec
    while (( $cptpassage <= $nosec ));
    do
      if [ "${evpn_netreseaulandist[$cptpassage]}" == "${vpn_reseaulandist[$novpn]}" ]&&[ "${vpn_down[$novpn]}" != "oui" ]; then
        if [ "${evpn_netreseauwandist[$cptpassage]}" == "%hold" ]; then
          vpn_down[$novpn]="oui"
        fi
      fi
      cptpassage=$((cptpassage + 1))
    done
###    on peut pas pinguer un reseau local distant via le vpn sur ipcop.... :-(
###    si quelque'un sait comment faire, ça serait sympa de m'expliqer comment.
###    #on va tester si 5 pings passent
###    ping -c 5 -q -w 10 ${vpn_addresselandist[$novpn]}
###    retval=$?
###    if [ "$retval" > 0 ]; then
###      vpn_down[$novpn]="oui"
###    fi
   
#   maintenant, on sait si le canal est bon ou mauvais
    if [ ${vpn_down[$novpn]} == "oui" ]; then
      /usr/bin/logger -t reconn-vpn"le reseau ${vpn_nom[$novpn]} n est pas actif, tentative d arret/relance du vpn numero ${vpn_no[novpn]}"
      /usr/local/bin/ipsecctrl D ${vpn_no[$novpn]}
      /usr/local/bin/ipsecctrl S ${vpn_no[$novpn]}
      if [ $biper == 1 ]; then
        /usr/bin/beep -f 1500 -l 100;/usr/bin/beep -f 2000 -l 50;/usr/bin/beep -f 1500 -l 100
      fi
    fi
    novpn=$((novpn + 1 ))
fi
done < /var/ipcop/vpn/config
IFS=$back_ifs


et, selon la recommandation de franck78:
Code: Tout sélectionner
*/2 * * * * /usr/local/bin/reconn_vpn_v2.sh

nota : ne pas oublier de faire un
Code: Tout sélectionner
chmod +x /usr/local/bin/reconn_vpn_v2.sh
:wink:
Avatar de l’utilisateur
mab
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 293
Inscrit le: 03 Sep 2004 22:42
Localisation: centre

Re: script de reconnexion des vpn

Messagepar mab » 06 Mai 2011 14:54

Je crois qu'il y a un problème lors du transfert du code, je recommence avec une autre version :
Code: Tout sélectionner
#!/bin/sh
# MAB - creation le 27/09/2010
# remise en service d'un vpn ipcop en cas de coupure
# cas teste : - perte de la configuration d'un vpn (manque une ligne dans "ipsec eroute")
#             - vpn en attente de reconnexion (message "%hold" dans "ipsec eroute" pour le vpn concerne)
#             - la route du vpn est active dans l'interface, mais est morte de l'autre cote (le RUHERE ne fonctionne pas)
# Script sous licence gpl - contactez-moi sur ixus.net (mab)
#
#MAB v2.0 - version de production
#MAB v2.1 - update le 2011/02/13 : ajout de l'arret du vpn avant relance
#MAB v2.2 - update le 2011/03/03 : ajout du bip en cas de défaillance détectée

#mettre 0 ou 1 dans biper pour signaliser ou non la panne auditivement.
biper=1

#fin des paramètres utilisateur modifiables

nosec=0
#echo "debut init listeroute"
/usr/sbin/ipsec eroute >/tmp/liste2.txt
while IFS=' ' read a01 evpn_netlanloc[$nosec] a02 evpn_netlandist[$nosec] a03 evpn_netwandist[$nosec];
do
  evpn_netreseaulandist[$nosec]="$(echo ${evpn_netlandist[$nosec]}|cut -f1 -d"/")"
  evpn_netreseauwandist[$nosec]="$(echo ${evpn_netwandist[$nosec]}|cut -f2 -d"@"|cut -f1 -d":")"
  nosec=$((nosec + 1 ))
done < /tmp/liste2.txt

back_ifs=$IFS
novpn=0
while IFS=, read vpn_no[$novpn] vpn_actif[$novpn] vpn_nom[$novpn] a04 vpn_typevpn[$novpn] a06 a07 a08 a09 vpn_netlanloc[$novpn] a11 vpn_netwandist[$novpn] vpn_netlandist[$novpn] a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 vpn_commentaire[$novpn] a28 a29
do
  if [ "${vpn_actif[$novpn]}" == "on" ]&&[ "${vpn_typevpn[$novpn]}" == "net" ]; then
    vpn_addresselandist[$novpn]="$(echo ${vpn_commentaire[$novpn]}|awk '{print $1}')"
    vpn_reseaulandist[$novpn]="$(echo ${vpn_netlandist[$novpn]}|cut -f1 -d"/")"

    vpn_down[$novpn]="non"
#    echo "on teste maintenant si le vpn est tombe avec la liste ${evpn_netreseaulandist[*]} et le test ${vpn_reseaulandist[$novpn]}"
    #on va tester si la route existe dans ipsec mais est morte
    ligne[$novpn]="$(echo ${evpn_netreseaulandist[*]}|grep "${vpn_reseaulandist[$novpn]}")"
    if [ "${ligne[$novpn]}" == "" ]; then
      vpn_down[$novpn]="oui"
    fi
#    echo "maintenant, on verifie s'il est en hold"
    cptpassage=0
    #on va tester si la route manque dans ipsec
    while (( $cptpassage <= $nosec ));
    do
      if [ "${evpn_netreseaulandist[$cptpassage]}" == "${vpn_reseaulandist[$novpn]}" ]&&[ "${vpn_down[$novpn]}" != "oui" ]; then
        if [ "${evpn_netreseauwandist[$cptpassage]}" == "%hold" ]; then
          vpn_down[$novpn]="oui"
        fi
      fi
      cptpassage=$((cptpassage + 1))
    done
###    on peut pas pinguer un reseau local via le vpn sur ipcop.... :-(
###    hping -1 -i 1 -c 2 -a 192.168.x.xx -I eth0 192.168.y.yy   # ferait bien l'affaire mais il faut
###    une adresse dans le reseau qui est toujours up, a ne peut pas etre celle d'ipcop

###    #on va tester si 5 pings passent
###    ping -c 5 -q -w 10 ${vpn_addresselandist[$novpn]}
###    retval=$?
###    if [ "$retval" > 0 ]; then
###      vpn_down[$novpn]="oui"
###    fi
#    #on va tester si la route existe dans ipsec mais est morte
#    if [ ${vpn_down[$novpn]} == "oui" ]&&[ "${vpn_trouve[$novpn]}" != "non"]; then
#      vpn_trouve[$novpn]="oui"
#    fi
   
#   maintenant, on sait si le canal est bon ou mauvais
    if [ ${vpn_down[$novpn]} == "oui" ]; then
      /usr/bin/logger -t reconn-vpn "le reseau ${vpn_nom[$novpn]} n est pas actif, tentative d arret/relance du vpn numero ${vpn_no[novpn]}"
      /usr/local/bin/ipsecctrl D ${vpn_no[$novpn]}
      /usr/local/bin/ipsecctrl S ${vpn_no[$novpn]}
      if [ $biper == 1 ]; then
        /usr/bin/beep -f 1500 -l 100;/usr/bin/beep -f 2000 -l 50;/usr/bin/beep -f 1500 -l 100
      fi
    fi
    novpn=$((novpn + 1 ))
fi
done < /var/ipcop/vpn/config
IFS=$back_ifs

désolé :lol:
Avatar de l’utilisateur
mab
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 293
Inscrit le: 03 Sep 2004 22:42
Localisation: centre

Re: script de reconnexion automatique des vpn

Messagepar mab » 09 Sep 2011 23:21

J'ai fait une mise à jour de ce script, je ne sais toujours pas comment faire un ping entre 2 ipcop reliés par un vpn. Cependant, de temps en temps un vpn (ou plusieurs) vpn est/sont hs, avec ce fameux message
initial Main Mode message received on a.b.c.d:4500 but no connection has been authorized with policy=PSK
.
Le statut du vpn dans l'interface est vert, pour ipcop, tout va bien... sauf que le vpn est mort. Et ça peut durer des heures.

Comme je l'ai dit, je n'arrive pas à détecter ce problème avec un ping.

Je me suis donc penché à me fier à la log, pour moi, c'est très efficace, si vous avez des retours, n'hésitez pas. :wink:

Code: Tout sélectionner
#!/bin/sh
# MAB - creation le 27/09/2010
# remise en service d'un vpn ipcop en cas de coupure
# cas teste : - perte de la configuration d'un vpn (manque une ligne dans "ipsec eroute")
#             - vpn en attente de reconnexion (message "%hold" dans "ipsec eroute" pour le vpn concerne)
#             - la route du vpn est active dans l'interface, mais est morte de l'autre cote (le RUHERE ne fonctionne pas)
# Script sous licence gpl - contactez moi - m(point)abraham(at)laposte(point)net
#
#MAB v2.0 - version de production
#MAB v2.1 - update le 2011/02/13 : ajout de l'arret du vpn avant relance
#MAB v2.2 - update le 2011/03/03 : ajout du bip en cas de defaillance detectee
#MAB v2.3 - update le 2011/09/09 : detection d'un vpn mort et pourtant vu par ipcop comme ok - detection par la log

#mettre 0 ou 1 dans biper pour signaliser ou non la panne auditivement.
biper=1

#fin des parametres utilisateur modifiables

nosec=0
#echo "debut init listeroute"
/usr/sbin/ipsec eroute >/tmp/liste2.txt
while IFS=' ' read a01 evpn_netlanloc[$nosec] a02 evpn_netlandist[$nosec] a03 evpn_netwandist[$nosec];
do
#  echo -e "${evpn_netlanloc[$nosec]} ${evpn_netlandist[$nosec]} ${evpn_netwandist[$nosec]}"
  evpn_netreseaulandist[$nosec]="$(echo ${evpn_netlandist[$nosec]}|cut -f1 -d"/")"
  evpn_netreseauwandist[$nosec]="$(echo ${evpn_netwandist[$nosec]}|cut -f2 -d"@"|cut -f1 -d":")"
#  echo -e "${evpn_netreseaulandist[$nosec]} ${evpn_netreseauwandist[$nosec]}"
  nosec=$((nosec + 1 ))
done < /tmp/liste2.txt
#echo "fin init liste route"
#echo "${evpn_netreseauwandist[*]}"

#recherche des partenaires vpn qui tentent vainement de se connecter
result_tmp=`date +%H:%M`
touch /tmp/liste3.txt
tail -n 500 /var/log/messages|grep $result_tmp|grep "pluto"|grep ":4500:"|grep "but no connection has been authorized with policy=PSK">/tmp/liste3.txt

back_ifs=$IFS
novpn=0
while IFS=, read vpn_no[$novpn] vpn_actif[$novpn] vpn_nom[$novpn] a04 vpn_typevpn[$novpn] a06 a07 a08 a09 vpn_netlanloc[$novpn] a11 vpn_netwandist[$novpn] vpn_netlandist[$novpn] a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 vpn_commentaire[$novpn] a28 a29
do
  if [ "${vpn_actif[$novpn]}" == "on" ]&&[ "${vpn_typevpn[$novpn]}" == "net" ]; then
    vpn_addresselandist[$novpn]="$(echo ${vpn_commentaire[$novpn]}|awk '{print $1}')"
    vpn_reseaulandist[$novpn]="$(echo ${vpn_netlandist[$novpn]}|cut -f1 -d"/")"

    vpn_down[$novpn]="non"
#    echo "on teste maintenant si le vpn est tombe avec la liste ${evpn_netreseaulandist[*]} et le test ${vpn_reseaulandist[$novpn]}"
    #on va tester si la route existe dans ipsec mais est morte
    ligne[$novpn]="$(echo ${evpn_netreseaulandist[*]}|grep "${vpn_reseaulandist[$novpn]}")"
    if [ "${ligne[$novpn]}" == "" ]; then
      vpn_down[$novpn]="oui"
    fi
#    echo "maintenant, on verifie s'il est en hold"
    cptpassage=0
    #on va tester si la route manque dans ipsec
    while (( $cptpassage <= $nosec ));
    do
      if [ "${evpn_netreseaulandist[$cptpassage]}" == "${vpn_reseaulandist[$novpn]}" ]&&[ "${vpn_down[$novpn]}" != "oui" ]; then
        if [ "${evpn_netreseauwandist[$cptpassage]}" == "%hold" ]; then
          vpn_down[$novpn]="oui"
        fi
        result_tmp=`cat /tmp/liste3.txt|grep ${evpn_netreseauwandist[$cptpassage]}|tail -n 1`
        if [ "-$result_tmp-" != "--" ]; then
          vpn_down[$novpn]="oui"
        fi
      fi
      cptpassage=$((cptpassage + 1))
    done

#   maintenant, on sait si le canal est bon ou mauvais
    if [ ${vpn_down[$novpn]} == "oui" ]; then
      /usr/bin/logger -t reconn-vpn-mab "le reseau ${vpn_nom[$novpn]} n est pas actif, tentative d arret/relance du vpn numero ${vpn_no[novpn]}"
      /usr/local/bin/ipsecctrl D ${vpn_no[$novpn]}
      /usr/local/bin/ipsecctrl S ${vpn_no[$novpn]}
      if [ $biper == 1 ]; then
        /usr/bin/beep -f 1500 -l 100;/usr/bin/beep -f 2000 -l 50;/usr/bin/beep -f 1500 -l 100
      fi
    fi
    novpn=$((novpn + 1 ))
fi
done < /var/ipcop/vpn/config
IFS=$back_ifs

Avatar de l’utilisateur
mab
Capitaine de vaisseau
Capitaine de vaisseau
 
Messages: 293
Inscrit le: 03 Sep 2004 22:42
Localisation: centre


Retour vers IPCop

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron