Networking

設置多個子域以分隔在單個主機上執行的 VM 的最簡單方法

  • August 14, 2012

問題:

我計劃在單個 centos 主機伺服器(很可能使用 KVM)上設置幾個虛擬化的 centos、rhel 或 ubuntu 客戶機。每個來賓 VM 都在執行一個 webapp 的實例 + 一些其他服務/協議,並且每個來賓 VM 都需要從主機外部在任何開放埠上訪問,就好像它們每個都是一個單獨的 DNS 盒子一樣。

我(顯然)在網路技術/配置方面很弱,所以我只是想找到這個問題的第一個邊緣,即。我需要研究的主要方法才能在此立足。如果您願意,網路配置“虛擬碼”。:)

例子:

假設我擁有域名 foo.com。

我有一台物理 CentOS 機器 DNS 為 guest.foo.com。

在這台物理主機上,我執行了三個虛擬機。我希望來賓虛擬機可以通過 1.guests.foo.com、2.guests.foo.com 和 3.guests.foo.com 訪問。來賓虛擬機執行 centos、rhel 和 ubuntu 發行版。

每個VM都需要響應任何(本地開放的)埠,不僅僅是http流量,還有ssh連接和git:協議操作。

我從哪裡開始,最優雅的方法是什麼?大致來說,主人和客人至少需要設置什麼才能使其正常工作?

筆記:

隨著我了解更多,我會更新問題文本+評論。

除非您每個 VM 至少有 1 個公共 IP,否則您不能讓它們響應“任何”開放埠(這意味著您需要將來自主機系統公共 IP 上的特定埠的請求 NAT 轉換為 VM 的內部 IP)。假設您只有 1 個公共 IP,例如。2.3.4.5 並且在主機上配置。現在,您可以將來自埠 80 的請求重定向到 1 個 VM,將來自 443 的請求重定向到另一個 VM,並將來自任何其他埠的請求重定向到您選擇的任何 VM,但總而言之,您將在 IP 上分配 65530 個可用埠和將它們路由到您的虛擬機,因此任何特定的虛擬機都不能在另一個虛擬機正在偵聽的埠上偵聽。

如果您確實有多個公共 IP(每個虛擬機至少 1 個),您可以為虛擬機 IP 創建 DNS 記錄。

在多 IP 設置中,您應該有一個小的公共子網,例如 2.3.4.0/28。此網路包含以下可用 IP:

  1. 2.3.4.1
  2. 2.3.4.2
  3. 2.3.4.3
  4. 2.3.4.4
  5. 2.3.4.5
  6. 2.3.4.6

2.3.4.0 是網路 IP,不可用,2.3.4.7 是網路的廣播 IP。現在在這種方法中,通常第一個 IP (2.3.4.1) 用作其餘子網的網關,即。您的 ISP 或 DataCenter 將 2.3.4.0/8 的路由與 2.3.4.1 作為其防火牆/路由器中的下一跳。現在所有來自 Internet 的對 2.3.4.0/8 中任何 IP 的請求都會到達 IP 為 2.3.4.1 的機器。因此,合乎邏輯的做法是在您的主機上擁有此 IP。

現在您可以採用兩種方法:

  1. 將 VM 機器網路介面橋接到具有 IP 2.3.4.1 的主機介面,並在其橋接介面上為 VM 提供 IP 2.3.4.2、3 和 4。
  2. 在虛擬機上有一個僅限主機的網路,例如。192.168.10.0/24 在主機虛擬介面上的 IP 為 192.168.10.1,在 VM 的介面上為 192.168.10.2-4。然後您可以將來自 2.3.4.X 的 NAT 請求發送到 192.168.10.X。

在這兩種情況下,您需要的 DNS 記錄如下所示:

1.guests.foo.com 2.3.4.2 2.guests.foo.com 2.3.4.3 3.guests.foo.com 2.3.4.4 等

希望這對這個問題有所啟發。

引用自:https://serverfault.com/questions/417501