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!