Configuração de failover de links de internet

Publicado por Wagner Souza (última atualização em 06/02/2015)

[ Hits: 12.183 ]

Homepage: https://medium.com/@souzaw

Download failover.sh




Para quem utiliza dois links de internet e precisa fazer um failover, ou seja, quando um cair o outro assume, fazendo assim uma redundância de links, evitando ficar offline.

  



Esconder código-fonte

#!/bin/bash

#---------------------------#
# CONFIGURAÇÃO DOS GATEWAYS #
#---------------------------#

GW1=10.0.2.2
GW2=192.168.1.1
LOG=/root/rc.firewall.log

#------------------------------#
# INÍCIO DA FUNÇÃO DE FAILOVER #
#------------------------------#

# Aqui optei em por uma função para deixar a estrutura do
# script mais organizada e legível. É de suma importância
# que você esteja familiarizado com o shell script

failover ()
{

# Criação de um loop infinito para testar a disponibilidade
# dos links de internet

while [ 1 ]
do

# Altera sempre para o gateway padrão dentro da tabela
# main de roteamento, ou seja, quando o link primário voltar,
# automáticamente a navegação volta para este

/sbin/ip route replace default via $GW1

# Neste for, o comando dig retornará os dois IPs relacionados
# ao site do UOL. Você poderia por qualquer site aí, porém o UOL
# retorna dois IPs que serão utilizados pelo script para saber
# se o link de internet principal está fora

for i in `dig +short uol.com.br`
do

# Verificando a comunicação do link de internet

        /bin/ping -c 1 $i
done

# Caso o resultado do comando anterior seja 0 (zero), o link
# de internet principal está ok. Se for 1 (um) houve falha no comando
# deduzindo assim ausência de conexão. Quem vai determinar isso é o
# comando echo $?. Mais abaixo, haverá um if para testar as condições

STATUS_CMD_LINK=`echo $?`

if [ $STATUS_CMD_LINK -eq 0 ]; then

# Caso haja sucesso no teste do comando do ping
# as regras para o compartilhamento de internet serão inseridas

        /sbin/iptables -F
        /sbin/iptables -t nat -F

        /sbin/modprobe iptable_nat
        echo 1 > /proc/sys/net/ipv4/ip_forward
        /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
else

# Se o link falhar, os comandos mais abaixo farão a limpeza
# das regras de iptables e irão configurar o segundo link de internet
# e será criado um arquivo de log informando quando houve a queda

        echo "_________________________" >> $LOG
        echo " " >> $LOG
        echo "# LINK SECUNDARIO ATIVO.: `date +%d/%m/%y-%H:%M:%S`">> $LOG
        echo " " >> $LOG
        echo "_________________________" >> $LOG

                /sbin/ip route replace default via $GW2

                /sbin/iptables -F
                /sbin/iptables -t nat -F

                /sbin/modprobe iptable_nat
                echo 1 > /proc/sys/net/ipv4/ip_forward
                /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

fi

# A cada 2 minutos (120 segundos) será feito um teste no link
# principal para constar se o mesmo encontra-se no ar.

sleep 120

done
}

####### CHAMA A FUNÇÃO ########

failover

Scripts recomendados

Script gera uma chave md5 de todos os arquivos que forem especificados

Montando sua máquina virtual para engenharia reversa em Linux

cal2svg gerador de calendários em formato vetorial SVG

Tux Colorido

Ativando Numlock como serviço e no boot


  

Comentários
[1] Comentário enviado por bkammers em 13/02/2015 - 17:13h

Boa tarde, estava procurando instruções sobre failover e vi sua publicação.

Me tire uma dúvida sobre o meu cenário (utilizo Centos 6).

Seriam 3 placas de rede, eth0 / eth1 / eth2

eth0 - LAN
eth1 - WAN1
eth2 - WAN2

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

As configurações ficam padrões para as placas? Preciso setar o GW no ifcfg-ethX de cada WAN?

Não preciso colocar GW no /etc/sysconfig/network ?

[2] Comentário enviado por wagnerfs em 13/02/2015 - 21:46h

Só precisa ter um gateway padrão configurado. O script de faiolver vai reconfigurar o outro IP do gateway assim que o primeiro estiver fora através do comando ip route replace. Basta apenas configurar as interfaces e por em uma delas o gateway que será o padrão.

_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782

[3] Comentário enviado por lopeswf em 21/05/2015 - 18:02h

Boa noite,

Ajudou muito! Obrigado.

[4] Comentário enviado por bthiagos em 06/10/2015 - 10:07h


/sbin/ip route replace default via $GW2

/sbin/iptables -F
/sbin/iptables -t nat -F

/sbin/modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

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

Amigo, eu já tenho essas regras no meu script de firewall, elas conflitarão se eu deixá-las no failover e no firewall?

Abraços



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts