もうすぐです。
アプリケーションがリターン トラフィックを認識しない実際の理由は、カーネルに組み込まれている IP スプーフィング保護のためです。つまり、リターン トラフィックはルーティング テーブルと一致しないため、ドロップされます。これは、次のようにスプーフィング保護をオフにすることで修正できます:
sudo sysctl net.ipv4.conf.wlan0.rp_filter=0
しかし、私はそれをお勧めしません。より適切な方法は、代替ルーティング インスタンスを作成することです。
<オール>
iproute
があることを確認してください パッケージがインストールされました。 ip
がある場合 コマンドを実行すると、設定が完了します (実行しているように見えますが、そうでない場合は最初に取得してください)。
/etc/iproute2/rt_tables
を編集 次の行を追加して新しいテーブルを追加します:
200 wlan-route
wlan-route
という名前の新しいルーティング テーブルを構成する必要があります。 デフォルト ゲートウェイを使用して、そのテーブルに条件付きでトラフィックを送信するルールを作成します。デフォルト ゲートウェイは 192.168.0.1 であると仮定します。当然、これは私の仮定だけでなく、実際のネットワークと一致する必要があります。
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
ip rule add fwmark 0x1 table wlan-route
最終的な注釈付きスクリプトは次のようになります:
# Populate secondary routing table
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table wlan-route
# Mark these packets so that iproute can route it through wlan-route
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
バハマの解決策は正しいです。ただし、これを機能させる唯一の方法は、NAT に関与する 2 つ (この場合は eth1 と wlan0) だけでなく、システム内のすべてのインターフェースの rp_filter を無効にすることであることに注意してください。
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush
(このページの最後にある重要な注意事項を参照してください:Advanced Routing Howto -- そこに投稿されたリンクはもう存在しませんが、ウェイバック マシンで見つけました)