Existují dva možné modely návrhu pro síťový zásobník TCP/IP:model silného hostitele a model slabého hostitele. Očekáváte chování, které by odpovídalo modelu silného hostitele. Linux je navržen tak, aby používal model slabého hostitele. Obecně je model slabého hostitele častější, protože snižuje složitost směrovacího kódu a může tak nabídnout lepší výkon. Jinak jsou tyto dva hostitelské modely pouze odlišnými principy návrhu:ani jeden není ze své podstaty lepší než ten druhý.
Model slabého hostitele v zásadě znamená, že odchozí provoz bude odeslán prvnímu rozhraní uvedenému ve směrovací tabulce, které odpovídá IP adrese cíle (nebo vybrané bráně, pokud cíl není dosažitelný přímo), bez ohledu na zdrojovou IP adresu .
To je v podstatě důvod, proč se obecně nedoporučuje používat dvě samostatná fyzická rozhraní, pokud potřebujete dvě adresy IP ve stejném segmentu sítě. Místo toho přiřaďte dvě adresy IP pro jedno rozhraní (aliasy IP:např. eth1 =192.168.8.142 a eth1:0 =192.168.8.140). Pokud potřebujete větší šířku pásma, než jaké může poskytnout jediné rozhraní, spojte (nebo případně tým) dvě nebo více rozhraní dohromady a poté spusťte obě IP na svazku/týmu.
Vyladěním řady nastavení sysctl a použitím funkce "pokročilého směrování" k nastavení nezávislých směrovacích tabulek pro každou síťovou kartu je možné přimět Linux, aby se choval jako systém se silným modelem hostitele. Ale to je velmi speciální konfigurace a doporučoval bych si její implementaci dvakrát rozmyslet.
Podívejte se na odpovědi na stránce Linux Source Routing, Strong End System Model / Strong Host Model? pokud to opravdu potřebujete.
Dalším bodem, který je třeba vzít v úvahu, je, že rozhraní eth1 je nakonfigurováno s maskou podsítě 255.255.255.255.
To znamená, že rozhraní eth1 je nakonfigurováno tak, aby na svém síťovém rozhraní neočekávalo žádná další zařízení (hostitele). To znamená, že nebude schopen komunikovat s vaším klientem 192.168.8.142.
Po dlouhém hledání jsem našel Proč netcat nepoužívá správné rozhraní spojené s IP? , a to je stejný problém. Jak řekl @telcoM, odchozí provoz bude odeslán do prvního rozhraní, a to je ten problém, takže nejjednodušší způsob, jak to vyřešit, je:
ip route add default via 192.168.8.142 dev eth1 table 142
ip rule add from 192.168.8.142 table 142
Tato trasa vytvoří ip route get 192.168.8.135 from 192.168.8.142
vrátit eth1 místo eth0. Pak vše funguje podle očekávání.