Dopo aver eseguito una normale configurazione di solo eth0, sono tornato indietro e ho aggiunto config per eth1. Con solo eth0 up, la tabella di route 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
Ma una volta ho sollevato eth1, l'ordine delle istruzioni di route predefinite ha determinato quale interfaccia è stata sempre utilizzata. Come mostrato sotto, capita di scegliere la rotta eth1 verso il 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
una sola istruzione gateway
Il primo problema può essere la route predefinita extra "via 192.168.1.65". Appare lì se la definizione di eth1 in / etc / network / interfaces ha un'istruzione "gateway 192.168.1.65". Quindi rimuovere qualsiasi istruzione gateway aggiuntiva e rimbalzare l'interfaccia:
# 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
imposta una nuova tabella di routing
Creare una nuova tabella di routing separata contenente una route predefinita appropriata per tutto il traffico proveniente da eth1. Il numero di tabella qui non è importante; 101 non è semplicemente la tabella di routing principale. Fallo con un comando 'post-up' sulla configurazione di eth1 in / etc / network / interfaces. Aggiungi un solo post-up su eth1; Non aggiungerlo a nessuna delle interfacce secondarie eth1 :.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Bounce eth1. La tabella di routing principale è invariata e la tabella 101 conterrà la route predefinita via 192.168.1.65 se eth1 è attivo.
# 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
nuova regola di routing
Aggiungere una regola di routing per utilizzare la tabella 101 per selezionare una route predefinita per i pacchetti che dovrebbero uscire 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
Aggiungi la regola anche al /etc/network/interfaces
file:
post-up ip rule add from 192.168.1.64/27 lookup 101
Ora assicurati di aggiungere cleanup per rimuovere il percorso e la regola quando l'interfaccia non funziona:
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 for ubuntu 16.04+] Come indicato qui e dal test che ho fatto da questo aiuto, ip route2 ha cambiato la sua struttura di comandi. Per fare il lavoro dovrai adattarti un po 'per fare nell'ordine in cui i man ip
punti .
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
Oppure finirai dopo un comando ifdown - ifup con un messaggio di errore @ifdown command (messaggio standard per dire che le periferiche non sono configurate correttamente) e @ifup l'assenza di una route nella tabella 101.