All pastes #988069 Raw Edit

Untitled

public text v1 · immutable
#988069 ·published 2008-04-17 05:47 UTC
rendered paste body
#!/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
}