Páginas

sexta-feira, 30 de novembro de 2012

Script para Redundância de Links Dedicados

Olá a todos!!!

Trago a vocês neste post um script que desenvolvi para fazer a redundância de links dedicados. Como sempre, esse script reflete o meu ambiente e talvez cada um deva adaptá-lo às suas próprias necessidades.

O script abaixo testa o gateway primário definido em "GW_PRIMARIO" executando um ping para o endereço definido em "IP_TESTE_PRIMARIO1", e caso o IP não responda, ele confirma o teste executando um ping em  "IP_TESTE_PRIMARIO2". Se o segundo IP também não responder, ele executa a função "GATEWAY", que coleta todas as rotas da tabela e cria um script de adição de rotas tendo como gateway de todas, o gateway secundário.

A mesma função também cria um script de remoção de rotas contendo o gateway primário para que não haja problemas no roteamento. O mesmo algoritmo foi utilizado para testar o gateway secundário

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

PATH=/sbin:/usr/sbin:/bin:/usr/bin
# Informe abaixo o gateway primario
GW_PRIMARIO=""
# Informe abaixo os IPs de teste do gateway primario
IP_TESTE_PRIMARIO1=""
IP_TESTE_PRIMARIO2=""
# Informe abaixo o gateway secundario
GW_SECUNDARIO=""
# Informe abaixo os IPs de teste do gateway secundario
IP_TESTE_SECUNDARIO1=""
IP_TESTE_SECUNDARIO2=""

# 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 > 2 {print "route add -net " $1 FS "netmask " $3 " gw " $2}' >> /etc/network/rotas.sh

# Teste das redes
if [ $GW_ATUAL = "$GW_PRIMARIO" ]
    then
        ping -c4 $IP_TESTE_PRIMARIO1 >> /dev/null
        if [ $? = "0" ]
            then   
                echo `date` "Rede Primaria OK" >> /etc/network/gateway.log
            else   
                ping -c4 $IP_TESTE_PRIMARIO2 >> /dev/null
                if [ $? = "0" ]
                    then   
                        echo `date` "Rede Primaria OK" >> /etc/network/gateway.log
                    else    # Troca de Gateway   
                        GW=$GW_SECUNDARIO
                        GW2=$GW_PRIMARIO
                        GATEWAY
                        echo `date` "Rede Secundaria Ativada" >> /etc/network/gateway.log
                        exit
                fi
        fi
elif [ $GW_ATUAL = "$GW_SECUNDARIO" ]
    then   
        ping -c4 $IP_TESTE_SECUNDARIO1 >> /dev/null
        if [ $? = "0" ]
            then   
                echo `date` "Rede Secundaria OK" >> /etc/network/gateway.log
            else   
                ping -c4 $IP_TESTE_SECUNDARIO2 >> /dev/null
                if [ $? = "0" ]
                    then   
                        echo `date` "Rede Secundaria OK" >> /etc/network/gateway.log
                    else    # Troca de Gateway
                        GW=$GW_PRIMARIO
                        GW2=$GW_SECUNDARIO
                        GATEWAY
                        echo `date` "Rede Primaria Ativada" >> /etc/network/gateway.log
                        exit
                fi
        fi
fi

Espero que seja útil de alguma forma.

Até a próxima!!!

Nenhum comentário:

Postar um comentário