Ecco uno script da utilizzare in caso di doppia connessione WAN su un server linux in modo da poter switchare da una all’altra in caso di down della linea.
è pensata per essere impostato come cron ad esempio con una configurazione del genere
*/1 * * * * root /opt/internetGatewayFailover
Ecco lo script:
#!/bin/bash
CHECK_IP=${CHECK_IP:-8.8.4.4}
PRIMARY_IF=${PRIMARY_IF:-eth0}
PRIMARY_GW=${PRIMARY_GW:-172.16.0.1}
BACKUP_IF=${BACKUP_IF:-eth1}
BACKUP_GW=${BACKUP_GW:-192.168.3.20}
# Compare arg with current default gateway interface for route to healthcheck IP
getGwInterface() {
# parametro 1 interfaccia
[[ "$1" = "$(ip route get "$CHECK_IP" | sed -rn 's/^.*dev ([^ ]*).*$/\1/p')" ]]
}
checkConnectivity() {
# parametro 1 interfaccia
# parametro 2 gateway
ip route add "$CHECK_IP" via $2 dev $1
PING_res=`ping -I $1 -c1 "$CHECK_IP"|grep 'packet loss'|cut -d ' ' -f4`
#echo $PING_res
ip route del "$CHECK_IP" via $2 dev $1
}
switchGw(){
# parametro 1 attuale gateway da rimuovere
# parametro 2 attuale interfaccia gateway da rimuovere
# parametro 3 nuovo gateway
# parametro 4 interfaccia nuovo gateway
ip route del default via "$1" dev "$2"
ip route add default via "$3" dev "$4"
}
if ping -c1 "$CHECK_IP" &>/dev/null
then
if getGwInterface "$PRIMARY_IF"
then
echo "Connessione attiva su gateway primario"
exit
else
echo "Connessione attiva su gateway backup"
echo "Switch se possibile su connessione primaria"
checkConnectivity "$PRIMARY_IF" "$PRIMARY_GW"
if [[ "$PING_res" = "1" ]]
then
echo "Switch possibile su primario"
switchGw "$BACKUP_GW" "$BACKUP_IF" "$PRIMARY_GW" "$PRIMARY_IF"
else
echo "Switch non possibile.... rimango su backup ed esco"
exit
fi
fi
else
echo "Connessione NON attiva"
if getGwInterface "$PRIMARY_IF"
then
echo "Switch comunque su backup"
switchGw "$PRIMARY_GW" "$PRIMARY_IF" "$BACKUP_GW" "$BACKUP_IF"
exit
else
echo "Switch comunque su primario"
switchGw "$BACKUP_GW" "$BACKUP_IF" "$PRIMARY_GW" "$PRIMARY_IF"
fi
fi
exit