Troca de link em caso de queda de Internet (FAILOVER)
Um simples script para troca de gateway de um firewall com duas wans em caso de queda do link ativo.
Adcione uma regra ao cron da seguinte forma:
*/1 * * * * /home/script/failover.sh
No meu caso meu script é executado a cada minuto e esta localizado dentro da pasta HOME.
Adcione uma regra ao cron da seguinte forma:
*/1 * * * * /home/script/failover.sh
No meu caso meu script é executado a cada minuto e esta localizado dentro da pasta HOME.
Descrição
Um simples script para troca de gateway de um firewall com duas wans em caso de queda do link ativo.
Adcione uma regra ao cron da seguinte forma:
*/1 * * * * /home/script/failover.sh
No meu caso meu script é executado a cada minuto e esta localizado dentro da pasta HOME.
Adcione uma regra ao cron da seguinte forma:
*/1 * * * * /home/script/failover.sh
No meu caso meu script é executado a cada minuto e esta localizado dentro da pasta HOME.
Versões atualizadas deste script
#!/bin/bash
Link1="192.168.0.1"
Link2="192.168.10.1"
Ver1="8.8.8.8"
Ver2="8.8.4.4"
arquivoLog='failover.log'
pastaLog='/var/log/failover/'
dataAtual=$(date | awk '{print $1, $2, $3, $4}')
function Verifica(){
ping=$(ping -c 3 $1 | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
}
function getGateway(){
#Identifica o Gateway Default do servidor
gateway=$(/usr/sbin/route -n | grep UG | grep 0.0.0.0 | awk '{print $2}');
}
function setGatway(){
#Deleta Gateway Default
/usr/sbin/route del default gw $oGateway >> /home/script/LOG
#Seta novo Gateway Default
/usr/sbin/route add default gw $nGateway >> /home/script/LOG
}
function down(){
#verifica se ja existem rotas definidas para os Verificadores
tVer1=$( /usr/sbin/route -n | grep $Ver1 | awk '{ print $1}' )
tVer2=$( /usr/sbin/route -n | grep $Ver2 | awk '{ print $1}' )
#Teste se a rota ja existe para não tentar criar duas vezes
if [ -z $tVer1 ]; then
/usr/sbin/route add -net $Ver1 netmask 255.255.255.255 gw $Link1 >> /home/script/LOG
fi
if [ -z $tVer2 ]; then
/usr/sbin/route add -net $Ver2 netmask 255.255.255.255 gw $Link2 >> /home/script/LOG
fi
getGateway
case $gateway in
"$Link1")
Verifica $Ver1 $gateway >> /home/script/LOG
oGateway=$(echo $Link1)
nGateway=$(echo $Link2);;
"$Link2")
Verifica $Ver2 $gateway >> /home/script/LOG
oGateway=$(echo $Link2)
nGateway=$(echo $Link1);;
esac
if [ $ping -gt 0 ]; then
echo "$dataAtual Conexão válida com a internet através do GW: $gateway" >> $pastaLog$arquivoLog #Caso não queira o log deste registro basta alterar a saida para "> /dev/null"
else
if [ -d $pastaLog ]; then
echo "$dataAtual Gateway Atual: $gateway sem conexão com a internet, mudando para o gateway: $nGateway" >> $pastaLog$arquivoLog
else
mkdir $pastaLog
echo "$dataAtual Gateway Atual: $gateway sem conexão com a internet, mudando para o gateway: $nGateway" >> $pastaLog$arquivoLog
fi
echo "Falha em obter conectividade com a internet através do GW: $gateway"
echo "Alternando link"
setGatway
fi
}
down
Vou testar aqui em minha rede. Será de uma utilidade tremenda!