Subversion Repositories ALCASAR

Rev

Rev 1469 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 1469 Rev 1789
Line 1... Line 1...
1
#!/bin/bash
1
#!/bin/bash
2
# $Id: alcasar-load_balancing.sh 1469 2014-10-30 21:58:47Z richard $
2
# $Id: alcasar-load_balancing.sh 1789 2016-02-07 16:09:12Z franck $
3
 
3
 
4
# Generic Load balancer for multiple WAN links - version 1.1 (04 Feb 2011)
4
# Generic Load balancer for multiple WAN links - version 1.1 (04 Feb 2011)
5
# (c) 2011 Pau Oliva Fora - http://pof.eslack.org
5
# (c) 2011 Pau Oliva Fora - http://pof.eslack.org
6
#
6
#
7
# Licensed under GPLv3 - for full terms see:
7
# Licensed under GPLv3 - for full terms see:
Line 31... Line 31...
31
CONF_FILE="$DIR_ETC/alcasar.conf"
31
CONF_FILE="$DIR_ETC/alcasar.conf"
32
MULTIWAN=`grep MULTIWAN= $CONF_FILE|cut -d"=" -f2`
32
MULTIWAN=`grep MULTIWAN= $CONF_FILE|cut -d"=" -f2`
33
MULTIWAN=${MULTIWAN:=off}
33
MULTIWAN=${MULTIWAN:=off}
34
FAILOVER=`grep FAILOVER= $CONF_FILE|cut -d"=" -f2`
34
FAILOVER=`grep FAILOVER= $CONF_FILE|cut -d"=" -f2`
35
FAILOVER=${FAILOVER:=30}
35
FAILOVER=${FAILOVER:=30}
36
INTIF=`grep ^INTIF= $CONF_FILE|cut -d"=" -f2`				# INTernal InterFace
36
EXTIF=`grep ^EXTIF= $CONF_FILE|cut -d"=" -f2`				# INTernal InterFace
37
 
37
 
38
 
38
 
39
# space separated list of public IPs to ping in watchdog mode
39
# space separated list of public IPs to ping in watchdog mode
40
# set this to some public ip addresses pingable and always on.
40
# set this to some public ip addresses pingable and always on.
41
TESTIPS="8.8.8.8 192.0.32.10"
41
TESTIPS="8.8.8.8 192.0.32.10"
Line 67... Line 67...
67
		WT=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $5}'`		# WEIGHT
67
		WT=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $5}'`		# WEIGHT
68
		WT=${WT:-1}
68
		WT=${WT:-1}
69
		IP=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $3}' | cut -d"/" -f1`	# @IP
69
		IP=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $3}' | cut -d"/" -f1`	# @IP
70
 
70
 
71
		if [ $i -ne 0 ]; then
71
		if [ $i -ne 0 ]; then
72
			[ -e /etc/sysconfig/network-scripts/ifcfg-$INTIF:$i ] && ifdown $INTIF:$i && rm -f /etc/sysconfig/network-scripts/ifcfg-$INTIF:$i
72
			[ -e /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i ] && ifdown $EXTIF:$i && rm -f /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i
73
			IFACE=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $2}'`	# IFACE
73
			IFACE=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $2}'`	# IFACE
74
			IP_NET=`grep "^$INT=" $CONF_FILE | awk -F'"' '{print $2}' | awk -F, '{ print $3}'`	# IP
74
			IP_NET=`grep "^$INT=" $CONF_FILE | awk -F'"' '{print $2}' | awk -F, '{ print $3}'`	# IP
75
			NET="`ipcalc -n $IP_NET | cut -d"=" -f2`/`ipcalc -p $IP_NET|cut -d"=" -f2`"
75
			NET="`ipcalc -n $IP_NET | cut -d"=" -f2`/`ipcalc -p $IP_NET|cut -d"=" -f2`"
76
			GW=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $4}'`		# @GW
76
			GW=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $4}'`		# @GW
77
			MTU=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $6}'`	# MTU
77
			MTU=`grep "$INT=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $6}'`	# MTU
78
 
78
 
79
			# Config $INTIF:$i (Internet)
79
			# Config $EXTIF:$i (Internet)
80
			cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF:$i
80
			cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i
81
DEVICE=$IFACE
81
DEVICE=$IFACE
82
BOOTPROTO=static
82
BOOTPROTO=static
83
IPADDR=`echo $IP | cut -d"/" -f1`
83
IPADDR=`echo $IP | cut -d"/" -f1`
84
NETMASK=`ipcalc -m $IP_NET | cut -d= -f2`
84
NETMASK=`ipcalc -m $IP_NET | cut -d= -f2`
85
NETWORK=`ipcalc -n $IP_NET | cut -d= -f2`
85
NETWORK=`ipcalc -n $IP_NET | cut -d= -f2`
Line 90... Line 90...
90
IPV6INIT=no
90
IPV6INIT=no
91
IPV6TO4INIT=no
91
IPV6TO4INIT=no
92
ACCOUNTING=no
92
ACCOUNTING=no
93
USERCTL=no
93
USERCTL=no
94
EOF
94
EOF
95
			echo "ifup $INTIF:$i"
95
			echo "ifup $EXTIF:$i"
96
			ifup $INTIF:$i
96
			ifup $EXTIF:$i
97
			NET="`ipcalc -n $IP_NET | cut -d"=" -f2`/`ipcalc -p $IP_NET|cut -d"=" -f2`"
97
			NET="`ipcalc -n $IP_NET | cut -d"=" -f2`/`ipcalc -p $IP_NET|cut -d"=" -f2`"
98
		else
98
		else
99
			IFACE="$INTIF"
99
			IFACE="$EXTIF"
100
			IP_NET=`grep "^PUBLIC_IP=" $CONF_FILE | awk -F'=' '{print $2}'`			# IP/MSK
100
			IP_NET=`grep "^PUBLIC_IP=" $CONF_FILE | awk -F'=' '{print $2}'`			# IP/MSK
101
			IP=`grep "^PUBLIC_IP=" $CONF_FILE | awk -F= '{ print $2 }' | cut -d"/" -f1`	# @IP
101
			IP=`grep "^PUBLIC_IP=" $CONF_FILE | awk -F= '{ print $2 }' | cut -d"/" -f1`	# @IP
102
			GW=`grep "^GW=" $CONF_FILE | awk -F= '{print $2}'`				# @GW
102
			GW=`grep "^GW=" $CONF_FILE | awk -F= '{print $2}'`				# @GW
103
#			MTU=`grep "^PUBLIC_MTU=" $CONF_FILE | awk -F= '{print $2}'`			# MTU
103
#			MTU=`grep "^PUBLIC_MTU=" $CONF_FILE | awk -F= '{print $2}'`			# MTU
104
		fi # End
104
		fi # End
Line 138... Line 138...
138
 
138
 
139
###########################
139
###########################
140
# Fonction virtual Interfaces deleting
140
# Fonction virtual Interfaces deleting
141
###########################
141
###########################
142
delete_eth () {
142
delete_eth () {
143
	IFACE_COUNT=`ls -l /etc/sysconfig/network-scripts/ifcfg-$INTIF:* | wc -l`
143
	IFACE_COUNT=`ls -l /etc/sysconfig/network-scripts/ifcfg-$EXTIF:* | wc -l`
144
	echo $IFACE_COUNT
144
	echo $IFACE_COUNT
145
	while [ $IFACE_COUNT -ne 0 ]
145
	while [ $IFACE_COUNT -ne 0 ]
146
	do
146
	do
147
		i=$IFACE_COUNT	
147
		i=$IFACE_COUNT	
148
		echo "ifdown $INTIF:$i"
148
		echo "ifdown $EXTIF:$i"
149
		ifdown $INTIF:$i
149
		ifdown $EXTIF:$i
150
		rm -f /etc/sysconfig/network-scripts/ifcfg-$INTIF:$i
150
		rm -f /etc/sysconfig/network-scripts/ifcfg-$EXTIF:$i
151
		IFACE_COUNT=$(($IFACE_COUNT - 1))
151
		IFACE_COUNT=$(($IFACE_COUNT - 1))
152
	done
152
	done
153
	ip route del default scope global
153
	ip route del default scope global
154
#	ip route add default gw 192.168.1.1
154
#	ip route add default gw 192.168.1.1
155
}
155
}
Line 181... Line 181...
181
	
181
	
182
	DOWNCOUNT_BAK=0
182
	DOWNCOUNT_BAK=0
183
	DOWN_BAK=""
183
	DOWN_BAK=""
184
	NBIFACE=`grep "^WAN" $CONF_FILE | wc -l`	# Nbre interfaces virtuelles
184
	NBIFACE=`grep "^WAN" $CONF_FILE | wc -l`	# Nbre interfaces virtuelles
185
	echo "Nombre interfaces =  "$NBIFACE
185
	echo "Nombre interfaces =  "$NBIFACE
186
	WANIFACE[0]="$INTIF"
186
	WANIFACE[0]="$EXTIF"
187
	c=0
187
	c=0
188
	while [ $c -le $NBIFACE ]; do
188
	while [ $c -le $NBIFACE ]; do
189
		ITH=(`grep "WAN$c=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $2}'`)	# IFACE
189
		ITH=(`grep "WAN$c=" $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $2}'`)	# IFACE
190
		echo $ITH
190
		echo $ITH
191
		WANIFACE="${WANIFACE} $ITH"
191
		WANIFACE="${WANIFACE} $ITH"
Line 291... Line 291...
291
						fi
291
						fi
292
					done # End linkdown in DOWN
292
					done # End linkdown in DOWN
293
					# Interface en etat normal --> rajout de la règle en mode nexthop
293
					# Interface en etat normal --> rajout de la règle en mode nexthop
294
					if [ $FAILIF -eq 0 ]; then
294
					if [ $FAILIF -eq 0 ]; then
295
						IP=`ifconfig $iface |grep "inet adr" |cut -f 2 -d ":" |awk '{print $1}'`
295
						IP=`ifconfig $iface |grep "inet adr" |cut -f 2 -d ":" |awk '{print $1}'`
296
						if [ $iface != "$INTIF" ]; then
296
						if [ $iface != "$EXTIF" ]; then
297
							GW=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $4}'`		# @GW
297
							GW=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $4}'`		# @GW
298
							WT=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $5}'`		# @GW
298
							WT=`grep "$iface," $CONF_FILE | awk -F'"' '{ print $2 }' | awk -F, '{ print $5}'`		# @GW
299
						else
299
						else
300
							GW=`grep "^GW=" $CONF_FILE | awk -F= '{print $2}'`			# @GW
300
							GW=`grep "^GW=" $CONF_FILE | awk -F= '{print $2}'`			# @GW
301
						fi	
301
						fi