私の質問は以下の質問に似ていますが、次のスレッドでは答えられない小さな注意事項があります。
宛先ポートに応じてさまざまなインターフェイスにトラフィックを出力
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のみを使用しているのかわかりません。