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?