KVMホストでのiptablesによる仮想ネットワーク

KVMホストでのiptablesによる仮想ネットワーク

私は Linux ベースのアプライアンスの設計に取り組んでおり、仮想化レイヤーに KVM を使用することを考えています。システムには、非常に特殊な方法で相互接続された 3 つの VM があります。私が受け取った fag パケット図は次のようになります...

       www
        |
+------ | ------------+
|       |             |
|      |A|            |
|       |             |
|       |             |
|      |B|-----|C|    |
|       |             |
+------ | ------------+
        |
       dbs

これは基本的にデータ フローをミラーリングします。つまり、前面に Web サーバーがあり、その背後にバックエンド サーバーがあり、サイドに補助サービスがあります。インターネットの近接性などにより、A と C は「別の」ネットワーク上になければなりません。これはシステムの大部分には適していますが、これは VM A と C のすべての管理トラフィックが外部の syslog サーバーなどに到達するために VM B を通過する必要があることを意味します。同様に、ssh アクセスの場合、B でポート転送のようなものが必要になります。このトラフィックの量はアプリケーション トラフィックに比べると最小限ですが、特に kickstart などを使用してこれらの VM を自動的に構築すると、B が完了するまで A または C の構築を開始できないため、かなりひどい感じがします。

そこで、私は次のような方法ですべてをさらに混乱させることを考えます。

     www
      |
+---- | ----------------------+
|     |                       |
|     |       +-----------+   |
|     |       |           |   |
|    |A|-----|B|-----|C|  |   |
|     |       |       |   |   |
|     |       b       |   |   |
|     +-----a x c-----+   |   |
|             d           |   |
|             |           |   |
+------------ | --------- | --+
              |           |
             mgt         dbs

したがって、アプリの AB と C 間のデータ フローはほぼ同一 (ただし、ここではフラットに描画) であり、ホスト上にインターフェイスを持つ別のブリッジに接続された各 VM に 2 番目の管理 NIC を追加します (a、b、c)。次に、これらの仮想ホスト インターフェイスと外部の世界 (d) の間で iptables と転送が使用され、すべてのマシンが環境の下位にある外部サービスに直接アクセスできる一方で、VM A が侵害されてもセキュリティが大幅に低下しないような方法ではマシン同士がアクセスできないようにします。追加機能では ebtables と単一のブリッジを使用することもできますが、A と C が同じサブネット上にあるため、見た目がわかりにくいと思います。

管理上の図の見え方や実際の技術的な信頼性(したがって「分離」と「分離」)には重要な角度があることを指摘するのは妥当なことです。シンプルさも大きな動機ですが、2 番目の VM を介してすべての追加トラフィックを投げ込むという代償は、本当に不快に感じます。また、時間に敏感な環境では、ビルドに 5 分から 10 分ほど追加される可能性があります。

つまり、私は頭がおかしいのでしょうか?

ありがとう

クリス

答え1

いいえ、おかしくはありません。しかし、あなたはこれを必要以上に難しく考えすぎているように思います。あなたの質問を何度も読みましたが、まだ理解できないことがいくつかあります。マシン C は実際何をするのでしょうか? なぜそこに必要なのでしょうか? マシン A と B は何をしますか?

いずれにせよ、最初の図に従うと、単純な IP ルーティングを適用するだけで問題ありません。マシン C が B と別のサブネットを形成する場合 (他のマシンから分離されるため)、そこに到達するには、ルーティングを次のように設定する必要があります。

  • dbs: すべてのトラフィックをB(デフォルトゲートウェイ)経由でルーティングします。
  • (C へのトラフィックは直接接続されているため)。
  • www: C のすべてのトラフィックを A 経由でルーティングします (A がデフォルト ゲートウェイでない場合にのみ必要)
  • A で: C のすべてのトラフィックを B 経由でルーティングします (B がデフォルト ゲートウェイでない場合にのみ必要)
  • C では B をデフォルト ゲートウェイとして設定します。

ルーティングが設定されたら、ファイアウォールを追加して、トラフィックが希望する場所にのみ流れるようにすることができます。この種の作業に慣れていない場合は、最初にルーティングを開始してからファイアウォールを追加することをお勧めします (一度に 1 ステップずつ実行して、何が問題なのかを常に把握できるようにします。問題は必ず発生します)。

関連情報