Failover de Internet

Venho através deste post disponibilizar a todos uma configuração de failover de internet que implantei na empresa onde trabalho. Passei muito tempo atrás de informações que poderiam ser úteis para conclusão deste trabalho. Os scripts que postarei abaixo estão em pleno funcionamento.

[ Hits: 25.892 ]

Por: José Bento em 20/01/2010


Introdução



Bem, não sou muito bom de histórias, mas acho que quando temos que postar algo somos quase que obrigados a falar um pouco do motivo que nos levou a fazer tal trabalho. Com isso, vamos lá:

Na empresa onde trabalho tem 2 links de internet. Um com IPs fixos de internet e outro com IP dinâmico. A conexão principal é a com IP fixo porque tenho um provedor de hospedagem (servidor Linux Centos). Quando o link principal caía, eu tinha que rodar na mão o script que ativava o link sobressalente. Imagine toda vez que esse link principal caísse eu ter que rodar um script que ativasse o outro link de internet... Sem nexo, vocês não acham?! Daí a minha ideia de colocar um script que pingasse de tempos em tempos para um determinado site da internet. Se esse script parasse de pingar esse site, ele "entendia" que a internet que está ativa no momento tinha "caído". Com essa "queda" ele rodava um outro script que ativava o outro link de internet, sem eu precisar fazer nada! Não é uma belezura???!!!

Agora que já contei um pouco da história, vamos às configurações.

Minha rede está desta forma:
  • eth0 rede interna
  • eth1 rede externa

Rede interna:
  • 192.168.3.x
  • máscara de rede 255.255.255.0

A placa de rede interna eth0 com ip 192.168.3.254 e máscara 255.255.255.0.

Obs: A placa de rede interna está sem gateway e DNS.

Rede externa:

Como este servidor tem alguns IPs fixos, um dinâmico de internet e também somente uma placa de rede para conexão externa, criei algumas placas de rede virtuais. Aqui só irei postar duas:
  • eth1 200.200.200.200, máscara de rede 255.255.255.248 (IP fixo)
  • eth1:0 172.0.0.2 / 255.255.0.0 (IP dinâmico)

Não coloquei gateway e DNS na placa de rede externa porque os scripts que trocam de link já fazem isso. Portanto, não setem o gateway e nem o DNS da operadora nas placas de rede externa para não dar erro.

Vamos agora as scripts.

Script que fica pingando para internet intermitentemente. Mesmo depois da troca de link ele fica pingando.

#!/bin/bash
#Iniciar em background
CONN="tim" # Assume "tim" como conexão por omissão.
while test "1" = "1" # Repetir indefinidamente.
do
if (ping -c 60 www.google.com > /dev/null)
then
    sleep 60 # Conectado.
else
    route del default # Desativa gateway atual.
    if test "$CONN" = "tim"
    then # Substitui conexão Velox por tim.
       (sh /home/scripts/tim.sh > /dev/null)
       CONN="velox"
    else # Substitui conexão tim por velox.
       (sh /home/scripts/velox.sh > /dev/null)
    fi
fi
done

Script da que ativa o link da TIM:

#!/bin/bash
#
#
#Troca de link de internet da TIM x VELOX
#
#
# Jose Bento 15/08/2009 e-mail e msn : bento.linux@hotmail.com
#
#

echo "Iniciando serviço de roteamento de Internet pelo link da Tim..."
sleep 1
#
#
# Excluindo Gateway do Velox
echo "Excluindo Gateway do Velox..."
route del default gw 172.0.0.1 # coloquei aqui o Gateway do meu IP dinâmico, no meu caso o modem do velox que está roteado.
sleep 1
#
#
# Adicionando Gateway Tim
echo "Adicionando novo Gateway da Tim..."
route add default gw 200.200.200.1
sleep 1
#
#
# Trocando DNS
echo "Trocando de DNS..."
cp /etc/resolv.conf.tim /etc/resolv.conf
sleep 1
#
#
# Reiniciando Servidor DNS Bind
echo "Reiniciando Servidor DNS Bind..."
service named restart
sleep 1
#
#
# Pingando para o www.google.com.br e verificando se tem erro
echo "Pingando o Site www.google.com.br"
sleep 1
if(ping -c 1 -w 2 www.google.com.br > /dev/null);then
     echo "Teste de ping com o link da Tim feito com sucesso!"
else
     clear
     echo
     echo "Verifique se link da Tim está ligado!!!"
     echo
     exit
fi;
#
#
# Carregando regras do firewall
#echo "Carregando Firewall Linux Iptables..." # Aqui eu deixei comentado para o firewall não ser executado pra não derrubar a conexão de intranet da empresa. Mas fica a seu critério.
#/home/scripts/firewall_novo.sh
#sleep 1
#
#
# Reiniciando Squid
echo "Reiniciando Servidor Linux Proxy-Squid..."
squid -k reconfigure
sleep 1
#
#
echo "Servidor Firewall/Proxy Online!!!"

Script da que ativa o link do Velox:

#!/bin/bash
#
#
#Troca de link de internet TIM x VELOX
#
#
# Jose Bento 15/08/2009 e-mail e msn : bento.linux@hotmail.com
#
#

echo "Iniciando Serviço de Roteamento de Internet Pelo Link do Velox..."
sleep 1

#
# Excluindo gateway Tim
echo "Excluindo Gateway de Internet da Tim..."
route del default gw 200.200.200.1
sleep 1

#
# Adicionando Gateway do Velox
echo "Adicionando novo gateway Internet do Velox..."
route add default gw 172.0.0.1
sleep 1
#
#
# Trocando DNS
echo "Trocando de DNS..."
cp /etc/resolv.conf.velox /etc/resolv.conf
sleep 1
#
#
# Reiniciando servidor DNS Bind
echo "Reiniciando Servidor DNS Bind..."
service named restart
sleep 1
#
#
# Pingando paro www.google.com.br e verificando se tem erro
echo "Pingando o site www.google.com.br"
sleep 1
if(ping -c 1 -w 2 -q www.google.com.br > /dev/null);then
     echo "Teste de ping com o link do Velox feito com sucesso!"
else
     clear
     echo
     echo "Verifique se o link do Velox está ligado!!!"
     echo
     exit
fi;
#
#
# Carregando regras do Firewall
#echo "Carregando Firewall Linux Iptables..." # Aqui eu deixei comentado para o firewall não ser executado pra não derrubar a conexão de intranet da empresa. Mas fica a seu critério.
#/home/scripts/firewall.sh
#sleep 1
#
#
# Reiniciando Squid
echo "Reiniciando Servidor Linux Proxy-Squid..."
squid -k reconfigure
sleep 1
#
#
echo "Servidor firewall/proxy online!"

Não se esqueça de criar os arquivos do resolv.conf de cada link, pois nele você terá que colocar os DNS de sua operadora.

Coloque-o no rc.local para iniciar com o Linux os scripts de failover e o script que ativa o link de internet principal.

Agradecimento:

Ao querido Edmilson (cumpade), pois sem ele isso tudo ia ficar mais difícil de ser concretizado!

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Instalando e configurando Nagios no Linux Fedora 8

Instalação e configuração do Squid no Fedora

Leitura recomendada

Virtual Host com Apache + SSL

Roteamento por origem no Linux

Mozilla Firefox com plugins para Flash e JAVA

Acessando a Internet 3G da Claro no Ubuntu e no Debian de maneira simples

aMSN: MSN messenger turbinado com plugins!

  
Comentários
[1] Comentário enviado por timbe em 20/01/2010 - 15:13h

Amigo, a idéia é nobre e funciona legal, já fiz um script parecido! ...porém um dos links sempre fica ocioso, sem utilização, pq não implementar um balanço de carga, pouco mais aprimorado e aproveitar os dois links ao mesmo tempo?? ...pode ser um pouco trabalhoso, mas funciona bem!!

[2] Comentário enviado por silent-man em 20/01/2010 - 15:16h

Muito bom! Parabéns!

Só tenho uma dúvida. Se por um acaso o site pingado(google) estiver fora?

[3] Comentário enviado por hugobcar em 20/01/2010 - 16:19h

Tenho script publicado aqui no Viva o Linux, que testa a conexão com a Internet também.

Uma dica seria dar o ping diretamente no IP, pois acontece de apenas os DNS sairem fora.

Outra dica, é usar os DNSs do Google (8.8.8.8).



abrçs

[4] Comentário enviado por jptudobem em 01/12/2010 - 15:16h

Muito bom esse artigo.. mas o que eu quero saber é o seguinte: Quando cai minha internet princial, a secundária assume, até ai tudo bem. Mas e quando a principal voltar? Ela volta automaticamente?

[5] Comentário enviado por jose.freitas.rj em 01/12/2010 - 17:02h


Abraços...

[6] Comentário enviado por rengaf1 em 28/08/2014 - 21:28h

boa noite... cara to precisando implantar isso aqui no trampo... da pra dar uma força aí ? utilizo centos. não entendi exatamente onde e nem como aplicar os scripts.

[7] Comentário enviado por ronaldossouza em 24/02/2015 - 11:03h


Opa, uma curiosidade, caso precise consigo implementar regras Iptables junto a cada script ?


Obrigado.... abraço!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts