[FUG-BR] Script para troca automatica de rota.

Luan Tasca luanfug em gmail.com
Segunda Janeiro 24 15:45:35 BRST 2011


Uso esse script em um cliente, ele é meio grande mais traz um bom 
resultado..

# 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

export TERM=linux
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# roteadores locais
dgw="200.215.41.1"    # Oi
gw2="189.127.142.41"    # ?
rota_atual=`/sbin/route -n | grep UG | awk '{printf $2}'`

# interface conectada aos roteadores
if_dgw="eth1"        # Oi
if_gw2="eth4"        # ?

# ips da internet para teste de conexao
ip_teste1="8.8.8.8"
ip_teste2="200.176.2.10"

# limpando terminal...
clear

# adicionando rotas temporarias para teste
echo + adicionando rotas temporarias para o teste do primeiro roteador...
echo " "
/sbin/route add -host $ip_teste1 gw $dgw $if_dgw
/sbin/route add -host $ip_teste2 gw $dgw $if_dgw
/sbin/route -n
sleep 2

# testando o link padrao de navegacao
echo " "
echo + testando roteador padrao... pingando o primeiro ip de teste...
ping -q -c 2 $ip_teste1 -I $if_dgw > /tmp/defaultgw1.link  2>&1 && 
status_dgw="UP" || status_dgw="DOWN"
if [ $status_dgw == DOWN ]; then
     echo   - FALHA! verificando conectividade no segundo ip de teste 
atraves da rota padrao...
         ping -q -c 2 $ip_teste2 -I $if_dgw > /tmp/defaultdgw2.link  
2>&1 && status_dgw="UP" || status_dgw="DOWN"
     rm /tmp/defaultdgw2.link
fi
sleep 2

# removendo rotas temporarias de teste
echo + removendo rotas temporarias para o teste do roteador padrao...
/sbin/route del -host $ip_teste1 gw $dgw $if_dgw
/sbin/route del -host $ip_teste2 gw $dgw $if_dgw
sleep 2

# limpando arquivos temporarios
echo + removendo arquivos de logs do primeiro teste...
rm /tmp/defaultgw1.link
sleep 2

# testando segunda rota padrao
clear
echo + adicionando rotas temporarias para o teste do segundo roteador...
echo " "
/sbin/route add -host $ip_teste1 gw $gw2 $if_gw2
/sbin/route add -host $ip_teste2 gw $gw2 $if_gw2
/sbin/route -n
sleep 2

# testando o link padrao de navegacao
echo " "
echo + testando o roteador secundario... pingando o primeiro ip de teste...
ping -q -c 2 $ip_teste1 -I $if_gw2 > /tmp/defaultgw3.link  2>&1 && 
status_gw2="UP" || status_gw2="DOWN"
if [ $status_gw2 == DOWN ]; then
     echo    - FALHA! verificando conectividade no segundo ip de teste 
atraves da rota secundaria...
         ping -q -c 2 $ip_teste2 -I $if_gw2 > /tmp/defaultgw4.link  2>&1 
&& status_gw2="UP" || status_gw2="DOWN"
     rm /tmp/defaultgw4.link
fi
sleep 2

# limpando arquivos temporarios
echo + removendo arquivos de logs do segundo teste...
rm /tmp/defaultgw3.link
sleep 2

# removendo rotas temporarias de teste
echo + removendo rotas temporarias para o teste do segundo roteador...
/sbin/route del -host $ip_teste1 gw $gw2 $if_gw2
/sbin/route del -host $ip_teste2 gw $gw2 $if_gw2
sleep 2

# 
----------------------------------------------------------------------------------
# tratamento dos resultados..
# 
----------------------------------------------------------------------------------

case $status_dgw:$status_gw2 in

         UP:UP)
                 echo " "
         echo   - Sem problemas de Conectividade - usando o link Oi como 
padrao. . .
         if [ $rota_atual == $dgw ];
             then echo   - Sem necessidade de ajustes. . .
         else
             /sbin/route add default gw $dgw
             /sbin/route del default gw $gw2
         fi
         echo " "
         ;;

         UP:DOWN)
         echo " "
                 echo   - ATENCAO! problemas no link secundario! 
alterando navegacao para Oi!
                 if [ $rota_atual == $dgw ];
             then echo   - Gateway padrao ja setado para Oi!
         else
             /sbin/route add default gw $dgw
             /sbin/route del default gw $gw2
         fi
         echo " "
         ;;

         DOWN:UP)
         echo " "
                 echo   - ATENCAO! problemas no roteador padrao Oi! - 
alterando navegacao para o link secundario!
         if [ $rota_atual == $gw2 ];
             then echo - configuracoes ok!
         else
             /sbin/route add default gw $gw2
             /sbin/route del default gw $dgw
         fi
         echo " "
         ;;

         DOWN:DOWN)
         echo " "
                 echo   - ATENCAO! os links nao estao respondendo! entre 
em contato com a provedora e verifique os cabos!
                 echo " "
         ;;

                 *)
                 exit 0
         ;;
esac

# 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-- 


Luan Tasca
e-mail: luantasca em gmail.com
tel: 48 - 99494665
twitter: @luantasca
site: www.beersd.com.br
BSD User: 51785

|/- Amar é... deletar o Windows do HD !
/|

|/
/|



Em 24-01-2011 15:27, Alessandro de Souza Rocha escreveu:
> Boa tarde, alguem de vcs aqui na lista tem alguns script para troca de
> rota default quando um link
> ou adsl cai.
> pesquisando no google so tenho carp, so que nao tenho 2 maquina para
> fazer com carp.
>





Mais detalhes sobre a lista de discussão freebsd