Criando um FailOver com ShellScript.

Forest

Nesse tutorial irei demonstrar como criar um FailOver para o seu ambiente. No estudo de caso temos dois gateways, o GW2 recebendo dois links do GW1 e o GW2 irá rodar um script de failover, de maneira que se o link principal da rede 172.16.0.0 cair, o link secundario da rede 172.16.1.0 assume a função.

Em meu ambiente Simulei o link 1 com 10 MB e o Link 2 com 1 MB, essa situação servirá para estudos de caso futuros.

Segue abaixo um diagrama do estudo de caso.



Inventário:
Virtualizador: VirtualBox
Sistema Operacional: Debian8.5
Memoria 512
HD:20GB

Minha rede está assim:
Rede 172.16.0.0/24 ---> Link 1
Rede 172.16.1.0/24 ---> Link 2

Host GW1:
eth0: 192.168.1.10/24 ---> Internet
eth1: 172.16.0.2/24 ---> Link 1
eth2: 172.16.1.2/24 ---> Link 2

Host GW2:
eth0: 172.16.0.2/24 Link 1
eth1: 172.16.1.2/24 Link 2
eth2: 172.16.3.1/24 Lan



Criando um arquivo, para o FailOver
root#>/usr/local/src/scripts/FailOver.sh
Mudando a permissão para o Arquivo.
root#$chmod +x /usr/local/src/scripts/FailOver.sh



Inserir o conteudo do Script:
root#nano /usr/local/src/scripts/FailOver.sh

#!/bin/bash
#
#### Variaveis ###
#
export LC_ALL=C
export PATH=/bin:/usr/bin:/sbin:/usr/sbin

GWUP=`ip route show | grep ^default | cut -d " " -f 3`
GW1=172.16.0.1; export GW1 # Substitua pelo gateway do seu link principal
GW1_Size="10MB" ; export GW1_Size
GW2=172.16.1.1; export GW2 # Substitua pelo gateway do seu link backup
GW2_Size="1MB" ; export GW2_Size
GW1_Interface="eth0" #Coloque aqui a interface do gateway.


# Etapa 1 = Verifica se o gateway e o principal, ser for ele vai pra etapa 2 se nao for ele vai pra etapa 2.1
if [ $GWUP == $GW1 ]; then

# Etapa 2 = Informa com log que a rota principal e o gateway 1 e vai para a etapa 6
   echo "`date` - Rota default eh a Principal $GW1 Banda $GW1_Size " >> /var/log/redundancia/redundancia.log

else

# Etapa 2.1 = Informa com log que a rota principal e o gateway 2 e vai para a etapa 3
   echo "`date` - Rota default eh a Slave $GW2 Banda $GW2_Size" >> /var/log/redundancia/redundancia.log

# Etapa 3 = Verifica a disponibilidade do link com gateway 1
   echo "`date` - Verificando a disponibilidade do link principal $GW1 $GW1_Size ..." >> /var/log/redundancia/redundancia.log
   ping -I $GW1_Interface 8.8.8.8 -c 5 -A > /dev/null
   if [ $? -eq 0 ]; then

# Epata 4 = Se o gateway principal voltou ele exclui a rota do gateway 2 para manter o gatewy 1 ativo
      echo "`date` - Link pricipal voltou!" >> /var/log/redundancia/redundancia.log
      route del -net 0.0.0.0 gw $GW2
      route add -net 0.0.0.0 gw $GW1
      exit 0

   else
# Etapa 5 = Agora se o gatewy principal nao voltou, ele deleta a rota o gatewy 1 e mantem a rota do gateway 2
      echo "`date` - Link principal ainda nao voltou..." >> /var/log/redundancia/redundancia.log
      echo "`date` - Link de backup sera mantido." >> /var/log/redundancia/redundancia.log
      route del -net 0.0.0.0 gw $GW1
      route add -net 0.0.0.0 gw $GW2
      exit 0

   fi

fi

# Etapa 6 = Testando se o link principal com gateway 1 esta normal, se tiver ele vai pra etapa 7
echo "`date` - Testando Link Principal..." >> /var/log/redundancia/redundancia.log
ping -I $GW1_Interface 8.8.8.8 -c 20 -A > /dev/null

if [ $? -eq 0 ]; then

# Etapa 7 = Diz que o link principal com gateway 1 esta normal e finaliza
   echo "`date` - Link Principal UP!" >> /var/log/redundancia/redundancia.log

else
# Etapa 8 = Diz que o link principal nao esta funcionado e deleta a rota do gateway um e adiciona rota ao gateway 2
   echo "`date` - Link Principal DOWN..." >> /var/log/redundancia/redundancia.log
   echo "`date` - Subindo Link de backup..." >> /var/log/redundancia/redundancia.log
   route del -net 0.0.0.0 gw $GW1
   ip route add default via $GW2

fi
Inserindo o arquivo no crontab, para rodar a cada 30 segundos.

root#crontab -e
~
* * * * * sleep 30 && cd /usr/local/src/scripts/ && /bin/bash FailOver.sh
~

Pronto, seu FailOver com shellScript está funcionando perfeitamente. [:)

---------------------------------------------

Observações: Usei como base um script do vivaolinux.com.br, mas acertei alguns defeitos e adequei ao meu ambiente com novas funções.

Bibliografia:
https://www.vivaolinux.com.br/script/Redundancia-de-dois-links-de-internet








Comments