Meus roteadores multi-WAN Draytek podem usar o comando ping ou arp para monitorar a manutenção de atividade em todos os links Ethernet e VPN. (Obviamente, para o xDSL existem alternativas melhores.) O Ssh e o OpenVPN podem ser configurados para gerar keepalives internos. Eu não sei de nenhuma outra abordagem padrão.
Algo parecido com isto (não testado):
ROUTE1=up LINK1=up COUNT1=3
ROUTE2=up LINK2=up COUNT2=3
SHOUT=once
while sleep 5
do
if ping {destination_via1}
then
LINK1_UP=up COUNT1=3
else
[[ 0 -lt $COUNT1 ]] && COUNT1=$((COUNT1 - 1))
[[ 0 -ge $COUNT1 ]] && LINK1=down
fi
if ping {destination_via2}
then
LINK2_UP=up COUNT2=3
else
[[ 0 -lt $COUNT2 ]] && COUNT2=$((COUNT2 - 1))
[[ 0 -ge $COUNT2 ]] && LINK2=down
fi
if [[ down = $LINK1 -a up = $ROUTE1 ]]
then
# add code here to remove route via LINK1 #
ROUTE1=down
elif [[ up = $LINK1 -a down = $ROUTE1 ]]
# add code here to add route via LINK1 #
ROUTE1=up
SHOUT=once
fi
if [[ down = $LINK2 -a up = $ROUTE2 ]]
then
# add code here to remove route via LINK2 #
ROUTE2=down
elif [[ up = $LINK2 -a down = $ROUTE2 ]]
# add code here to add route via LINK2 #
ROUTE2=up
SHOUT=once
fi
if [[ once = $SHOUT -a down = $ROUTE1 -a down = $ROUTE2 ]]
then
# add code here to shout that both routes are down #
SHOUT=no
fi
done