UDP-Sendto schlägt fehl, wenn bestimmte Routingtabellen verwendet werden

UDP-Sendto schlägt fehl, wenn bestimmte Routingtabellen verwendet werden

sysctlIch 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.1Tabelleeth0

zu 192.168.1.1Tischeth0

iif eth0table eth0

von eth0table eth0

Denn eth2es ist das Gleiche.

Die sysctlOptionen 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

verwandte Informationen