LoadbalanceFAILOVER
Loadbalance FAILOVER:
Em um servidor com dois links de Internet, este script atuará no gerenciamento dos links. Caso o link que estiver ativo no momento, apresente erro (ou perda de conexão com a Internet por algum motivo), o script mudará o tráfego automaticamente para outro link existente. E se os dois links apresentarem problemas, então o script tenta uma reparação, restartando a rede e setando novamente as configurações: variáveis, limpeza de tabelas (iptables), roteamento, NAT e gateways.
Obs.: É extremamente importante que cada gateway esteja configurado de acordo com sua interface nas VARIÁVEIS ("iface1" de acordo com "gw1" e "iface2" de acordo com "gw2") do script, para que o route trate corretamente as saídas.
Exemplo:
iface1=eth0 (interface)
gw1="10.26.20.1" (gateway)
iface2=eth1 (interface)
gw2="10.15.20.1" (gateway)
Em um servidor com dois links de Internet, este script atuará no gerenciamento dos links. Caso o link que estiver ativo no momento, apresente erro (ou perda de conexão com a Internet por algum motivo), o script mudará o tráfego automaticamente para outro link existente. E se os dois links apresentarem problemas, então o script tenta uma reparação, restartando a rede e setando novamente as configurações: variáveis, limpeza de tabelas (iptables), roteamento, NAT e gateways.
Obs.: É extremamente importante que cada gateway esteja configurado de acordo com sua interface nas VARIÁVEIS ("iface1" de acordo com "gw1" e "iface2" de acordo com "gw2") do script, para que o route trate corretamente as saídas.
Exemplo:
iface1=eth0 (interface)
gw1="10.26.20.1" (gateway)
iface2=eth1 (interface)
gw2="10.15.20.1" (gateway)
Descrição
Loadbalance FAILOVER:
Em um servidor com dois links de Internet, este script atuará no gerenciamento dos links. Caso o link que estiver ativo no momento, apresente erro (ou perda de conexão com a Internet por algum motivo), o script mudará o tráfego automaticamente para outro link existente. E se os dois links apresentarem problemas, então o script tenta uma reparação, restartando a rede e setando novamente as configurações: variáveis, limpeza de tabelas (iptables), roteamento, NAT e gateways.
Obs.: É extremamente importante que cada gateway esteja configurado de acordo com sua interface nas VARIÁVEIS ("iface1" de acordo com "gw1" e "iface2" de acordo com "gw2") do script, para que o route trate corretamente as saídas.
Exemplo:
iface1=eth0 (interface)
gw1="10.26.20.1" (gateway)
iface2=eth1 (interface)
gw2="10.15.20.1" (gateway)
Em um servidor com dois links de Internet, este script atuará no gerenciamento dos links. Caso o link que estiver ativo no momento, apresente erro (ou perda de conexão com a Internet por algum motivo), o script mudará o tráfego automaticamente para outro link existente. E se os dois links apresentarem problemas, então o script tenta uma reparação, restartando a rede e setando novamente as configurações: variáveis, limpeza de tabelas (iptables), roteamento, NAT e gateways.
Obs.: É extremamente importante que cada gateway esteja configurado de acordo com sua interface nas VARIÁVEIS ("iface1" de acordo com "gw1" e "iface2" de acordo com "gw2") do script, para que o route trate corretamente as saídas.
Exemplo:
iface1=eth0 (interface)
gw1="10.26.20.1" (gateway)
iface2=eth1 (interface)
gw2="10.15.20.1" (gateway)
#!/bin/bash
### CONFIGURE AS VARIÁVEIS AQUI:
testeip="8.8.8.8"
iface1=eth0
iface2=eth1
gw1="10.26.20.1"
gw2="10.15.20.1"
nomeGw1="CTBC"
nomeGw2="EMBRATEL"
### FIM DA CONFIG.
rota1=0
rota2=0
nomeScript="loadbalanceFAILOVER.sh"
iniciar(){
### LIMPEZA:
iptables -t mangle -F
iptables -t mangle -X
iptables --flush
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
ip route flush cache
### HABILITA ROTEAMENTO:
echo "1" > /proc/sys/net/ipv4/ip_forward
### MASCARA OS PACOTES COM DESTINO A INTERNET (NAT):
iptables -t nat -A POSTROUTING -o $iface1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $iface2 -j MASQUERADE
### ADICIONA OS GATEWAYS NAS DEVIDAS INTERFACES:
route add -net default gw $gw1 dev $iface1
route add -net default gw $gw2 dev $iface2
### LINK 1 ATIVO
clear
echo "Link em atividade: $nomeGw1"
echo "Interface:$iface1"
echo "Gateway:$gw1"
echo "Status: Ok"
while [ $(ping -qc 3 $testeip -I $iface1 > /dev/null 2>&1 ; echo $? ) = 0 ]
do
if [ $rota1 = 0 ]
then
rota1=1
route del -net default gw $gw2 dev $iface2
fi
done
route add -net default gw $gw2 dev $iface2
### LINK 2 ATIVO
clear
echo "Link em atividade: $nomeGw2"
echo "Interface:$iface2"
echo "Gateway:$gw2"
echo "Status: Ok"
while [ $(ping -qc 3 $testeip -I $iface2 > /dev/null 2>&1 ; echo $? ) = 0 ]
do
if [ $rota2 = 0 ]
then
rota2=1
route del -net default gw $gw1 dev $iface1
fi
done
### Se os links estiverem 'down', tenta uma reparação restartando a rede e chamando novamente o script:
if [ $(ping -qc 3 $testeip -I $iface1 > /dev/null 2>&1 ; echo $? ) != 0 ] || [ $(ping -qc 3 $testeip -I $iface2 > /dev/null 2>&1 ; echo $? ) != 0 ]
then
clear
echo "Sem conexao!"
echo "Tentando reparar..."
/etc/init.d/networking stop
/etc/init.d/networking start
iniciar
fi
}
parar(){
kill -9 `ps aux | grep $nomeScript | awk '{print $2}'`
echo "Morto"
exit
}
helpp(){
echo "Para executar o script, usa-se a seguinte sintaxe:"
echo " "
echo "Iniciar:"
echo "sh $nomeScript start"
echo "Parar:"
echo "sh $nomeScript stop"
echo "Rodar em modo background:"
echo "sh $nomeScript start &"
echo "Após rodar em background, verifique se está rodando:"
echo "ps aux | grep $nomeScript"
echo "Obs.: Não esquecer de configurar as VARIÁVEIS do script de acordo com sua rede."
echo " "
echo "Desenvolvido por: Marcelo Viana"
echo " "
exit
}
case $1 in
'start') iniciar ; exit ;;
'stop') parar ; exit ;;
'--help') helpp ; exit ;;
*) echo "Parâmetro desconhecido: '$1'" ; echo "Utilize --help para informações. Exemplo: sh $nomeScript --help"; exit ;;
esac
# É o Senhor que mostra os caminhos. Agradeço por me ajudar através de tantos exemplos.
# E que bom existe o vivaolinux!
# www.technocristo.com