network fail over
Jan. 5th, 2002 08:38 pmThis is the network fail over script that I promised you all a few weeks back..
sorry it took so long to post. I have another script that sets up these interfac
es on boot. along with natd... I will send another lj entry with that info... /e
tc/rc.[anything] is a hideous monstrosity... I really need to sit down some time
and rewrite them... maybe one day... la la la...
sorry it took so long to post. I have another script that sets up these interfac
es on boot. along with natd... I will send another lj entry with that info... /e
tc/rc.[anything] is a hideous monstrosity... I really need to sit down some time
and rewrite them... maybe one day... la la la...
#!/bin/bash
INTERFACE_1="rl0"
I1ROUTE="[default route for interface 1]"
INTERFACE_2="rl1"
I2ROUTE="[default route for interface 2]"
# redirection is setup as [primary outside]:[secoundary outside]:[inside]
IP_REDIRECT=""
# port redirection is setup as [inside]:[port]:[outside]:[port]
PORT_REDIRECT=""
setup_nat()
{
for ADDY in `echo $IP_REDIRECT`; do
if [ "$OTHER_INTERFACE" = "$INTERFACE_1" ] ; then
IP_OUTSIDE=`echo $ADDY | awk -F : '{ print $1 }'`
elif [ "$OTHER_INTERFACE" = "$INTERFACE_2" ] ; then
IP_OUTSIDE=`echo $ADDY | awk -F : '{ print $2 }'`
else
echo "redirect interface not found" >> /var/log/netfix
fi
IP_INSIDE=`echo $ADDY | awk -F : '{ print $3 }'`
REDIRECT="$REDIRECT -redirect_address $IP_INSIDE $IP_OUTSIDE"
if [ "$OTHER_INTERFACE" = "$INTERFACE_1" ] ; then
for PORT_ADDY in `echo $PORT_REDIRECT`; do
IP_OUTSIDE=`echo $PORT_ADDY | awk -F : '{ print $3":"$4
}'`
IP_INSIDE=`echo $PORT_ADDY | awk -F : '{ print $1":"$2 }
'`
REDIRECT="$REDIRECT -redirect_port tcp $IP_INSIDE $IP_OU
TSIDE"
done
fi
done
}
DATE=`date`
CURR_INTERFACE=`ps -ax | awk '$5 ~ /^natd/ { print $7 }'`
if [ "$CURR_INTERFACE" = "$INTERFACE_1" ] ; then
OTHER_INTERFACE=`echo "$INTERFACE_2"`
CURR_ROUTE=`echo "$I1ROUTE"`
OTHER_ROUTE=`echo "$I2ROUTE"`
elif [ "$CURR_INTERFACE" = "$INTERFACE_2" ] ; then
OTHER_INTERFACE=`echo "$INTERFACE_1"`
CURR_ROUTE=`echo "$I2ROUTE"`
OTHER_ROUTE=`echo "$I1ROUTE"`
else
echo "$date $CURR_INTERFACE interface unknown" >> /var/log/netfix
exit
fi
if [ "$CURR_INTERFACE" = "$INTERFACE_2" ] ; then
ifconfig $INTERFACE_1 up
route add 128.9.0.107 $I1ROUTE > /dev/null
TEST2=`ping -c 3 -t 3 128.9.0.107 | grep "bytes from"`
if [ "TEST2" = "" ] ; then
route delete 128.9.0.107 > /dev/null
ifconfig $INTERFACE_1 down
else
route delete 128.9.0.107 > /dev/null
ifconfig $INTERFACE_2 down
fi
fi
TEST=`ping -c 3 -t 3 198.41.0.4 | grep "bytes from"`
if [ "$TEST" = "" ] ; then
echo "$DATE changing from interface $CURR_INTERFACE to $OTHER_INTERFACE"
>> /var/log/netfix
# wipe out old interface
kill -TERM `cat /var/run/natd.pid`
route delete default > /dev/null
ipfw delete 50
ifconfig $CURR_INTERFACE down
# set up new interface
ifconfig $CURR_INTERFACE up
ipfw add 50 divert natd all from any to any via $OTHER_INTERFACE >> /dev
/null 2>> /var/log/netfix
route add default $OTHER_ROUTE >> /dev/null 2>> /var/log/netfix
sleep 10
setup_nat
natd -n $OTHER_INTERFACE $REDIRECT >> /dev/null 2>> /var/log/netfix
fi