Właściwym sposobem na to jest powiązanie () z interfejsem, którego chcesz używać dla pakietów wychodzących. Ponieważ następnie możesz skonfigurować trasy za pomocą poleceń ip route
i ip rule
, aby kontrolować sposób routowania pakietów na podstawie ich interfejsu wychodzącego. W moim przykładzie założę następującą sieć:
- eth0:
- Adres: 192.168.0.2/24
- Brama domyślna: 192.168.0.1
- eth1:
- Adres: 192.168.1.2/24
- Brama domyślna: 192.168.1.1
Stworzę dwie tabele routingu, jedną dla ruchu wychodzącego dla eth0 o nazwie alternate i jedną tabelę dla eth1 o nazwie main. Tabela główna tabeli routingu zawsze istnieje i jest normalną tabelą używaną przez komendy route
i ip route
. Większość ludzi nigdy nie ma do czynienia z innymi stołami. Aby utworzyć tabelę o nazwie alternatywna, dodamy następujący wiersz /etc/iproute2/rt_tables
:
10 alternate
Główny stół ma domyślny priorytet 254. Reguły, dla których obowiązuje tabela routingu, są kontrolowane przez ip rule
polecenie. Domyślnie to polecenie wyświetli listę istniejących reguł, które powinny wyglądać mniej więcej tak:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Mówi to w zasadzie, że będzie szukał trasy w tabeli, local
która jest specjalną tabelą obsługiwaną przez jądro dla lokalnych tras, takich jak mój własny adres IP. Następnie spróbuje tabeli głównej i tabeli domyślnej. Tabela domyślna jest zwykle pusta, więc jeśli nie ma dopasowania w main, nie ma trasy do hosta. Po pierwsze, wypełnijmy tabelę naprzemiennie z regułami dla eth0.
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
Zwykle chcesz, aby alternate
stół wyglądał podobnie do main
stołu. Jedyne różnice polegają na tym, że routing powinien być inny. Możesz nie chcieć dołączać drugiej linii powyżej, jeśli dosłownie chcesz, aby cały ruch NFS, HTTP itp. Przechodził przez bramę domyślną na eth0, nawet jeśli jest przeznaczony dla sieci na eth1. Następnym krokiem jest dodanie reguły określającej, kiedy należy użyć tej alternatywnej tabeli routingu:
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
Ta reguła mówi, że każdy ruch przychodzący z adresu w sieci 192.168.0 użyje alternate
tabeli routingu zamiast zwykłej main
tabeli. Ostatnim krokiem jest upewnienie się, że wszyscy klienci, którzy muszą go użyć, zostaną z nim eth0
powiązani. Z wget
, na przykład, ustaw --bind-address=192.168.0.2
, dla NFS ustawclientaddr=192.168.0.2
opcja montażu. Jeśli używasz LibWWW z Perlem, możesz ustawić opcję localaddr w LWP :: UserAgent, aby kontrolować lokalny interfejs, z którym się łączy. Jeśli zdarzy ci się mieć klienta, nie możesz kontrolować źródła wiązania i kompilacji nie jest opcją, możesz użyć reguły iptables do zmodyfikowania jego adresu, ale jest to raczej hack i może nie działać. Potrzebna byłaby reguła SNAT skonfigurowana w łańcuchu PREROUTING tabeli nat lub tabeli mangle. Nadal będziesz potrzebować zmodyfikowanych tabel routingu podanych powyżej, aby to działało.
iftop
a każdy z nich pokazuje odpowiedni rodzaj ruchu. Dziękuję bardzo.