Redundância de links dedicados
Eu não gosto de pegar as coisas prontas na Internet. Devem ter milhares de scripts que fazem redundância de links por aí, mas eu gosto de criar os meus. No máximo busco informações sobre comandos ou coisas do tipo. Esse script foi criado a partir da necessidade de haver redundância entre os links dedicados que interligam as unidades da empresa em que eu trabalho. Sei que existem muitas formas de se fazer isso, talvez até mais fáceis, mas essa foi a minha maneira.
Esse script trabalha o shell e o "awk", e utiliza basicamente os comandos ping e route para controlar os links. Ele captura a rota padrão atual e compara com a variável do gw primário, se ambos forem idênticos, então ele testa os ips de teste pre definidos no próprio script.
Caso haja resposta do primeiro ip de teste, ele simplesmente não faz mais nada. Caso não haja, ele faz o teste com o segundo ip. Se esse também não responder, ele troca o gateway padrão para o gateway secundário, conforme é demonstrado no função "GATEWAY()", e gera uma saída para o arquivo "gateway.log". Além de trocar o gateway padrão, ele troca todas as rotas que saem pelo gateway primário para saírem pelo gateway secundário e vice-versa.
Se no momento da comparação do gateway atual com o gateway primário eles não forem idênticos, então ele vai comparar o gateway atual com o secundário e o processo continua o mesmo. Daí é necessário agendar a execução do script para que a verificação seja contínua e automatizada.
Espero que gostem e que seja bem útil!
Esse script trabalha o shell e o "awk", e utiliza basicamente os comandos ping e route para controlar os links. Ele captura a rota padrão atual e compara com a variável do gw primário, se ambos forem idênticos, então ele testa os ips de teste pre definidos no próprio script.
Caso haja resposta do primeiro ip de teste, ele simplesmente não faz mais nada. Caso não haja, ele faz o teste com o segundo ip. Se esse também não responder, ele troca o gateway padrão para o gateway secundário, conforme é demonstrado no função "GATEWAY()", e gera uma saída para o arquivo "gateway.log". Além de trocar o gateway padrão, ele troca todas as rotas que saem pelo gateway primário para saírem pelo gateway secundário e vice-versa.
Se no momento da comparação do gateway atual com o gateway primário eles não forem idênticos, então ele vai comparar o gateway atual com o secundário e o processo continua o mesmo. Daí é necessário agendar a execução do script para que a verificação seja contínua e automatizada.
Espero que gostem e que seja bem útil!
Descrição
Eu não gosto de pegar as coisas prontas na Internet. Devem ter milhares de scripts que fazem redundância de links por aí, mas eu gosto de criar os meus. No máximo busco informações sobre comandos ou coisas do tipo. Esse script foi criado a partir da necessidade de haver redundância entre os links dedicados que interligam as unidades da empresa em que eu trabalho. Sei que existem muitas formas de se fazer isso, talvez até mais fáceis, mas essa foi a minha maneira.
Esse script trabalha o shell e o "awk", e utiliza basicamente os comandos ping e route para controlar os links. Ele captura a rota padrão atual e compara com a variável do gw primário, se ambos forem idênticos, então ele testa os ips de teste pre definidos no próprio script.
Caso haja resposta do primeiro ip de teste, ele simplesmente não faz mais nada. Caso não haja, ele faz o teste com o segundo ip. Se esse também não responder, ele troca o gateway padrão para o gateway secundário, conforme é demonstrado no função "GATEWAY()", e gera uma saída para o arquivo "gateway.log". Além de trocar o gateway padrão, ele troca todas as rotas que saem pelo gateway primário para saírem pelo gateway secundário e vice-versa.
Se no momento da comparação do gateway atual com o gateway primário eles não forem idênticos, então ele vai comparar o gateway atual com o secundário e o processo continua o mesmo. Daí é necessário agendar a execução do script para que a verificação seja contínua e automatizada.
Espero que gostem e que seja bem útil!
Esse script trabalha o shell e o "awk", e utiliza basicamente os comandos ping e route para controlar os links. Ele captura a rota padrão atual e compara com a variável do gw primário, se ambos forem idênticos, então ele testa os ips de teste pre definidos no próprio script.
Caso haja resposta do primeiro ip de teste, ele simplesmente não faz mais nada. Caso não haja, ele faz o teste com o segundo ip. Se esse também não responder, ele troca o gateway padrão para o gateway secundário, conforme é demonstrado no função "GATEWAY()", e gera uma saída para o arquivo "gateway.log". Além de trocar o gateway padrão, ele troca todas as rotas que saem pelo gateway primário para saírem pelo gateway secundário e vice-versa.
Se no momento da comparação do gateway atual com o gateway primário eles não forem idênticos, então ele vai comparar o gateway atual com o secundário e o processo continua o mesmo. Daí é necessário agendar a execução do script para que a verificação seja contínua e automatizada.
Espero que gostem e que seja bem útil!
Versões atualizadas deste script
#!/bin/bash
# Script de redundancia de links NipCable e Vivo
# 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 >= 2 {if ($2 == gw2) print "route add -net " $1 FS "netmask " $3 " gw " gw > "/etc/network/gateway";}'
netstat -nr | awk -v gw2="$GW2" 'NR >= 3 {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
echo "# Rotas Atuais coletadas pelo /etc/init.d/roteamento.sh" >> /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
Rodei o exec. /redundancia2.sh:
Output from command /etc/redundancia/redundancia2.sh ..
/etc/redundancia/redundancia2.sh: line 37: /etc/network/rotas.sh: No such file or directory
/etc/redundancia/redundancia2.sh: line 38: /etc/network/rotas.sh: No such file or directory
/etc/redundancia/redundancia2.sh: line 39: /etc/network/rotas.sh: No such file or directory
Utilizo o CentOS 5.8