Pular para o conteúdo

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.
Marcello Carvalho mbrunoac
Hits: 7.137 Categoria: Shell Script Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar

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.
Download 6438.failover.sh Enviar nova versão

Versões atualizadas deste script

Marcello Carvalho

Versão 2 enviada 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

Esconder código-fonte

#!/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

Filtrando trabalhos de impressão...

Inserção de máquinas no banco de dados para controle interno

Script contra ataques de Brutal Force por SSH.

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO O AMBIENTE

Script Para desligar o Debian

#1 Comentário enviado por jaac em 22/08/2016 - 17:02h
Excelente ideia!
Vou testar aqui em minha rede. Será de uma utilidade tremenda!
#2 Comentário enviado por cloudnet em 24/03/2018 - 18:06h
Olá boa tarde
Pessoal tento executar e da erro, estou usando o debian 9

if [ $ping -gt 0 ]; then Ele sai disparando erro até o fim do arquivo.
Alguém usou de outra forma .
#3 Comentário enviado por mbrunoac em 17/06/2021 - 11:50h

[2] Comentário enviado por cloudnet em 24/03/2018 - 18:06h

Olá boa tarde
Pessoal tento executar e da erro, estou usando o debian 9

if [ $ping -gt 0 ]; then Ele sai disparando erro até o fim do arquivo.
Alguém usou de outra forma .


Altere a variável $ping ficando da seguinte forma - ping=$(ping -c 3 -w 3 $1 | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')

Contribuir com comentário

Entre na sua conta para comentar.