Nachdem ich eine normale Konfiguration von nur eth0 durchgeführt hatte, kam ich zurück und fügte config für eth1 hinzu. Mit nur eth0 war die Routentabelle:
# 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
Aber nachdem ich eth1 aufgerufen hatte, bestimmte die Reihenfolge der Standard-Routenanweisungen, welche Schnittstelle immer verwendet wurde. Wie unten gezeigt, wird zufällig die eth1-Route zum 192.168.1.65-Gateway ausgewählt.
# 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
Nur eine Gateway-Anweisung
Das erste Problem kann die zusätzliche Standardroute 'via 192.168.1.65' sein. Es erscheint dort, wenn die eth1-Definition in / etc / network / interfaces eine "gateway 192.168.1.65" -Anweisung enthält. Entfernen Sie daher alle zusätzlichen Gateway-Anweisungen und bouncen Sie die Schnittstelle:
# 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
Richten Sie eine neue Routing-Tabelle ein
Erstellen Sie eine neue, separate Routingtabelle mit einer Standardroute, die für den gesamten aus eth1 stammenden Datenverkehr geeignet ist. Die Tischnummer ist hier nicht wichtig; 101 ist einfach nicht die Hauptroutingtabelle. Führen Sie dazu einen 'post-up'-Befehl in der eth1-Konfiguration in / etc / network / interfaces aus. Addiere nur ein Post-Up auf eth1; Fügen Sie es keiner der eth1: -Unterschnittstellen hinzu.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Bounce eth1. Die Hauptroutingtabelle bleibt unverändert, und Tabelle 101 enthält die Standardroute via 192.168.1.65, wenn eth1 aktiv ist.
# 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
neue Weiterleitungsregel
Fügen Sie eine Routing-Regel hinzu, um mithilfe von Tabelle 101 eine Standardroute für Pakete auszuwählen, die nach eth1 gesendet werden sollen.
# 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
Fügen Sie die Regel auch der /etc/network/interfaces
Datei hinzu:
post-up ip rule add from 192.168.1.64/27 lookup 101
Stellen Sie nun sicher, dass Sie eine Bereinigung hinzufügen, um die Route und Regel zu entfernen, wenn die Schnittstelle ausfällt:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[BEARBEITEN für Ubuntu 16.04+] Wie hier angegeben und aus Tests, die ich anhand dieser Hilfe durchgeführt habe, hat ip route2 seine Befehlsstruktur geändert. Um Arbeit zu machen, müssen Sie nur ein wenig anpassen, um in der Reihenfolge zu tun, wie die man ip
Punkte .
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
Oder Sie erhalten nach einem ifdown-ifup-Befehl die Fehlermeldung @ifdown (Standardmeldung, dass die Peripheriegeräte nicht richtig konfiguriert sind) und @ifup, dass in Tabelle 101 keine Route angegeben ist.