KVM 主機中使用 iptables 進行虛擬網絡

KVM 主機中使用 iptables 進行虛擬網絡

我正在設計一個基於 Linux 的設備,並希望將 KVM 用於虛擬化層。該系統有 3 個虛擬機,它們以非常特定的方式互連。我得到的 fag 資料包圖看起來像這樣...

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

這基本上反映了資料流 - 前端有一個 Web 伺服器,後面有一個後端伺服器,側面有一個輔助服務。由於互聯網鄰近等原因,A 和C 必須位於「獨立」網路上。系統日誌伺服器之類的。類似地,對於ssh 訪問,我們需要B 上的連接埠轉送之類的東西。時,意味著在 B 完成之前我們不能開始建造 A 或 C。

所以我正在考慮用這樣的東西讓一切變得更加混亂:

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

因此,應用程式的AB 和C 之間的資料流基本上是相同的(但此處繪製為平面),我們向連接到另一個橋的每個虛擬機器添加第二個管理網路卡,該橋在主機上也有一個介面(a、b 和c) 。然後在這些虛擬主機介面和外部世界之間使用 iptables 和轉發 (d),以確保雖然所有電腦都可以直接存取環境中較低的外部服務,但它們不能以意味著虛擬機器受損的方式相互訪問A 更大程度上不會降低安全性。我可能可以在新增中使用 ebtables 和單一網橋,但我認為 A 和 C 仍然位於同一子網中,這看起來太微妙了。

公平地說,管理圖上的事物看起來是什麼樣子以及事物的實際技術可信度(因此是「獨立」與獨立)之間存在著重要的角度!簡單性也是一個巨大的動力,但代價是透過第二個虛擬機器丟棄所有額外流量感覺非常不舒服,並且在時間敏感的環境中可能會增加 5 到 10 分鐘的建置時間

所以本質上,我瘋了嗎?

謝謝

克里斯

答案1

不,不是瘋子。但我確實認為你讓這聽起來比實際需要的更困難。你的問題我看了好幾遍了,還是有些地方不懂。機器C實際上做了什麼?為什麼你那裡需要它?機器A和B做什麼?

無論如何,如果我按照您的第一個圖表進行操作,那麼您所需要做的就是應用簡單的 IP 路由,就可以了。如果機器 C 與 B 形成一個單獨的子網路(以便與其他機器分開),那麼為了到達它,必須如下設定路由:

  • on dbs:透過 B 路由所有流量(這是預設網關,它知道如何路由
  • 流量到 C,因為它是直接連接的)。
  • on www:透過 A 路由 C 的所有流量(只有當 A 不是預設閘道時才需要)
  • 在 A 上:透過 B 路由 C 的所有流量(僅當 B 不是預設閘道時才需要)
  • 在 C 上將 B 設定為預設閘道。

路由到位後,您可以添加防火牆以確保流量僅流向您希望流向的地方。除非您對此類事情有經驗,否則我建議先啟動路由,然後添加防火牆(一次一步,這樣您總是知道是什麼破壞了它。因為您會破壞它)。

相關內容