Po wykonaniu normalnej konfiguracji samego eth0 wróciłem i dodałem config dla eth1. Przy zaledwie eth0 w tabeli tras było:
# 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
Ale kiedy przywołałem eth1, kolejność domyślnych instrukcji tras określała, który interfejs był zawsze używany. Jak pokazano poniżej, zdarza się, że wybiera trasę eth1 do bramy 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
tylko jedna instrukcja bramy
Pierwszym problemem może być dodatkowa domyślna trasa „przez 192.168.1.65”. Pojawia się tam, jeśli definicja eth1 w / etc / network / interfaces ma instrukcję „gateway 192.168.1.65”. Więc usuń wszelkie dodatkowe instrukcje bramy i odbij interfejs:
# 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
skonfiguruj nową tabelę routingu
Utwórz nową oddzielną tabelę routingu zawierającą domyślną trasę odpowiednią dla całego ruchu wypływającego z eth1. Numer tabeli tutaj nie jest ważny; 101 po prostu nie jest główną tabelą routingu. Zrób to za pomocą polecenia „post-up” w konfiguracji eth1 w / etc / network / interfaces. Dodaj tylko jeden post-up na eth1; Nie dodawaj go do żadnego z interfejsów eth1:.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Bounce eth1. Główna tablica routingu pozostaje niezmieniona, a tablica 101 będzie zawierać domyślną trasę via 192.168.1.65, jeśli eth1 działa.
# 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
nowa reguła routingu
Dodaj regułę routingu, aby użyć tabeli 101 do wybrania domyślnej trasy dla pakietów, które powinny wyjść poza 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
Dodaj również regułę do /etc/network/interfaces
pliku:
post-up ip rule add from 192.168.1.64/27 lookup 101
Teraz pamiętaj, aby dodać czyszczenie, aby usunąć trasę i rządzić, gdy interfejs ulegnie awarii:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[EDYCJA dla Ubuntu 16.04+] Jak wskazano tutaj i z testu, który wykonałem z tej pomocy, ip route2 zmienił jego strukturę poleceń. Aby wykonać pracę, musisz trochę się dostosować, aby uporządkować man ip
punkty .
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
Albo skończysz po komendzie ifdown - ifup z komunikatem o błędzie @ifdown (standardowy komunikat informujący, że urządzenia peryferyjne nie są poprawnie skonfigurowane), a @ifup brak trasy w tabeli 101.
/etc/network/interfaces