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