Created
June 2, 2017 10:40
-
-
Save andreivmaksimov/cae904ce2cac1fcb3720fb6678902a83 to your computer and use it in GitHub Desktop.
SOHO Linux Router 2 ISP failover script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Set defaults if not provided by environment | |
CHECK_DELAY=${CHECK_DELAY:-5} | |
CHECK_IP=${CHECK_IP:-8.8.8.8} | |
PRIMARY_IF=${PRIMARY_IF:-eth2} | |
PRIMARY_GW=${PRIMARY_GW:-192.168.1.1} | |
BACKUP_IF=${BACKUP_IF:-eth1} | |
BACKUP_GW=${BACKUP_GW:-192.168.3.1} | |
# Compare arg with current default gateway interface for route to healthcheck IP | |
gateway_if() { | |
[[ "$1" = "$(ip r g ${CHECK_IP} | sed -rn 's/^.*dev ([^ ]*).*$/\1/p')" ]] | |
} | |
CURRENT_GW_IF=$(ip r | grep default | cut -d' ' -f5) | |
echo Current GW = ${CURRENT_GW_IF} | |
# Cycle healthcheck continuously with specified delay | |
while sleep "$CHECK_DELAY" | |
do | |
CURRENT_GW_IF=`ip r | grep default | cut -d' ' -f5` | |
#echo "Setting ${CHECK_IP} traffic through ${PRIMARY_GW}" | |
route add ${CHECK_IP} gw ${PRIMARY_GW} | |
# If healthcheck succeeds from primary interface | |
if ping -I "$PRIMARY_IF" -c1 "$CHECK_IP" &>/dev/null | |
then | |
echo "Primary interface ${PRIMARY_IF} is working" | |
# Are we using the backup? | |
#echo Current GW IF = ${CURRENT_GW_IF} | |
#echo Backup IF = ${BACKUP_IF} | |
if [ "${CURRENT_GW_IF}" == "${BACKUP_IF}" ]; then # Switch to primary | |
echo "Switching from backup interface ${BACKUP_IF} to primary ${PRIMARY_IF}" | |
ip r d default via "${BACKUP_GW}" dev "${BACKUP_IF}" | |
ip r a default via "${PRIMARY_GW}" dev "${PRIMARY_IF}" | |
fi | |
else | |
# Are we using the primary? | |
echo "Primary interface ${PRIMARY_IF} is not working" | |
if [ "${CURRENT_GW_IF}" == "${PRIMARY_IF}" ]; then # Switch to backup | |
echo "Switching from primary ${PRIMARY_IF} interface to backup ${BACKUP_IF}" | |
ip r d default via "${PRIMARY_GW}" dev "${PRIMARY_IF}" | |
ip r a default via "${BACKUP_GW}" dev "${BACKUP_IF}" | |
fi | |
fi | |
#echo "Deleting ${CHECK_IP} traffic through ${PRIMARY_GW}" | |
route del 8.8.8.8 | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment