Rexxer

Some tips for me and other

FreeBSD – резервирование канала Internet

Мои скрипты для резервирования канала Интернет. (FreeBSD 7.2 – 8).  Написано на основе одной из статей с сайта OpenNet.Ru.

reserve.sh (добавлено к crontab для запуска каждую минуту)

#!/bin/sh
PATH=”/sbin:/usr/bin”

#Main Provider Router
ISP1=”111.111.111.1″

#Second Provider Router
ISP2=”222.222.222.1″

#IF 2 channels don’t work – will be set it
DEFAULT_ISP=”111.111.111.1″

# IP’s for ping
OVER_ISP1=”444.444.444.4″
OVER_ISP2=”333.333.333.3″

# Local source IP’s
IP1=”111.111.111.2″
IP2=”222.222.222.2″

# Verify routes
netstat -nr | grep ${OVER_ISP1} >/dev/null 2>&1
if [ $? != 0 ]; then
echo “Add static route to ${OVER_ISP1} via ${ISP1}”
route add ${OVER_ISP1} ${ISP1} -static
fi
netstat -nr | grep ${OVER_ISP2} >/dev/null 2>&1
if [ $? != 0 ]; then
echo “Add static route to ${OVER_ISP2} via  ${ISP2}”
route add ${OVER_ISP2} ${ISP2} -static
fi
# What is work now
current_now=`netstat -nr | grep default | awk ‘{print $2}’`
echo -n “ping over ISP1:”
ping -c 2 -S ${IP1} ${OVER_ISP1} >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo ” [OK]”
ISP1_stat=0
else
echo ” [FAILED]”
ISP1_stat=1
mail -s “Main Internet-channel FAILED” root < /dev/null
fi
echo -n “ping over ISP2:”
ping -c 1 -S ${IP2} ${OVER_ISP2} >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo ” [OK]”
ISP2_stat=0
else
echo ” [FAILED]”
ISP2_stat=1
mail -s “Second Internet-channel FAILED” root < /dev/null
fi
if [ ${ISP1_stat} -eq 1 -a ${ISP2_stat} -eq 0 -a ${current_now} = ${ISP1} ]; then
# Для FreeBSD8 строка такая: if [ ${ISP1_stat} -eq 1 -a ${ISP2_stat} -eq 0 -a “${current_now} = ${ISP1}” ]; then
echo “ISP1 suck”
route delete default
route add default ${ISP2}
mail -s “Main Internet-channel FAILED – switching to Second” root < /dev/null
fi
if [ ${ISP1_stat} -eq 0 -a ${current_now} != ${ISP1} ]; then
# Для FreeBSD8: if [ ${ISP1_stat} -eq 0 -a “${current_now} != ${ISP1}” ]; then
echo “Back to ISP1”
route delete default
route add default ${ISP1}
/usr/local/etc/racoon/setkey.conf
mail -s “Main Internet-channel OK – switching back to MAIN” root < /dev/null
fi

Leave a Reply