#!/bin/sh
# Script dual ISP and multi LAN plus loadbalancing
# split 2 LAN segment to 2 ISP
# using 4 nic : 2 nic to 2 isp and 2 nic to LAN and load balancing
# mambang 2008
#
# ISP 1
TABLE1=1
IF1=eth0
GW1=192.168.1.1
# ISP 2
TABLE2=2
IF2=eth1
GW2=192.168.1.2
splitgateway() {
$1 $IF1 $TABLE1 $GW1
$1 $IF2 $TABLE2 $GW2
if [ "$1" = "start" ]
then
$IP route del default
$IP route add default equalize nexthop via $GW1 dev $IF1 nexthop via $GW2 dev $IF2
$IPTABLES -t mangle -A PREROUTING -p ALL -j CONNMARK --restore-mark
$IPTABLES -t mangle -A PREROUTING -p ALL -i $IF1 -m mark --mark 0 -j MARK --set-mark $TABLE1
$IPTABLES -t mangle -A PREROUTING -p ALL -i $IF2 -m mark --mark 0 -j MARK --set-mark $TABLE2
$IPTABLES -t mangle -A POSTROUTING -p ALL -o $IF1 -m state --state NEW -j MARK --set-mark $TABLE1
$IPTABLES -t mangle -A POSTROUTING -p ALL -o $IF2 -m state --state NEW -j MARK --set-mark $TABLE2
$IPTABLES -t mangle -A POSTROUTING -p ALL -m state --state NEW -j CONNMARK --save-mark
$IPTABLES -t nat -A POSTROUTING -p ALL -o $IF1 -m mark --mark $TABLE1 -j SNAT --to-source $(find_primary_ip $IF1)
$IPTABLES -t nat -A POSTROUTING -p ALL -o $IF2 -m mark --mark $TABLE2 -j SNAT --to-source $(find_primary_ip $IF2)
fi
}
IP=/sbin/ip
IPTABLES=/sbin/iptables
init() {
echo "10" > /proc/sys/net/ipv4/route/gc_timeout
echo "1" > /proc/sys/net/ipv4/ip_forward
IF=$1
TABLE=$2
FWIP=$(find_primary_ip $IF)
GWIP=$3
}
stop() {
init $1 $2 $3
route_stop
rule_stop
}
route_stop() {
if [ ! -z "$($IP route show table $TABLE)" ]
then
$IP route flush table $TABLE
fi
if [ ! -z "$GW1" ]
then
$IP route del default
$IP route add default via $GW1
fi
$IP route flush cache
}