Meine Frage ist im Grunde die gleiche wie Nur bestimmten ausgehenden Datenverkehr auf bestimmten Schnittstellen zulassen .
Ich habe zwei Schnittstellen eth1
(10.0.0.2) und wlan0
(192.168.0.2). Meine Standardroute ist für eth1
. Nehmen wir an, ich möchte, dass der gesamte https-Verkehr durchläuft wlan0
. Wenn ich nun die in der anderen Frage vorgeschlagene Lösung verwende, wird der https-Verkehr durchlaufen wlan0
, hat jedoch weiterhin die Quelladresse eth1
(10.0.0.2). Da diese Adresse für das wlan0
Gateway nicht routingfähig ist , werden Antworten niemals zurückkommen. Der einfache Weg wäre, einfach die bind-addr in der Anwendung richtig einzustellen, aber in diesem Fall ist sie nicht anwendbar.
Ich glaube, ich muss das src-addr umschreiben:
# first mark it so that iproute can route it through wlan0
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2
Jetzt sieht tcpdump, dass die ausgehenden Pakete in Ordnung sind und eingehende Pakete für 192.168.0.2 eintreffen. Wahrscheinlich landen sie jedoch nie in der Anwendung. Alles, was ich jemals zu sehen bekomme, ist, dass die Anwendung das SYN-Paket erneut sendet. ACK wurde bereits empfangen.
Also dachte ich mir, ich muss vielleicht auch die eingehende Adresse umschreiben:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
aber das hat auch nicht geklappt. Also stecke ich irgendwie hier fest. Irgendwelche Vorschläge?