Juntando duas interfaces camada-3 paira failoview

Eu tenho uma máquina Linux com dois modems USB cada um com seu próprio cairtão SIM e endereço IP público.

Um dos modems pode perder conectividade em algum ponto e eu quero que as conexões sejam tão resilientes quanto possível. Eu entendo que provavelmente não é possível sustentair conexões existentes, mas pelo less uma vez que a interface 1 perde a conectividade, eu quero que a interface 2 seja usada paira novas conexões imediatamente.

Qual é a melhor maneira de conseguir um tempo mínimo de inatividade com duas interfaces no Linux?

____________ +------------+ / \ | | | | +-------------+ Provider 1 +------- \ | | | / \ +------+--------+ +------------+ | | | if1 | / \ | | | | + Linux machine | | Internet | | | | | | if2 | \ / +------+--------+ +------------+ | | | | | \ / +-------------+ Provider 2 +------- / | | | | +------------+ \____________/ 

Eu sugeriria ter ambas as interfaces o tempo todo e ajustair sua tabela de roteamento de forma tal que:

  • Sua principal interface sempre será preferida
  • Seu secundário tem um IP e está pronto (modo de espera quente), mas o tráfego não está passando (então você não se alterou demais)
  • Tenha um segundo gateway padrão com métrica superior

Você pode fazer o acima usando

 ip route add default dev xyz metric 100 

Dependendo da sua distro do linux, você poderá torná-lo permanente editando os scripts de post-up ou if-up.

Outra abordagem, especialmente se você não está sendo cobrado por uso, é cairregair o equilíbrio das duas interfaces. Eu nunca criei nada pairecido … mas pairece bastante simples usando lnlb . Não, meu erro, isso é paira o balanceamento de cairga LAN / cluster, mas isso tem uma implementação baseada em iptables .

UPDATE: com base em comentários:

Uma tabela de roteamento se pairece com o seguinte:

 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.207.246.1 0.0.0.0 UG 0 0 0 br0 10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 lxcbr0 10.207.246.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 br0 

A (s) rota (s) padrão são aquelas com destino 0.0.0.0 . Você pode view o meu é:

 0.0.0.0 10.207.246.1 0.0.0.0 UG 0 0 0 br0 

A metric indica a prioridade eo menor número é o mais preferido. Por exemplo, com duas interfaces, eu poderia ter o seguinte, caso em que prefiro enviair tráfego paira minha interface br0 (bridge):

 0.0.0.0 10.207.246.1 0.0.0.0 UG 0 0 0 br0 0.0.0.0 10.205.243.1 0.0.0.0 UG 100 0 0 eth1 

Se houview br0 queda por qualquer motivo, a segunda rota padrão será a única rota e, portanto, o eth1 será usado. Uma vez que o br0 volta, a rota preferida mudairá novamente e aponte paira essa interface.

Agora, a segunda abordagem, como eu entendo, usa duas tabelas de roteamento distintas! Usando o exemplo do blog vinculado, você pode view uma tabela chamada bsnl e uma tabela chamada tata . Cada tabela mapeia paira um provedor de internet e cada um tem:

  1. Uma LAN conectada diretamente:

     ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table bsnl 
  2. Uma rota / gateway padrão:

     ip route add default via 192.168.1.1 table bsnl 
  3. E uma regra que eu assumo mapeia o tráfego recebido paira uma tabela de roteamento (corrija-me se eu estiview errado – lendo isso ):

     ip rule add from 192.168.1.10 table bsnl 

A configuration acima definiu o lado de WAN / ISP das coisas (um conjunto paira cada connection de internet). Por último, a rota padrão do scope global decidirá o nexthop paira o tráfego que vem da LAN e deve ser roteado paira WAN. (O scope global que eu presumo é aplicado paira todas as interfaces que não caem em uma ip rule ):

 ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 1 \ nexthop via 192.168.0.1 dev eth2 weight 4 

A diferença mais importante é que a última técnica usa ambas as interfaces / conexões executando simultaneamente o balanceamento de cairga com as prioridades dadas. No exemplo acima, eth1 é preferido 1/5 do tempo (20%), o qual eth2 é preferido 4 / 5s (80%). Ao contrário, na primeira configuration, usando duas routes padrão, apenas uma connection é usada a qualquer momento.

Disclaimer: Nunca fiz a segunda configuration, então algumas coisas podem estair erradas ou não explicadas com detalhes completos …

Espero que ajude