Subversion Repositories ALCASAR

Rev

Rev 672 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
219 jeremy 1
#!/bin/bash
328 franck 2
# $Id: alcasar-load_balancing.sh 900 2012-06-21 16:15:27Z franck $
221 franck 3
 
672 richard 4
# alcasar-load_balancing.sh
5
# by BOUIJOUX Franck (3abTux) <3abtux@free.fr>
6
# This script is distributed under the Gnu General Public License (GPL)
219 jeremy 7
 
672 richard 8
# Équilibrage de charge sur 2 ou plusieurs liens internet (en cours d'expérimentation) 
9
# Définion des poids des routes   :  même poids --> alternance des connexions. Sinon le poids le plus faible est prioritaire
10
# Load balancing with 2 or more Internet links (experimental)
11
# Weitght of routes : same --> switch between link. The lowest weight gain the priority.
12
 
219 jeremy 13
WEIGHT1=1
14
WEIGHT2=1
221 franck 15
#WEIGHT3=3
219 jeremy 16
 
328 franck 17
# Définition des interfaces :
219 jeremy 18
DEV1=${1-eth0}  # defaut eth0
900 franck 19
DEV2=${2-eth0:1}  # defaut eth0:1 mais peut être autre chose :-)
20
#DEV3=${3-eth0:2}  # defaut eth0:2 mais peut être autre chose :-)
219 jeremy 21
 
22
# Trouver les adresses pour chaque interface
23
IP1=`ifconfig $DEV1 | grep inet | awk '{ print $2 }' | awk -F: '{ print $2 }'`
24
IP2=`ifconfig $DEV2 | grep inet | awk '{ print $2 }' | awk -F: '{ print $2 }'`
25
#IP3=`ifconfig $DEV3 | grep inet | awk '{ print $2 }' | awk -F: '{ print $2 }'`
26
 
328 franck 27
# Trouver les passerelles pour chaque interface { ne fonctionne pas bien avec une seule interface } --> forcer les passerelles !
376 franck 28
GW1=192.168.1.1
900 franck 29
GW2=192.168.2.6
30
#GW3=192.168.3.1
219 jeremy 31
 
900 franck 32
echo "Acces internet depuis $DEV1: IP=$IP1  par la Gateway=$GW1"
33
echo "            et depuis $DEV2: IP=$IP2  par la Gateway=$GW2"
219 jeremy 34
#echo "            et depuis $DEV3: IP=$IP3  par la GW=$GW3"
35
 
900 franck 36
#############################
37
## Mise en place des routes 
219 jeremy 38
 
39
# Tester si les tables existent sinon les créer
40
if [ -z "`cat /etc/iproute2/rt_tables | grep '^252'`" ] ; then
41
        echo "252       rt_dev1" >> /etc/iproute2/rt_tables
42
fi
43
 
44
if [ -z "`cat /etc/iproute2/rt_tables | grep '^251'`" ] ; then
45
        echo "251       rt_dev2" >> /etc/iproute2/rt_tables
46
fi
47
#if [ -z "`cat /etc/iproute2/rt_tables | grep '^250'`" ] ; then
48
#       echo "250       rt_dev3" >> /etc/iproute2/rt_tables
49
#fi
50
 
51
# Tables de routage
52
ip route add default via $GW1 table rt_dev1
53
ip route add default via $GW2 table rt_dev2
54
#ip route add default via $GW3 table rt_dev3
55
 
328 franck 56
# Création des règles
219 jeremy 57
ip rule add from $IP1 table rt_dev1
58
ip rule add from $IP2 table rt_dev2
59
#ip rule add from $IP3 table rt_dev3
60
 
61
# Effacer la route par défaut existante
900 franck 62
ip route del default
219 jeremy 63
if [ ! -z "`ip route show table main | grep 'nexthop'`" ] ; then
64
        ip route del default scope global
65
fi
66
 
328 franck 67
# Alterne les liens basés sur chaque route
219 jeremy 68
ip route add default scope global nexthop via $GW1 dev $DEV1 weight $WEIGHT1 \
69
                                nexthop via $GW2 dev $DEV2 weight $WEIGHT2
70
#                               nexthop via $GW3 dev $DEV3 weight $WEIGHT3 
71
 
72
 
73
# Purge le cache
74
ip route flush cache
75
 
76
# Fin de alcasar-load_balancing.sh