Eu gostaria de ter várias NICs (eth0 e wlan0) na mesma sub-rede e servir como backup dos aplicativos no host se uma das NICs falhar. Por esse motivo, criei uma tabela de roteamento adicional. É assim que /etc/network/interfaces
parece:
iface eth0 inet static
address 192.168.178.2
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.2
post-up ip route add default via 192.168.178.1 dev eth0
post-up ip rule add from 192.168.178.2/32
post-up ip rule add to 192.168.178.2/32
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.3
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.3 table rt2
post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
post-up ip rule add from 192.168.178.3/32 table rt2
post-up ip rule add to 192.168.178.3/32 table rt2
Isso funciona para conectar-se ao host: ainda posso fazer o SSH nele se uma das interfaces falhar. No entanto, os aplicativos no host não podem inicializar uma conexão com o mundo externo se eth0
estiverem inativos. Esse é o meu problema.
Eu pesquisei esse tópico e encontrei as seguintes informações interessantes:
Quando um programa inicia uma conexão de saída, é normal o uso do endereço de origem curinga (0.0.0.0), indicando que não há preferência sobre qual interface é usada, desde que o endereço de destino relevante esteja acessível. Isso não é substituído por um endereço de origem específico até que a decisão de roteamento tenha sido tomada. O tráfego associado a essas conexões, portanto, não corresponderá a nenhuma das regras de política acima e não será direcionado para nenhuma das tabelas de roteamento recém-adicionadas. Supondo uma configuração normal, ela cairá na tabela de roteamento principal. http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html
O que eu quero é que a tabela de rotas principal tenha mais de um gateway padrão (um ativado eth0
e outro ativado wlan0
) e vá para o gateway padrão via eth0
por padrão e via wlan0
se eth0
estiver inoperante.
Isso é possível? O que preciso fazer para obter essa funcionalidade?
Respostas:
Eu mesmo resolvi. Parece haver poucas informações sobre o material de rede que você pode fazer com o Linux, por isso decidi documentar e explicar minha solução em detalhes. Esta é minha configuração final:
Primeiro passo : Crie uma nova tabela de rotas para todas as interfaces do Windows
/etc/iproute2/rt_tables
. Vamos chamá-los de rt1, rt2 e rt3Segunda etapa : configuração de rede em
/etc/network/interfaces
. Esta é a parte principal e tentarei explicar o máximo que puder:Se você digitar
ip rule show
, verá o seguinte:Isso nos diz que o tráfego de entrada ou saída do endereço IP "192.168.178.99" usará a tabela de rotas rt1. Por enquanto, tudo bem. Mas o tráfego gerado localmente (por exemplo, você deseja executar ping ou ssh da máquina para outro lugar) precisa de tratamento especial (consulte a grande citação na pergunta).
As quatro primeiras linhas de post-in
/etc/network/interfaces
são simples e explicações podem ser encontradas na internet, a quinta e a última linha de post-up são as que fazem a mágica acontecer:Observe como não especificamos uma tabela de rotas para esta linha de postagem. Se você não especificar uma tabela de rotas, as informações serão salvas na
main
tabela de rotas em que vimosip rule show
. Essa linha de postagem coloca uma rota padrão na tabela de rotas "principal" usada para o tráfego gerado localmente que não é uma resposta ao tráfego de entrada. (Por exemplo, um MTA no seu servidor tentando enviar um email.)As três interfaces colocam uma rota padrão na tabela de rotas principal, embora com métricas diferentes. Vamos dar uma olhada na
main
tabela de rotas comip route show
:Podemos ver que a tabela de rotas principal possui três rotas padrão, embora com métricas diferentes. A prioridade mais alta é eth0, depois wlan1 e wlan0 porque números de métricas mais baixos indicam uma prioridade mais alta. Como
eth0
possui a métrica mais baixa, esta é a rota padrão que será usada enquantoeth0
estiver em operação. Seeth0
cair, o tráfego de saída mudará parawlan1
.Com esta configuração, podemos digitar
ping 8.8.8.8
um terminal eifdown eth0
outro.ping
ainda deve funcionar porque, porqueifdown eth0
removerá a rota padrão relacionada aeth0
, o tráfego de saída mudará parawlan1
.As linhas post-down garantem que as tabelas de rotas relacionadas sejam excluídas do banco de dados da política de roteamento (
ip rule show
) quando a interface é desativada, a fim de manter tudo organizado.O problema que resta é que, quando você puxa o plugue da
eth0
rota padrão, eleeth0
ainda está lá e o tráfego de saída falha. Precisamos de algo para monitorar nossas interfaces e executarifdown eth0
se houver algum problema com a interface (ou seja, falha na NIC ou alguém puxando o plugue).Última etapa : insira
ifplugd
. Esse é um daemon que observa interfaces e executaifup/ifdown
se você desconectar ou se houver algum problema com a conexão wifi/etc/default/ifplugd
:Agora você pode ligar o plugue
eth0
, o tráfego de saída mudará parawlan1
e, se você reconectá-lo, o tráfego de saída retornará paraeth0
. Seu servidor permanecerá online enquanto qualquer uma das três interfaces funcionar. Para conectar-se ao seu servidor, você pode usar o endereço IP de eth0 e, se isso falhar, o endereço IP de WLAN1 ou WLAN0.fonte
scp
sessão será interrompida porque o endereço IP é alterado. Você pode tentar usarwithsctp
para manter a conexão ativa nesse caso ou usar emrsync
vez descp
limitar a transferência a partir do ponto em que parou.withsctp
também funcionará para apenas uma rota padrão.O Linux fornece uma solução melhor do que sua solução alternativa com script: ligação de backup ativo.
Dessa forma, sua máquina terá apenas um endereço IP (e um endereço MAC) e alternará as interfaces de forma automática e transparente se uma interface ficar indisponível. Nenhuma interrupção de nenhuma conexão TCP (nem na sua LAN interna nem na Internet).
Estou usando essa configuração para fazer failover automaticamente de eth0 para wlan0 no meu laptop debian quando eu desconecto meu laptop da estação de acoplamento.
Meu / etc / network / interfaces:
Você pode facilmente estender essa configuração para incluir vários dispositivos wlan. Definir a
primary_reselect
opção parabetter
(selecionar automaticamente o link mais rápido) deve ajudar aqui.Para mais informações, consulte https://wiki.linuxfoundation.org/networking/bonding e https://wiki.debian.org/Bonding
E (é claro) a documentação do kernel do linux em https://www.kernel.org/doc/Documentation/networking/bonding.txt
fonte