私の質問は基本的に特定のインターフェースで特定のアウトバウンドトラフィックのみを許可すると同じです。
2つのインターフェイスeth1
(10.0.0.2)とwlan0
(192.168.0.2)があります。私のデフォルトのルートはですeth1
。すべてのhttps-trafficを通過させたいとしましょうwlan0
。ここで、他の質問で提案されたソリューションを使用すると、httpsトラフィックは通過しますwlan0
が、送信元アドレスはeth1
(10.0.0.2)のままです。このアドレスはwlan0
ゲートウェイにルーティングできないため、回答が返されることはありません。簡単な方法は、アプリケーションでbind-addrを適切に設定することですが、この場合は適用できません。
私はsrc-addrを書き換える必要があると考えています:
# 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
現在、tcpdumpは発信パケットを正常に認識し、着信パケットは192.168.0.2に到着しますが、おそらくアプリケーションに到達することはありません。これは、アプリケーションがSYNパケットを再送信しているということです。 ACKはすでに受信されています。
だから、着信アドレスも書き直す必要があるかもしれないと思った。
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
しかし、それもうまくいきませんでした。だからここで立ち往生しています。助言がありますか?