I put together a very crude ISP failover script for a small office
running an OpenBSD firewall and 2 broadband Internet connections.
It's run every minute from root's crontab.
Comments welcome, keep in mind that I am not a programmer. And I know
the "echo > /dev/null" lines are ugly, and I even know how to fix it, I
just didn't do it yet.
Enjoy!
-Jason
=====
$ cat failover
#!/bin/sh
EMAIL=insert_your_INTERNAL_email_account_here
PRIMARY_IP=static_ip_of_primary_connection
PRIMARY_GW=ip_of_primary_gateway
BACKUP_IP=static_ip_of_backup_connection
BACKUP_GW=ip_of_backup_gateway
DEFAULT_GW=`cat /etc/mygate`
# echo "Begin Default GW: $DEFAULT_GW"
# test if primary is up
if { ping -c 5 -w 2 -I $PRIMARY_IP $PRIMARY_GW > /dev/null; } then
# primary up, check default gateway
if [ $PRIMARY_GW == $DEFAULT_GW ]; then
# primary gateway equals default gateway: exit
# echo "Primary up, no change"
echo > /dev/null
else
# set default gateway to primary
logger -s -t "Failover" "Restoring PRIMARY connection."
echo -n $PRIMARY_GW > /etc/mygate
route change default $PRIMARY_GW
fi
elif { ping -c 5 -w 2 -I $BACKUP_IP $BACKUP_GW > /dev/null; } then
# primary down, backup up: test default gateway
if [ $BACKUP_GW == $DEFAULT_GW ]; then
# secondary is already default: exit
# echo "Secondary up, no change"
echo > /dev/null
else
# switch default gateway to backup
logger -s -t "Failover" "Switching to BACKUP
connection."
echo -n $BACKUP_GW > /etc/mygate
route change default $BACKUP_GW
fi
else
# both are down
logger -s -t "Failover" "Both Internet gateways are DOWN!"
echo "Both Internet gateways are DOWN!" | mail -s "Failover
warning!" $EMAIL
fi
# echo "End Default GW: $DEFAULT_GW"
=====