#!/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 }