Tenho um problema com um dispositivo multihomed, que precisa atender a alguns requisitos específicos. Tento descrever esta questão da forma mais neutra possível e não entrar em detalhes de possíveis soluções antecipadamente. Embora eu tenha algumas ideias, nenhuma delas resolve todos os casos descritos abaixo.
O dispositivo executa um Linux embarcado personalizado com kernel 5.1.x e possui até três conexões de rede ao mesmo tempo.
- eth0 (Ethernet com fio)
- mlan0 (WiFi)
- móvel1 (modem LTE)
Cada conexão ativa será fornecida com um gateway padrão pelo servidor DHCP ou provedor móvel.
Problema 1: Conexão com a Internet
- Se eth0 tiver acesso à Internet, deve ser preferível a mlan0 e mobile1 para acesso à Internet.
- Se mlan0 tiver acesso à Internet, deve ser preferível a mobile1.
- Se nem eth0 nem mlan0 tiverem acesso à Internet, use mobile1.
- Se uma conexão com a Internet falhar, a próxima deverá ser usada.
- Se uma conexão com a Internet for restabelecida e for mais preferencial do que a atualmente ativa, a conexão restabelecida deverá ser usada.
Qual a melhor forma de configurar o roteamento para funcionar assim?
Problema 2: DNS e conectividade em interfaces específicas
- Em alguns cenários, uma rede privada pode ser acessada pela conexão LTE, mas não pela Internet. Portanto, uma conexão com a Internet deve ser usada por Ethernet ou WiFi.
- Temos que verificar o servidor DNS da conexão LTE e caso não conheça um host, temos que prosseguir com o servidor DNS de outra interface.
- Neste cenário, temos que usar a conexão LTE para qualquer coisa que esteja acessível lá, mas devido à sobreposição do nome do host e do endereço IP, não podemos saber antes de tentar, se a solicitação é para a internet pública ou para a rede privada em banda larga móvel .
Tenho certeza de que não estou sozinho nesse tipo de cenário "experimente esta rede e se falhar, use a outra", mas depois de várias horas de pesquisa ainda não consigo entender uma solução que resolva isso.
Alguém tem uma solução ou uma boa sugestão para resolver esses dois problemas?
Você deve verificar todas as rotas periodicamente e instalar a rota padrão apropriada, de acordo com qualquer lógica que você possa imaginar. Faça Você Mesmo. Escreva um script e execute-o via cron, ou escreva um daemon, você decide. Ou encontre um já pronto. Linux não fará isso por você.
O Linux não tem como selecionar automaticamente a rota com base na acessibilidade. Ele não monitora a acessibilidade do gateway padrão ou de qualquer outro gateway no sistema. O máximo de automação que ele pode fazer por você é que, se a NIC estiver inativa, ela destruirá uma rota "conectada" e, se houver outras rotas dependentes dela (por exemplo, o padrão ou qualquer outra), elas também serão removidas. Mas como “o link está ativo” e “tem acesso à Internet” não é a mesma coisa, é possível que a eth esteja ativa (a operadora está presente) mas o dispositivo do outro lado do link não tenha acesso para a própria Internet. (Imagine uma rede Ethernet como [dispositivo]--[switch]--[roteador]--...; a camada física termina no switch, portanto, mesmo que o roteador falhe, o dispositivo não o verá.
Veja aqui também.