GNU/Linux >> Linux の 問題 >  >> Linux

Linux –宛先ポートに基づいて異なるインターフェースでトラフィックを出力しますか?

私の質問は基本的に、特定のインターフェイスで特定のアウトバウンドトラフィックのみを許可することと同じです。

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

しかし、それもうまくいきませんでした。だから私はここで立ち往生しています。何か提案はありますか?

承認された回答:

あなたは近くにいます。

アプリケーションがリターントラフィックを認識しない実際の理由は、カーネルに組み込まれているIPスプーフィング保護が原因です。つまり、リターントラフィックはルーティングテーブルと一致しないため、ドロップされます。これを修正するには、次のようになりすまし保護をオフにします。

sudo sysctl net.ipv4.conf.wlan0.rp_filter=0

しかし、私はそれをお勧めしません。より適切な方法は、代替ルーティングインスタンスを作成することです。

  1. マークが必要です。保管してください。
  2. ソースNATも必要です。
  3. 最終的な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

Linux
  1. LinuxでSSHポートを変更する方法

  2. Linux – Ps Lstartの出力が変更されましたか?

  3. Linux – Linuxのオブジェクトファイルのフォーマットは異なりますか?

  1. Linux – Raspberrypiシリアルポート?

  2. Linux –異なるLinux / UNIXカーネルは交換可能ですか?

  3. Linux 時間コマンドの例

  1. Linuxでのポートの使用を確認する

  2. Linux での tee コマンドの例

  3. 宛先ポートを定義する Linux SCP