#!/bin/bash INTERFACE_1="rl0" I1ROUTE="0.0.0.0" INTERFACE_2="rl1" I2ROUTE="0.0.0.0" # redirection is setup as [primary outside]:[secoundary outside]:[inside] IP_REDIRECT="" # port redirection is setup as [inside]:[port]:[outside]:[port] PORT_REDIRECT="" ###################### ### END USER EDITS ### ###################### 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_OUTSIDE" done fi done } ping_test() { if [ "$CURR_INTERFACE" = "$INTERFACE_2" ] ; then ifconfig $INTERFACE_1 up route add 128.9.0.107 $I1ROUTE > /dev/null route add 198.41.0.4 $I1ROUTE > /dev/null route add 192.33.4.12 $I1ROUTE > /dev/null fi TEST=0 HINT1="" HINT1=`ping -c 1 -t 3 128.9.0.107 | grep "bytes from"` HINT2="" HINT2=`ping -c 1 -t 3 198.41.0.4 | grep "bytes from"` HINT3="" HINT3=`ping -c 1 -t 3 192.33.4.12 | grep "bytes from"` if [ "$HINT1" = "" ] ; then TEST=`echo 1+$TEST | bc`; fi if [ "$HINT2" = "" ] ; then TEST=`echo 1+$TEST | bc`; fi if [ "$HINT3" = "" ] ; then TEST=`echo 1+$TEST | bc`; fi if [ "$CURR_INTERFACE" = "$INTERFACE_2" ] ; then ifconfig $INTERFACE_1 down route delete 128.9.0.107 > /dev/null route delete 198.41.0.4 > /dev/null route delete 192.33.4.12 > /dev/null fi } switch() { 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 $OTHER_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 } #### # set your variables #### 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 ##### # test and switch if nessassary ##### ping_test if [ "$CURR_INTERFACE" = "$INTERFACE_2" ] ; then if [ "$TEST" = "0" ] ; then switch fi else if [ "$TEST" = "3" ] ; then switch fi fi