Depois de fazer uma configuração normal de apenas eth0, voltei e adicionei a configuração para eth1. Com apenas eth0 ativo, a tabela de rotas era:
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
Mas uma vez que eu trouxe o eth1, a ordem das instruções de rota padrão determinou qual interface sempre foi usada. Como mostrado abaixo, acontece de escolher a rota eth1 para o gateway 192.168.1.65.
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100
apenas uma instrução de gateway
O primeiro problema pode ser a rota padrão extra 'via 192.168.1.65'. Aparece lá se a definição eth1 em / etc / network / interfaces tiver uma instrução "gateway 192.168.1.65". Portanto, remova qualquer declaração extra de gateway e salte a interface:
# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
configurar nova tabela de roteamento
Crie uma nova tabela de roteamento separada contendo uma rota padrão apropriada para todo o tráfego que sai do eth1. O número da tabela aqui não é importante; 101 simplesmente não é a tabela de roteamento principal. Faça isso com um comando 'post-up' na configuração eth1 em / etc / network / interfaces. Adicione apenas um post-up no eth1; Não o adicione a nenhuma das subinterfaces eth1:.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Bounce eth1. A tabela de roteamento principal não é alterada e a tabela 101 conterá a rota padrão via 192.168.1.65 se eth1 estiver ativado.
# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101 (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101
default via 192.168.1.65 dev eth1
nova regra de roteamento
Adicione uma regra de roteamento para usar a tabela 101 para selecionar uma rota padrão para pacotes que devem sair eth1.
# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0: from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default
Adicione a regra ao /etc/network/interfaces
arquivo também:
post-up ip rule add from 192.168.1.64/27 lookup 101
Agora certifique-se de adicionar limpeza para remover a rota e governar quando a interface ficar inativa:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[EDIT para ubuntu 16.04+] Como indicado aqui e no teste que fiz desta ajuda, o ip route2 mudou sua estrutura de comandos. Para fazer o trabalho, você terá que se adaptar um pouco para fazer na ordem de como os man ip
pontos .
up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65
Ou você terminará após um comando ifdown - ifup com uma mensagem de erro @ifdown (mensagem padrão para dizer que os periféricos não estão configurados corretamente) e @ifup pela ausência de uma rota na tabela 101.