Acabo com várias soluções e a única que retém é o script "crontabed" executado com um arping
, este é o script:
#!/bin/sh
#remote host to test on public interface
REMOTE_TEST_IP="195.168.156.1"
REMOTE_TEST_MAC="00:2D:FF:FF:FF:FF"
#number of arp request send to test connectivity
TEST_COUNT=4
#the rate acceptable of arp request failling, strictly above this rate the route will be change
#NEVER put 100 or it will never set up failover
ACCEPTABLE_FAILURE_RATE=20
#list of network that will be rerouted if test fails
NETWORK_LIST="25.14.0.0/20 198.27.45.40/32 21.1.80.0/20"
PUBLIC_DEVICE="eth0"
PUBLIC_GATEWAY="192.168.1.250"
PRIVATE_DEVICE="eth1"
PRIVATE_GATEWAY="15.168.16.4"
#try to ping the remote host ip and the remote host mac, extract the result line and get the failure rate
FAILURE_RATE=$(arping -i $PUBLIC_DEVICE -c $TEST_COUNT -t $REMOTE_TEST_MAC $REMOTE_TEST_IP | grep % | sed -r s/.* ([0-9]{1,3})% .*//)
#if the faillure is superior to the acceptable failure rate, change the route to remote the remote host
if [ $FAILURE_RATE -gt $ACCEPTABLE_FAILURE_RATE ]
then
for NETWORK in $NETWORK_LIST
do
logger "$0 - WARNING -The network route to $NETWORK_LIST are set to failover route."
route del -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE
route add -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE
done
else
for NETWORK in $NETWORK_LIST
do
#back to default route
route del -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE
route add -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE
done
fi
Eu também encontrei uma solução diferente, como mencionada nas outras respostas.
- Ferramenta MPath o processo de instalação menciona um script php que não soa realmente confiável
- Link Status Monitor , mantenha apenas para o sistema baseado em redhat
Eu realmente não conheço nenhuma outra solução, a menção do blog por John Auld aqui é datada de 2005 quando o linux estava ainda usando métrica da rota, que não é mais o caso, exceto se você usar um protocolo de roteamento dinâmico.