ブリッジングと iptables SNAT の競合

ブリッジングと iptables SNAT の競合

私はここでセットアップに取り組んでおり、1 つの小さな例外を除いて動作しています。

ブリッジの片側にあるデバイスがインターネットに SNAT されません。


図 / 概要:

                Primary_Network (Site_A)
                        |
                        |
Internet ------- Linux_Bridge_GW (GW)
                        |
                        |
                 Secondary/CoLo Site (Site_B)

セットアップは次のとおりです。

  1. Site_A にはすべての運用サーバーおよびワークステーションがあります。
  2. Site_B には、フェイルオーバーしてインターネット向けのサービスを提供するサーバーのセットがあります。
  3. GW には、トランク化され、適切な VLAN トラフィックを伝送する 2 つのインターフェイスがあります (サイト間のトラフィックのレイヤー 2 伝播を許可します) //これはすべて正常に動作します。
  4. 発生している問題は、Site_B のホストのデフォルトの GW が Site_A (同じサブネット) にあり、GW に渡される VLAN 上の IP がないことです。
  5. Site_A のすべてのホストは問題なくインターネットにアクセスできます。
  6. GW には、インターネット宛てのトラフィック専用のサブネット上のアドレスがあります。(これは、Websense が不要なトラフィックを解析しなくて済むようにするためです。この VLAN は、Websense が配置されているスイッチのモニター ポートのソースとして使用します)。

何が起こっているのか、私はこう考えています:

  1. パケット/フレームは、インターネット宛てに Site_B の physdev に到着します。
  2. カーネルはパケットを確認し、ブリッジの反対側にあるそのホストのデフォルトの GW に転送します。
  3. Site_A (コアネットワークのデフォルト GW を含む) は、パケットが不明なホスト宛てであることを認識するため、それをデフォルト GW (インターネットに接続されているため Linux ブリッジ) に送信します。
  4. カーネルは「こんにちは、以前に見たことがあります」と認識し、パケットに対して SNAT を実行せず、パケットをインターネットに送信してブラックホール化します。

なぜそれが起こっていると思うか:

  1. インターネットに接続された NIC 上の tcpdump には、プライベート アドレスを送信元としてインターフェイスから送信されるパケットが表示されます。

私が望むこと:

  1. パケットを SNAT します。
  2. 以下のようなものがあれば最高です
    • パケットはSite_Bから到着する
    • カーネルは、パケットが自分自身またはプライベートアドレス宛ではないことを認識する
    • カーネルは「OK、インターネットに接続しようとしているので、はるか遠くにある通常のデフォルト GW に転送するのではなく、このインターフェイスに送信します」と言います。
    • パケットはインターネットから入ってきて、宛先のホストがどのサイトにあるかに応じて適切なブリッジ physdev から送信されます。

答え1

パケットがブリッジされている場合、当然ながら iptables はそれを認識できません。

解決策は? ebtables を使用してインターネットへのパケットをマシンにリダイレクトし、SNAT 処理が行われるようにします (MAC マングリングには -j REDIRECT を使用します)

関連情報