sysctl
Ich habe ein System mit mehreren Schnittstellen. Ich habe alle diese Schnittstellen mithilfe einiger Optionen und Routingtabellen und -regeln voneinander isoliert .
Jede Schnittstelle verfügt über eine eigene Routing-Tabelle, die eine Standardroute definiert.
Jede Routing-Tabelle verfügt über einen Satz von 4 Regeln, die definieren, welche Pakete an welche Tabelle gehen sollen.
Nehmen wir der Vereinfachung an, ich habe eth0 (192.168.1.1)
und eth1 (192.168.1.2)
.
aus
192.168.1.1
Tabelleeth0
zu
192.168.1.1
Tischeth0
iif eth0
table eth0
von eth0
table eth0
Denn eth2
es ist das Gleiche.
Die sysctl
Optionen sind:
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1
Dies funktioniert in 99 % der von mir beabsichtigten Anwendungsfälle hervorragend, aber einer schlägt fehl. Wenn ein Paket von einem Socket generiert wird, der nicht gebunden ist, wie z. B. die Antwort an einen UDP-Client mit „sendto“, schlägt der Aufruf mit „Netzwerk nicht erreichbar“ fehl. Wenn vor dem Aufruf von sendto eine bestimmte IP-Adresse gebunden ist, ist der Aufruf wie erwartet erfolgreich.
Gibt es, abgesehen von der Einrichtung einer Catch-All-Standardroute für solche Situationen, etwas, das mithilfe von Policy-Routing (z. B. iptables, IP-Regel) getan werden kann, um dieses Problem zu lösen?
Danke