SCRIPT - FAILOVER DE LINK - 3 ETHs

1. SCRIPT - FAILOVER DE LINK - 3 ETHs

Bruno
bkammers

(usa Ubuntu)

Enviado em 08/06/2015 - 14:09h

Boa tarde galera, venho compartilhar um script que fiz.

Por necessidade, fiz algumas consultas pela internet e juntando informações montei um script, que de forma simples, funciona perfeitamente! (Está em produção na Empresa que administro - Matriz e Filiais)

Vamos ao cenário:

O Gateway da sua rede é um servidor Linux;

Precisa estar com 3 placas de rede, sendo 1 LAN e 2 WAN;

Os links podem ser ADSL, DEDICADO ou MISTO; (No meu caso é misto - link principal dedicado e link redundante ADSL)

Seriam 02 arquivos de firewall (iptables) criados, sendo um baseado na ETHx e outro na ETHy;

Aqui ficou desta maneira:

ETH0 - LAN
ETH1 - WAN DEDICADA - GW = IP DO ROUTER DA OPERADORA
ETH2 - WAN ADSL - GW = IP LAN DO MODEM ADSL


O script é este:


#!/bin/bash

# FAILOVER PARA FIREWALL QUE SEJA GW PADRAO DA REDE - 03 ETHs
# CONSULTA ROTA PADRAO E ALTERA CASO ESTEJA FORA DO AR
# POR BRUNO KAMMERS


### GATEWAY DISPONIVEIS - GW1 LINK PRINCIPAL - ETH1 | GW2 LINK SECUNDARIO - ETH2

GW1=AAA.AAA.AAA.AAA # Altere para o GW do seu link principal
GW2=BBB.BBB.BBB.BBB # Altere para o GW do seu link secundario


### CONSULTA GW DEFAULT

ROTA=`route -n | tail -n1 | awk '{print $2}'`

### PINGA NO IP DO ROUTER DA OPERADORA - GW DO SEU LINK PRINCIPAL

RPING=`ping -c1 $GW1 > /dev/null ; echo $?`


### FIREWALL

FWGW1="opt/firewall_eth1.sh" # Altere para o path (sem o "/" inicial) do seu FW principal - ETH1
FWGW2="opt/firewall_eth2.sh" # Altere para o path (sem o "/" inicial) do seu FW secundario - ETH2



########## INICIO SCRIPT - NAO ALTERAR NADA DAQUI PRA BAIXO ##########
#
############# A NAO SER QUE SAIBA O QUE ESTA FAZENDO... ##############


if [[ "$RPING" -eq 0 && "$ROTA" = "$GW1" ]]
then
echo "ROTA DEFAULT Gw1 FUNCIONANDO..."
exit

else
echo "GW1 FORA DO AR - ALTERANDO ROTA PARA GW2..."
ip route replace default via $GW2
sh /$FWGW2 2>&1 /dev/null


if [[ "$RPING" -eq 0 && "$ROTA" != "$GW1" ]]
then
echo "GW1 VOLTOU - RETORNANDO A ROTA PARA GW1..."
ip route replace default via $GW1
sh /$FWGW1 2>&1 /dev/null
else
echo "GW1 AINDA FORA DO AR - MANTENDO A ROTA GW2..."
exit
fi
fi


Funcionamento:

Verifica qual o gateway padrão da rede, se bate com o principal;

Realiza um ping no router da operdadora, no caso é o gateway do link dedicado;

Se estiver nestas condições, ele sai do script;

Caso estiver fora das condições, ele altera a rota padrão para a outra interface e executa o firewall respectivo da mesma;

Ainda neste segmento, ele testa novamente a rota principal, caso ela tenha voltado, o gateway padrão é ajustado, se não, sai do script;

Você deve dar permissão de execução no script e colocá-lo no crontab para rodar a cada 1 minuto;


Espero que tenha ajudado quem está a procura deste tipo de solução.

Dúvidas, estou a disposição!





  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts