Configuração de failover de links de internet

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

[ Hits: 12.154 ]

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

Criando usuário com poderes de root

Firewall - Satefull inspection com NAT

Otimiza.sh - Atualiza seu Ubuntu/Debian

Gerenciamento de software e hardware de desktop

Testa se há conexão com a internet (Funciona)


  

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