Páginas

quarta-feira, 9 de janeiro de 2013

Script Para Redundancia Atualizado

Olá a todos!!!

Criei uma versão melhor do script de redundância de links dedicados, e a diferença agora é que ele testa apenas o link principal e caso esteja offline, ele muda para o link secundário. Quando o link principal volta, o script retorna para ele.

#!/bin/bash
# Script de redundancia de links dedicados
# Desenvolvido por Rodrigo Manzzato Alves Garcia em 08/10/2012
# Atualizado em 20/12/2012

PATH=/sbin:/usr/sbin:/bin:/usr/bin

# Informe abaixo o gateway principal
GW_PRIMARIO=""
# Informe abaixo os IPs primários de teste
IP_TESTE_PRIMARIO1=""
IP_TESTE_PRIMARIO2=""
# Informe abaixo o IP do link primario
IP_PRIMARIO_ROUTER=""
# Informe abaixo o gateway do link secundario
GW_SECUNDARIO=""
# Informe abaixo o IP do link secundario
IP_SECUNDARIO_ROUTER=""

# Armazenar gateway padrao na variavel GW_ATUAL
GW_ATUAL=`netstat -nr | awk '$1 ~ /^[0.0.0.0]/ {print $2}'`

# ATENCAO!!! A secao abaixo so deve ser alterada com absoluta certeza de que sabe o que esta fazendo!!!

# Funcao para troca do gateway
function GATEWAY()
{
        netstat -nr | awk -v gw2="$GW2" -v gw="$GW" 'NR > 1 {if ($2 == gw2) print "route add -net " $1 FS "netmask " $3 " gw " gw > "/etc/network/gateway";}'
        netstat -nr | awk -v gw2="$GW2" 'NR > 2 {if ($2 == gw2) print "route del -net " $1 FS "netmask " $3 " gw " gw2 > "/etc/network/gateway_del";}'
    while read ROTA2
        do
                echo -e "`$ROTA2`"
        done < /etc/network/gateway_del
    while read ROTA
        do
                echo -e "`$ROTA`"
        done < /etc/network/gateway
}

# Backup das rotas existentes
echo "#!/bin/bash" > /etc/network/rotas.sh
netstat -nr | awk 'length($2) > 7' | awk 'NR > 1 {print "route add -net " $1 FS "netmask " $3 " gw " $2}' >> /etc/network/rotas.sh

# Teste das redes
ping -c4 $IP_TESTE_PRIMARIO1 -I $IP_PRIMARIO_ROUTER >> /dev/null
    if [ $? = "0" ]
        then   
            if [ $GW_ATUAL = "$GW_PRINCIPAL" ]
                then           
                    exit
                else    # Troca de Gateway caso o link atual não for o principal
                    GW=$GW_PRIMARIO
                    GW2=$GW_SECUNDARIO
                    GATEWAY
                    echo `date` "Rede Principal Ativada" >> /etc/network/gateway.log
                    exit
            fi
        else   
            ping -c4 $IP_TESTE_PRIMARIO2 -I $IP_PRIMARIO_ROUTER >> /dev/null
            if [ $? = "0" ]
                then   
                    exit
                else    # Troca de Gateway caso o link atual não estiver respondendo
                    GW=$GW_SECUNDARIO
                    GW2=$GW_PRIMARIO
                    GATEWAY
                    echo `date` "Rede Secundaria Ativada" >> /etc/network/gateway.log
                    exit
            fi
    fi

Espero que seja útil!!!

Até a próxima!!!

10 comentários:

  1. Boa noite Rodrigo!

    Saberia me informar quantas e quais ferramentas (servicos) trabalham com a redudancia de link para unix?

    Obrigado pela colcaboracao!
    Att,
    Joao Freitas.

    ResponderExcluir
  2. Rodrigo, ola boa tarde.
    amigo me tira uma duvida.
    tenho 2 vpns e hoje faço redundancia entre elas MPLS e INTERNET.

    so que nos cliente das VPNs nao consigo fazer a routa automatica.

    toda vez que desconecto a internet na vpn ele nao adiciona a rota nova para que assim os clientes continuem seus trabalhos passando pela outra rota.
    vi alguns artigos a respeito de METRIC+QUAGGA+RIP em VPN's so que nao consegui um scrip que gere automaticamente a nova rota.

    pretendo usar rip pois ja utilizo para alguns fins.

    teria alguma solucao para me ajudar a solucionar este pequeno problema de rotas.

    Ubuntu 12.04

    Atenciosamente
    Adriano D.

    ResponderExcluir
  3. Boa Tarde

    utilizei seu script no Debian e da o seguinte erro:

    redundancia.sh: 26: redundancia.sh: Syntax error: "(" unexpected


    tem alguma dica? Obrigado

    ResponderExcluir
  4. Regis boa tarde,

    Troque a linha "function GATEWAY()" por apenas "GATEWAY()"

    Att.

    ResponderExcluir
  5. Parabéns pelo seus scripts:

    Rodrigo eu tenho uma dúvida à cerca dos mesmos.

    Por exemplo tenho 2 placas de redes etho(internet) eth1(interna) ambas configuradas no firewall, supostamente a empresa aderiu a mais um link dedicado adicionei mais uma placa no servidor eth2(link_backup) e configurei conforme IP da prestadora.
    Preciso alterar a configuração no firewall para o correto funcionamento desse script?

    ResponderExcluir
  6. Filipe,

    Esse script é para links dedicados entre unidades, sem passar por firewall algum. Não sei como é a configuração do seu firewall e por isso fica difícil ajudar.

    Att.

    ResponderExcluir
  7. Este comentário foi removido pelo autor.

    ResponderExcluir
  8. Olá Rodrigo,
    Como faço para adaptar esse seu script para uma rede onde os endereços IPS da WAN é recebido por DHCP,

    Grato pela atenção

    ResponderExcluir
    Respostas
    1. Bom dia,

      Este script é para links entre unidades, roteadores, e não links de Internet.

      Att.

      Excluir
    2. Mas é entre roteadores, caro colega. Acho que me expressei mal.

      O IP não é dedidcado, eles são recebido através de DHCP e ADSL. Como faço pra adaptar a este cenário, ou não é possível ?

      Excluir