Failover do Ubuntu de Ethernet para modem ADSL para dongle USB 3G

7

Eu tenho um servidor Ubuntu conectado à Internet, conectado por Ethernet a uma linha residencial ADSL. Isso é adequado, na maioria das vezes, mas não posso confiar no link ADSL para ser tão confiável quanto eu gostaria. A lei de Murphy já ditou que o tempo de inatividade chega quando é menos conveniente.

Eu gostaria de usar um dongle USB 3G "pay-as-you-go" para fornecer um failover. Faltam informações sobre configurações de amostra que funcionam para outras pessoas - e sobre o hardware mais adequado (barato) para os meus propósitos. O objetivo é que, quando minha linha ADSL for desconectada, o servidor detecte isso e disque o serviço 3G - monitorando a linha ADSL e voltando a funcionar sem problemas quando a conexão for restaurada.

O principal serviço que me interessa é um túnel OpenVPN - sobre o UDP para um servidor remoto. O outro serviço útil seria o Squid - então eu ainda teria acesso à web da minha LAN quando o ADSL estiver desconectado.

Perguntas:

  1. Quão difícil isso seria criar?
  2. Eu seria forçado a "fazer o meu próprio" - ou há pacotes / temas que eu ignorei?
  3. Qual hardware (barato) é recomendado (preocupado com confiabilidade autônoma - principalmente)?
  4. Alguma anedota de sucesso ou fracasso de outras pessoas que já lidaram com isso?
por aSteve 14.02.2012 / 22:02

6 respostas

3

Temos alguns roteadores edimax 3g menores que têm 1 wlan, 1 lan e usb para o 3G stick. A porta Lan pode ser configurada para fazer parte da porta lan ou como principal porta wan (3g atuando como failover). Eu não sou afiliado com a edimax e nós os usamos na estrada ou em convenções para o seu tamanho (e um dos que temos é alimentado por bateria).

Tendo dito que eu iria com uma configuração no servidor ubuntu.

Respostas:

  1. Fácil se você tiver um administrador de servidores experiente. Caso contrário, se você estiver disposto a gastar o tempo para aprender e entender o que você está fazendo, é possível para um poweruser.
  2. Eu não sei sobre os pacotes disponíveis, mas

mude para 3g - exemplo de script:

pon YourIsp-name
route del default gw "your_adls_defaultGW"
route add -host "ping_or_other_test_host_for_checking_adsl_route" gw  "your_adls_defaultGW"
"do_other_stuff_like_restart_openvpn_maybe"

mude para o adsl - exemplo de script:

poff YourIsp-name
route add default gw "your_adls_defaultGW"
route del -host "ping_or_other_test_host_for_checking_adsl_route" gw  "your_adls_defaultGW"
"do_other_stuff_like_restart_openvpn_maybe"

Usar dhcp com adsl irá estragar este exemplo simples e você terá que modificar /etc/resolv.conf a cada mudança ou usar servidores de DNS abertos como o google 8.8.8.8 (ou seu próprio resolvedor). Agora .. o monitoramento é um pouco mais difícil, mas colocar algo assim no cron (não, isso é um exemplo ingênuo), vai te dar failover para 3g e voltar.

ping -q -c 2 "ping_or_other_test_host_for_checking_adsl_route"  && TARGETUP=1 || TARGETUP=0 ;  echo $TARGETUP ; if [ "$TARGETUP" == 1 ] ; then ( rm /tmp/.adsl_down ; [ -e /tmp/.adsl_up ] || ( PATH_TO_YOUR_ADSL_UP_SCRIPT && touch /tmp/.adsl_up ) ); else  ( rm /tmp/.adsl_up ; [ -e /tmp/.adsl_down ] || ( PATH_TO_YOUR_3G_UP_SCRIPT && touch /tmp/.adsl_down )) ; fi

Três) Veja roteadores Edimax 3g ( zeroshell linuxfw-distribution parece que o zeroshell tem failover nele, portanto, obtenha um pc barato para um roteador e usar o zeroshell, embora eu não tenha testado)

Quatro) Teste, persiste e quando o failover é necessário pela primeira vez, vai falhar (por causa de algo estúpido ...).

Não tenho certeza se você precisa do squid para essa configuração, a menos que acelere a conexão 3g com o cache local das páginas mais comuns que você visita.

    
por 20.02.2012 / 10:30
3

Eu fiz isso a qualquer momento para os clientes e não encontrei um sistema desenvolvido para fazer isso, então eu já fiz o meu próprio, os passos que Manwe lhe deu são mais ou menos o que eu faço quando eu preciso deles, mas eu irá colar aqui qualquer script cru que eu esteja usando (quando eu tiver tempo, eu quero fazer isso muito melhor em python).

Basicamente eu verifico se tenho internet ou não e se estou usando o backup wan e faço as alterações necessárias

#!/bin/bash
PATH="/bin:/sbin:/usr/bin:/usr/sbin"
primary_gw="192.168.1.1" #for example.
check_one="8.8.8.8"
check_two="8.8.4.4"

#first we check internet connection.
if 'ping -c 1 -W 1 $check_one |grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null' &&\
   'ping -c 1 -W 1 $check_two |grep -E '(unreachable|100\%\ packet\ loss)' &>/dev/null'
  then #if we don't have internet
    if [ -e /tmp/wan_backup ]
      #if we are using backup right now we try to change to primary connection
      then ./script_change_to_primary.sh && rm /tmp/wan_backup
      #else we change to wan backup.
      else ./script_change_to_backup.sh && touch /tmp/wan_backup
    fi
fi

#if we are using wan backup right now we check if primary connection works.
if [ -e /tmp/wan_backup ]
  then
    if 'ip route add $check_one via $primary_gw; ip route add $check_two via $primary_gw;\
        sleep 2; ping -c 1 -W 1 $check_one | grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null &&\
        ping -c 1 -W 1 $check_two | grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null'
      then #don't works we clean the routes and stay using backup
        ip route del $check_one via $primary_gw
        ip route del $check_two via $primary_gw
      else #it works so we change active connection 
        ip route del $check_one via $primary_gw
        ip route del $check_two via $primary_gw
        ./script_change_to_primary.sh
        rm /tmp/wan_backup
    fi
fi

Dado que você só quer que seu servidor use 3g se o adsl cair, eu usaria apenas iptables snat ou masquerade apenas no adsl iface e bloquearia o acesso ao squid em ./script_change_to_secondary.sh, seus arquivos poderiam ser:

script_change_to_secondary.sh

#!/bin/bash
pon 3gIsp #this one it is going to change the default route of server anyway
#drop squid connections, you could disable here the boot snat or masquerade for adsl
#but given your adsl is not active i don't see the need anyway
iptables -I INPUT -s LAN_IP_RANGE -d SERVER_IP -p tcp --dport 3128 -j DROP

script_change_to_primary.sh

#!/bin/bash
poff 3gIsp
iptables -D INPUT -s LAN_IP_RANGE -d SERVER_IP -p tcp --dport 3128 -j DROP
/etc/init.d/openvpn restart

Você deve ter também em /etc/ppp/ip-up.d/ um script bash com "/etc/init.d/openvpn restart", dessa forma toda vez que você se conectar a um provedor ppp, o openvpn será reiniciado automaticamente .

Bem, como eu disse, é um pouco feio e grosseiro, mas funciona :) se você encontrar uma solução limpa integrada para isso, me avise, por favor :), uma coisa boa de fazer você mesmo é que você tem um controle completo do sistema, isso é uma simplificação do que eu faço em qualquer cliente que tenha duas ou três conexões vivas ao mesmo tempo e faça um balanceamento de carga e QoS tudo integrado com scripts que detectem problemas de conexão e alterem as rotas e os QoS.

Se você preferir uma solução integrada para um álbum de fotos, poderá usar uma distribuição como zentyal , ele suporta o que você deseja usar, mas é uma distribuição completa feita sob medida para criar um servidor SmallBusiness, geralmente prefiro configurar meus servidores por conta própria, mas essa é uma boa distribuição que pode ser gerenciada via web.

    
por 21.02.2012 / 20:21
2

Você já considerou alguma solução baseada em hardware, pois posso ver a maioria dos pôsteres usando soluções de software?

Não tenho certeza de quanto você quer gastar, mas um DrayTek Vigor 2830n atenderia às suas necessidades. Pode haver alternativas mais baratas, mas essa é a que usei em dois locais diferentes e funcionou excepcionalmente bem.

Existem 3 conectividade WAN neste dispositivo, a linha ADSL padrão, a conexão Ethernet e o dongle 3G. Você pode configurá-lo usando apenas o dongle ADSL e 3G e usando o próprio roteador. O dongle 3G não precisa estar no 'load-balance mode', mas apenas no modo WAN-backup puro.

Depois de reler a postagem original, gostaria de acrescentar que você pode restringir o tráfego da VPN apenas através do dongle 3G para minimizar o custo de largura de banda do dongle 3G.

    
por 22.02.2012 / 17:39
0

1) Não é muito difícil - execute uma tarefa e verifique o status da sua DSL - quando ela falhar, inicie a interface 3G e execute failover na rota padrão. Talvez você precise reiniciar sua VPN também.

2 & 3) Nunca verifiquei um pacote de pré-construção, pois meu firewall favorito inclui esse recurso por padrão. Verifique o www.astaro.com (o aplicativo de software é gratuito para uso doméstico ou você pode usar o teste padrão de 30 dias para testes)

4) Nunca houve problemas significativos com failovers de WAN (além do backup da linha também estar inativo)

tsg

    
por 17.02.2012 / 14:17
0

Eu acho que você poderia usar keepalived para pingar um endereço de internet remoto (Google talvez) a cada 30 segundos com algum tempo limite. Se o ping expirar, configure o serviço keepalived para desligar o eth0 e abrir a interface 3G, depois reinicie sua VPN.

Você deve considerar atrasos, etc. ao configurar o keepalived para que ele não alterne interfaces quando não for necessário. Alguns testes / experimentos serão necessários. Eu não posso pensar em uma maneira de reverter para a linha ADSL quando a sua volta viva embora.

Se você tiver um roteador entre o modem ADSL e seu servidor, ou se o modem tiver um endereço externo no qual você possa fazer ping, provavelmente poderá usá-lo como critério para reverter a conexão.

Site do KeepaliveD

Espero que você possa começar!

    
por 17.02.2012 / 20:58
0

Você pode usar o shorewall (pacote ubuntu disponível) e um script muito útil chamado gwping para criar uma solução de rolagem personalizada.

    
por 14.04.2014 / 18:36