Troca de link em caso de queda de Internet (FAILOVER)
Publicado por Marcello Carvalho (última atualização em 09/08/2016)
[ Hits: 7.023 ]
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
Java 7/8 - Instalação automatizada no Ubuntu
Exemplo da inicialização do serviço sshd
ddflash - criar mídia bootável do Linux e FreeBSD
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
OCS Inventory NG: Instalação de Agentes Linux e Windows + Autenticação HTTP
O Free Download Manager não abre no Fedora 43 KDE Plasma (2)
O que houve com slackware ??? (9)
Permissão acesso as pastas servidor Ubuntu Server 24.04 (5)









