Troca de link em caso de queda de Internet (FAILOVER)
Publicado por Marcello Carvalho (última atualização em 09/08/2016)
[ Hits: 6.980 ]
Download 1469052792.failover.sh (versão 2)
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.
Versão 2 - Enviado por Marcello Carvalho em 20/07/2016
Changelog: Adicionado
- Função que gera um script auxiliar para voltar para o Gateway principal quando este estiver ON novamente
Retirados
- LOG de monitoramento de testes
Download 1469052792.failover.sh
#!/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
Script de Instalação de Layer7 no CentOS 6.0
transformar maiúsculas em minuscula e vice-versa
Monitore vários servidores ao mesmo tempo com Apache + shellscript
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Consertando o áudio com estalos e interrupções no Pipewire
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
REDE WI-FI NÃO APARECE NO LINUX MINT (0)
Como programar um sistema de controle para distribuições linux em c? (5)
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... (2)









