
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
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
Post a Comment