Monitorar um link da Internet para um host remoto

4

Eu tenho um servidor Debian Wheezy rodando o Xivo (vamos chamá-lo de A), este servidor tem 2 interfaces: eth0 e eth1 . Não há gateway padrão e apenas alguns servidores são estaticamente alcançados a partir de A. eth0 tem um IP público e se conecta diretamente a um servidor remoto (vamos chamá-lo de B), a segunda interface de A, eth1 está em um local rede com outra conexão com a Internet deveria ser usado para diferentes fins.

Na tabela de roteamento A, B é alcançável pela interface eth0 . O que eu quero é configurar uma rota de failover que tente se conectar através de eth1 se a tentativa de conexão falhar em eth0 . Eu não tenho acesso aos roteadores, e nenhum roteamento dinâmico do exterior A pode estar envolvido.

Até agora eu vejo coisas diferentes como ip rule , heartbeat HA e outras tecnologias, mas com essa pergunta, o que eu quero alcançar é determinar se o que eu quero fazer é possível e, se possível, com que tipo de tecnologias.

EDIT 1

Eu decidi reformular minha pergunta porque sinto que ninguém sabe.
Como posso monitorar um link de um servidor para outro e agir se o link estiver inativo? Ele também pode estar relacionado à resolução arp porque estou virtualmente conectado ao host remoto e sei seu endereço MAC. Tenho certeza de que já existem possibilidades na selva da Internet e não quero reinventar a roda para essa tarefa.

EDIT 2

Como a solução do script é finalmente o que eu escolhi, vou aceitá-lo e recompensá-lo, mas adicionei uma espécie de compilação de tudo o que tentei antes de usar o script

    
por Kiwy 28.06.2014 / 01:30

4 respostas

1

Acabo com várias soluções e a única que retém é o script "crontabed" executado com um arping , este é o script:

#!/bin/sh

#remote host to test on public interface
REMOTE_TEST_IP="195.168.156.1"
REMOTE_TEST_MAC="00:2D:FF:FF:FF:FF"

#number of arp request send to test connectivity
TEST_COUNT=4

#the rate acceptable of arp request failling, strictly above this rate the route will be change
#NEVER put 100 or it will never set up failover
ACCEPTABLE_FAILURE_RATE=20

#list of network that will be rerouted if test fails
NETWORK_LIST="25.14.0.0/20 198.27.45.40/32 21.1.80.0/20"

PUBLIC_DEVICE="eth0"
PUBLIC_GATEWAY="192.168.1.250"

PRIVATE_DEVICE="eth1"
PRIVATE_GATEWAY="15.168.16.4"

#try to ping the remote host ip and the remote host mac, extract the result line and get the failure rate
FAILURE_RATE=$(arping -i $PUBLIC_DEVICE -c $TEST_COUNT -t $REMOTE_TEST_MAC $REMOTE_TEST_IP | grep % | sed -r s/.* ([0-9]{1,3})% .*//)



#if the faillure is superior to the acceptable failure rate, change the route to remote the remote host
if [ $FAILURE_RATE -gt $ACCEPTABLE_FAILURE_RATE ]
then

  for NETWORK in $NETWORK_LIST
  do
    logger "$0 - WARNING -The network route to $NETWORK_LIST are set to failover route."
    route del -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE
    route add -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE
  done

else

  for NETWORK in $NETWORK_LIST
  do
       #back to default route
       route del -net $NETWORK gw $PRIVATE_GATEWAY dev $PRIVATE_DEVICE
       route add -net $NETWORK gw $PUBLIC_GATEWAY dev $PUBLIC_DEVICE

  done
fi

Eu também encontrei uma solução diferente, como mencionada nas outras respostas.

Eu realmente não conheço nenhuma outra solução, a menção do blog por John Auld aqui é datada de 2005 quando o linux estava ainda usando métrica da rota, que não é mais o caso, exceto se você usar um protocolo de roteamento dinâmico.

    
por 31.07.2014 / 08:54
2

Eu tive um problema semelhante há algum tempo em alcançar um servidor remoto a partir de um datalogger (Ubuntu) através de uma conexão HDSL instável (às vezes não funcionando por dias!). Eu criei um script simples executado no datalogger no crontab. O script funcionou assim:

  • testa o status do ping HDSL em um servidor público / sempre disponível (como um DNS ou algo do tipo)
  • se o teste foi KO, o script adicionou uma rota ao servidor remoto por meio de um roteador 3G de backup na mesma rede
  • se o teste foi OK, a rota anterior foi removida, fazendo com que o datalogger alcance o servidor remoto através do roteador HDSL

Não foi uma solução refinada, mas funcionou no meu cenário!

    
por 28.06.2014 / 16:27
0

O artigo a seguir explica como você pode realizar o roteamento de failover de maneira simples.

link

Isso envolve adicionar duas rotas ao mesmo destino, uma via eth0 e uma via eth1, e uma configuração de tempo limite que alterna a rota ativa quando uma fica indisponível.

Tenha em mente que o IP de origem dos pacotes de saída será alterado se nat for usado. Com protocolos sem conexão, como HTTP, isso não importará. No entanto, com protocolos orientados à conexão, a rota pode mudar, mas as conexões falharão se o IP de origem for alterado.

O VoIP é mencionado em seus comentários e você deve esperar ver as chamadas falharem e precisarem ser reiniciadas.

    
por 30.06.2014 / 11:50
0

Sua pergunta é interessante. Uma pesquisa no google pega Mpath-tools

O Mpath-tools é um conjunto de programas para o linux 2.6+ que visam facilitar o balanceamento de carga e o failover em conexões ISP múltiplas e heterogêneas.

O mpathd é um daemon e o núcleo do mpath-tools, ele roda em segundo plano, monitorando o estado de cada conexão. Ele atualiza dinamicamente as tabelas de roteamento de acordo com o estado dos gateways e um conjunto de regras definido pelo administrador.

O estado de cada conexão é determinado pelo envio por meio de análises ICMP para um ou mais endereços.

Eu nunca tentei isso.
Esse é um projeto confidencial, eles não são bem indexados, a pesquisa "failover de rota estática do Linux" não deu nada, e "Failover de rota dinâmica do Linux" deu o site na página 4 (talvez minhas habilidades de pesquisa não sejam boas); mesmo "mpath-tools" retorna apenas alguns links. Note que isso não significa que não está funcionando.

    
por 02.07.2014 / 11:50