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 routei 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 routei 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 rulepolecenie. 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, localktó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 alternatestół wyglądał podobnie do mainstoł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 alternatetabeli routingu zamiast zwykłej maintabeli. Ostatnim krokiem jest upewnienie się, że wszyscy klienci, którzy muszą go użyć, zostaną z nim eth0powiązani. Z wget, na przykład, ustaw --bind-address=192.168.0.2, dla NFS ustawclientaddr=192.168.0.2opcja 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.
iftopa każdy z nich pokazuje odpowiedni rodzaj ruchu. Dziękuję bardzo.