Altere o link da internet quando a falha

1

Situação:

  • 2 links de internet - A e B - ambos conectados ao roteador linux.
  • 2 tabelas de roteamento, uma com padrão via A, segundo padrão via B.
  • iptables e ip rule selecionam a tabela "melhor" para tráfego específico.

Tudo funciona bem, mas - é configuração estática.

O que fazer - se um dos links da internet falhar? Nesse cenário, tudo deve passar pelo segundo link adequado. E - quando o link falhado estiver ativo - tudo deve voltar à situação em que o tráfego passa por ambos os links.

Existe alguma ferramenta "padrão" para fazer essas coisas? isso não é problema para escrever algo (script) o que fazer essas coisas - mas - talvez existam mais ferramentas padrão?

(definição de falha no link - um dos ip importantes é inacessível a partir do link específico, mas é acessível a partir do segundo link).

    
por undefine 06.02.2015 / 11:16

1 resposta

2

Meus roteadores multi-WAN Draytek podem usar o comando ping ou arp para monitorar a manutenção de atividade em todos os links Ethernet e VPN. (Obviamente, para o xDSL existem alternativas melhores.) O Ssh e o OpenVPN podem ser configurados para gerar keepalives internos. Eu não sei de nenhuma outra abordagem padrão.

Algo parecido com isto (não testado):

ROUTE1=up LINK1=up COUNT1=3
ROUTE2=up LINK2=up COUNT2=3
SHOUT=once

while sleep 5
do
    if ping {destination_via1}
    then
        LINK1_UP=up COUNT1=3
    else
        [[ 0 -lt $COUNT1 ]] && COUNT1=$((COUNT1 - 1))
        [[ 0 -ge $COUNT1 ]] && LINK1=down
    fi

    if ping {destination_via2}
    then
        LINK2_UP=up COUNT2=3
    else
        [[ 0 -lt $COUNT2 ]] && COUNT2=$((COUNT2 - 1))
        [[ 0 -ge $COUNT2 ]] && LINK2=down
    fi


    if [[ down = $LINK1 -a up = $ROUTE1 ]]
    then
        # add code here to remove route via LINK1 #
        ROUTE1=down
    elif [[ up = $LINK1 -a down = $ROUTE1 ]]
        # add code here to add route via LINK1 #
        ROUTE1=up
        SHOUT=once
    fi

    if [[ down = $LINK2 -a up = $ROUTE2 ]]
    then
        # add code here to remove route via LINK2 #
        ROUTE2=down
    elif [[ up = $LINK2 -a down = $ROUTE2 ]]
        # add code here to add route via LINK2 #
        ROUTE2=up
        SHOUT=once
    fi

    if [[ once = $SHOUT -a down = $ROUTE1 -a down = $ROUTE2 ]]
    then
        # add code here to shout that both routes are down #
        SHOUT=no
    fi
done
    
por 06.02.2015 / 11:56