Script bascule de passerelle

Bonjour,

Je réalise un script pour changer la passerelle par defaut au niveau de mon serveur linux (iptables, squid, dansguardian)

Je dispose de 2 accès internet, le premier est mon serveur linux et le second est un routeur. mon but c’est que si le premier accès tombe en panne cela bascule sur les autres.
(Mes postes lan sont configurés pour utilisé la passerelle par défaut LINUX)
Voici mon script:

#!/bin/bash

Check_route_defaut=$(route | grep -cw "default         192.168.1.1")
echo etape1-check de la passerelle si 1 = passerelle 192.168.1.1==>  $Check_route_defaut
if [ $Check_route_defaut == 1 ];then
        echo "etape2- Si 1 (passerelle 192.168.1.1) check si connexion OK==> RAS ou non==>Changement de route"
        Check_connexion_neuf=$(ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up")
        echo etape3-check la connexion neuf ==> $Check_connexion_neuf
                if [ $Check_connexion_neuf == 1 ]; then
                        echo RAS
                else
                        #Route add default gw 172.16.0.175
                        #/etc/init.d/networking restart
                        echo Bascule sur la connexion de secours
                fi

else
        echo etape4-Si passerelle <> de 192.168.1.1 cela signifie qu on n est sur la connexion de secour
        Check_connexion_neuf=$(ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up")
                echo "etape5  On check si la connexion neuf est revenue, si oui on rebascule sur la connexion neuf si non on reste sur celle de secour" ==>$Check_connexion_neuf

                if [ $Check_connexion_neuf == 1 ]; then
                        #Route add default gw 192.168.1.1
                        #/etc/init.d/networking restart
                        echo bascule sur la connexion neuf
                else
                        echo reste sur la connexion de secours
                fi

fi
echo "poursuite ..."

Est-ce que mon script est correcte par rapport a mon explication? Y-a-t- il des erreurs?

Merci

guigui69

<> : différent de en C mais en bash :question:

EDIT :
tes ‘else’ n’ont aucune efficacité, sinon mettre un message, non ?

Oui les else sont la pour afficher uniquement des messages (c’est pour les tests)

Quel est le problème?

guigui69

Dans cette ligne :

il manque alors des “”, pour plus de clarté car on ne comprend pas bien que c’est un message à afficher, toute cette ligne.

De manière un peu plus basique ça active aussi la coloration syntaxique :slightly_smiling:

D’accord je corrige ca, sinon mon script est-il bon pour réalise se que je veut faire?

Je suis assez embêté j’aurais aimé trouvé une solution avec des bouléens de partout mais non le shell est trop limité pour ça il semble. Donc j’aurais juste une remarque sur la forme du code :

[code]#!/bin/bash

Check_route_defaut=$(route | grep -qw ‘default 192.168.1.1’ && true || false)
Check_connexion_neuf=$(ls9box --ip 192.168.1.1 --status | grep -qw ‘Connexion Internet : up’)

if [ $Check_route_defaut == 1 && $Check_connexion_neuf == 0 ]; then
# On bascule sur la connexion de secours
elif [ $Check_connexion_neuf == 1 ];
# On bascule sur la connexion neuf
fi
echo “poursuite …”[/code]
Je trouve ça plus clair car on vois directement les deux cas qui entrainent un traitement. On voit en haut les deux tests exécutés, ils sont pas dupliqué dans le code. Vraiment dommage pour les booléens mais je vai regarder de plus près. :smiling_imp:

Merci pour ta réponse.

on ma proposer ceci comme script:

#!/bin/bash

addRoute() {
route add default gw $1
}

delRoute() {
route del default gw $1
}


defAddr="192.168.1.1"
resAddr="172.16.0.175"

Status=$(ls9box --ip $defAddr --status |grep -cw -- "- Connexion Internet : up")
Route=$(route |grep -cw "default *192\.168\.1\.1")

case $((Route + Status))
 in
   0)
        echo 1
        delRoute $defAddr
        addRoute $resAddr
   ;;
   1) case $Route
       in
         0)
                echo 2
                delRoute $resAddr
                addRoute $defAddr
         ;;
         1)
                echo 3
                delRoute $defAddr
                addRoute $resAddr
         ;;
      esac
   ;;
   2)
                echo 4
                delRoute $resAddr
                addRoute $defAddr
   ;;
esac

Qu’en pensez-vous?

guigui69

Bonjour à tous,

Je revient (j’étais en vacance 8) ) et pour finir je voudrait que se script s’exécuter en tant que service.

Le but c’est qu’il exécute tout les XX minutes ce script, avant de partir j’avais trouvé de l’aide sur google, mais la impossible de remettre la main sur ces liens.

Quelqu’un pourrait-il m’éclairer sur la démarche à suivre?

Merci

guigui69

Utilise cron :stuck_out_tongue:

Imaginons que ton script se trouve dans /root/scripts/gw_change.sh

Ta crontab s’ouvre dans un editeur vi, il reste plus qu’à rajouter la ligne :

Et ton script se lancera tous les 1/4h. Change 15 par le nombre de minutes que tu veux…

merci pour votre aide.

comment on utilise crontab -e car je rentre dedans je rajoute ma ligne, mais je n’arrive pas a enregistrer.

A chaque fois que je retourne dedans la ligne que j’ai ajouté n’y est plus.

c’est bon je suis arrivé a enregistrer.

Je test ca.

guigui69