Estou tendo um problema com uma VM dual-nic (digamos eth0 e eth1). Por exemplo, as coisas funcionam quando a tabela de roteamento se parece com isto:
$ sudo route -n
default 10.100.0.1 0.0.0.0 UG 20100 0 0 eth0
default 192.168.100.1 0.0.0.0 UG 20101 0 0 eth1
O GW padrão 10.100.0.1
lida com todo o tráfego, incluindo pesquisas de DNS, etc.
No fim de semana algo acontece (não tenho certeza do que), mas quando chego na segunda-feira, vejo que meu GW padrão desejado agora tem uma métrica MAIS ALTA, por isso não é usado.
$ sudo route -n
default 192.168.100.1 0.0.0.0 UG 20101 0 0 eth1
default 10.100.0.1 0.0.0.0 UG 20102 0 0 eth0 <<< ISSUE 20102
O segmento LAN 192.168.100.1 só tem conectividade com hosts usados para testes. O gateway padrão é criado automaticamente quando eu habilito o NETWORK SEGMENT (estou executando esta VM no vSphere).
O resultado é que meus servidores DNS não estão acessíveis. A solução alternativa é reinicializar o host ou descartar e adicionar novamente o gateway padrão.
Esta pergunta explica o problema: Por que excluir uma rota de gateway e adicioná-la novamente faz com que o roteamento funcione repentinamente?
Estou tentando encontrar uma solução para esse problema. A solução deve garantir que o GW padrão desejado sempre terá a métrica mais baixa dos dois gateways definidos.
Procurando soluções
Não encontrei o termo de pesquisa correto para o problema que estou tendo, então tenho lido sobre como funcionam os gateways Linux, o que não tem sido útil para responder à minha pergunta.
Em primeiro lugar, eu usaria ip route, não apenas route. O pacote iproute2 substituirá o net-tools em breve.
Embora existam soluções melhores que eu poderia sugerir, se eu tivesse mais detalhes sobre sua configuração, por exemplo: você está usando netplan ou suas interfaces estão configuradas com a configuração de interface mais antiga.
Esta solução deve funcionar com qualquer versão do Ubuntu.
crie um arquivo em /etc/network/if-up.d/ e torne-o executável pelo root
Com base nas informações extras, sugiro que a melhor solução seja:
criando um arquivo /etc/systemd/network/99-eth1.network
Isso garantirá que o vSphere não aloque o gateway via DHCP. Suspeito que algo mudou em seu vSphere, atualização ou alteração de configuração que resultou na alocação de um gateway via DHCP para sua VM. Ou, por algum motivo, a ordem em que suas placas de rede foram configuradas durante a inicialização foi alterada. Se a eth1 for configurada primeiro, a métrica da rota adicionaria o custo de alcançar o endereço do gateway pela eth1 à eth0, daí a métrica mais alta.
Se você deseja garantir 110% de garantia de que a eth0 seja configurada primeiro e tenha uma métrica mais baixa, você também pode criar o arquivo abaixo se a eth0 receber seu endereço via dhcp, se for atribuído estaticamente, altere o DHCP para não abaixo e adicione a seção de endereço, e digite o endereço do gateway
Um colega de trabalho forneceu outra solução que era usar a
nmcli
interface de linha de comando baseada na resposta em Pergunte ao Ubuntu aqui Defina a métrica da interface de rede para um valor fixoA solução define a métrica na interface desejada eth0 na questão para um valor baixo.
NOTA: Não tenho certeza de como/por que a métrica inferior é mantida quando a interface eth0 é devolvida, mas funcionou durante o teste.
Tanto esta resposta quanto a resposta selecionada funcionaram para o OP.