同じアップストリームゲートウェイを使用するさまざまなインターフェイスを介したゲートウェイプロキシトラフィックのルーティング

同じアップストリームゲートウェイを使用するさまざまなインターフェイスを介したゲートウェイプロキシトラフィックのルーティング

私の質問は以下の質問に似ていますが、次のスレッドでは答えられない小さな注意事項があります。

宛先ポートに応じてさまざまなインターフェイスにトラフィックを出力

https://serverfault.com/questions/648460/load-balancing-network-traffic-using-iptables

iptables --set-mark - 異なるインターフェイスを介して異なるポートをルーティングします。

特定のインターフェイスでは、特定のアウトバウンドトラフィックのみを許可する

3つのネットワークデバイスがあります:eth0(ルーター)、eth1(インターネットgw1に接続)、eth2(インターネットgw2に接続)

eth0 -> eth1(dhcp経由のIP) - > gw1(192.168.0.1ネットマスク255.255.255.0) - >インターネット

eth0 -> eth2(dhcp経由のIP) - > gw2(192.168.0.1ネットマスク255.255.255.0) - >インターネット

私はルータでPolipoを実行しており、polipoに接続しているすべての人のトラフィックがeth2を通過したいと思います。他のすべてのトラフィックは eth1 経由でルーティングされます。

問題は、eth1とeth2の両方がDHCPを介してIPアドレスを取得することです。 gw1 は gw2 と同じです。これはインフラストラクチャの一部であり、どちらも同じIPアドレスを持ちます(たとえば、gw1とgw2はどちらも192.168.0.1、ネットマスクは255.255.255.0)。

上記のスレッドのすべての答えは、ゲートウェイトラフィックを分離/表示するためにさまざまなサブネットとIPアドレスを参照します。私が知っている限り、それはオプションではありません。 gw1 / gw2で何も変更せず、eth1とeth2に静的IPアドレスを含めずにこれを行う必要があります。可能ですか?

答え1

申し訳ありません。実際の例を提供することはできませんが、必要なものはnetfilterを使用して可能でなければなりません。連絡先トラックターゲット。通常のMARKとの違いは、CONNTRACKは接続内のすべてのトラフィックを表示し、MARKはパケットのみを表示することです。したがって、アイデアは次のようになります。

  • 各インターフェイスを介して着信接続に異なる番号(たとえば、gw1の場合は「1」、gw2の場合は「2」)でラベルを付けます。
  • 「ip Rule add fwmark 1 Lookup 101」および「ip Rule add fwmark 2 Lookup 102」を使用すると、表示されている 1 と表示された 2 が異なるルーティングテーブルを通過できるようになります。
  • 各テーブルに対して異なるデフォルトパスを作成します。 gw1 の場合は「192.168.0.1 dev eth1 テーブル 101 による ip パス追加のデフォルト値」、gw2 の場合は「192.168.0.1 dev eth2 テーブル 102 による ip パス追加のデフォルト値」

eth1を介した接続はfwmark 1で表され、これはすべてのパケット(受信と発信)によって維持されます。 fwmark 2を使用してeth2を介した接続でも同様です。したがって、ファイアウォールは常に応答に使用するインターフェイスを知っています。ファイアウォールまたはその背後にあるホストから開始された接続は、デフォルトのインターフェイス/ゲートウェイとして選択したインターフェイス/ゲートウェイを通過します。

おそらく、事前にパッケージ化されたファイアウォールソフトウェアを使用すると、これを簡単に実行できます。桟橋の壁。複数のISPをサポートしていますが、CONNTRACKを使用しているのかMARKのみを使用しているのかわかりません。

関連情報