私の問題は基本的に特定のインターフェイスでは、特定のアウトバウンドトラフィックのみを許可する。
eth1
2つのインターフェース(10.0.0.2)と(192.168.0.2)がありますwlan0
。私のデフォルトパスはですeth1
。すべてのhttpsトラフィックが通過したいとしましょうwlan0
。他の質問で提案されたソリューションを使用すると、httpsトラフィックは通過しますが、wlan0
まだ送信元アドレスは(10.0.0.2)ですeth1
。ゲートウェイがアドレスをルーティングできないため、wlan0
応答は返されません。最も簡単な方法はアプリケーションでバインディングアドレスを正しく設定することですが、この場合は適用されません。
私の考えでは、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受信にもかかわらず、アプリケーションがSYNパケットを再送信するため、アプリケーションで終了しない可能性があります.
だから私は受信アドレスも書き換える必要があるかもしれないと思いました。
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
しかし、それも動作しません。だから私はここに閉じ込められています。どんな提案がありますか?
ベストアンサー1
あなたは近いです。
アプリケーションが戻りトラフィックを表示できない実際の理由は、カーネルに組み込まれたIPスプーフィング保護によるものです。つまり、戻りトラフィックがルーティングテーブルと一致しないため、破棄されます。次のようになりすまし防止をオフにしてこの問題を解決できます。
sudo sysctl net.ipv4.conf.wlan0.rp_filter=0
しかし、私はそれをお勧めしません。より適切なアプローチは、代替ルーティングインスタンスを作成することです。
- マーキングが必要です。取る。
- ソースNATも必要です。
- 最後のDNATは不要なので削除しても構いません。
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