:::

Proxmox VE建立虛擬區域網路 (VLAN) 方案 (1) 方案說明

proxmox_logo 1 introduction

這次是繼上次的伺服器虛擬化技術研究之後,特別針對Proxmox VE的虛擬網路建立深入鑽研的進階研究。這篇預設的讀者是對伺服器虛擬化技術Proxmox感興趣,也具備網路相關概念,這樣比較容易知道我在講些什麼。由於Proxmox VE是在Debian環境下運作,所以熟悉Linux──特別是Debian──當然是必備條件。

由於內容頗多,我分成三篇來撰寫,各別是(1) 方案說明(2) 環境配置(3) 操作說明。這篇是介紹這個方案的背景、目標、環境,並簡單介紹Proxmox VE的網路模型。

Proxmox VE建立虛擬區域網路(VLAN)方案目錄:

  1. 方案說明
  2. 環境配置
  3. 操作說明

方案背景

之前我比較了多種不同伺服器虛擬化技術,目前採用Proxmox VE作為架設伺服器的虛擬環境。然而大部分的伺服器虛擬化技術在網路架構上都比較單純,都只提供橋接模式(Bridged Network)或是虛擬交換器(Virtual Switch,類似的名詞很多)。前者是讓虛擬機器(GuestOS)的網路有如實體機器(HostOS)一樣,暴露在同一網段中;後者則是虛擬機器與實體機器、虛擬機器與虛擬機器之間連線用,由實體電腦模擬出來的虛擬交換器。Proxmox VE使用的網路模型比較特殊,有venet跟veth兩種,但其實用起來也跟前面講的兩種是很類似的。

在橋接模式中,虛擬機器也跟實體機器一樣,需要一個能夠對外連線的IP。在IP有限的環境中,我實在不想讓每台虛擬機器都佔用IP。因此我之前是將Proxmox VE架設在區域網路中,讓它透過一台路由器連線到網際網路。這樣子對外的IP只需要配給路由器,可以達到節省IP的目的。但是相對的,這也必須配置兩台實體機器:Proxmox VE伺服器,以及路由器。

反觀桌面端虛擬機器,如VirtualBox,它們都有提供多樣化的網路架構。最實用的莫過於NAT模式(Network Address Translation,網路地址轉換),它可以在同一台實體機器中,將指定連接埠配置給虛擬機器,達到一個對外IP(配給實體機器)、一台機器(實體機器)的目的。

Proxmox VE能夠架設成NAT的網路架構嗎?之前我在摸索VMware ESXi的時候也有類似的困擾。VMware ESXi是閹割的Linux,大多功能都無法調整。但是開放原始碼的Proxmox VE可就沒這種限制,要設定iptables防火牆、要架DHCP伺服器、或甚至是配置反向代理伺服器(Reverse Proxy),什麼都可以自己來。

因此,這次我打算繼續深入鑽研Proxmox VE的網路架構,讓Proxmox VE更容易使用。

方案目標

總結以上背景需求,這一篇方案想要達到的目標有以下四點:

  1. 僅使用一台實體機器與一個對外連線的IP。
    實體機器當然是架設Proxmox VE。
    在此篇介紹中,對外IP使用的是192.168.11.13。
  2. Proxmox VE中建立的虛擬機器皆可使用區域網路,透過DHCP或靜態設定配置區域網路的IP。
    在此篇介紹中,區域網路的範圍是10.10.10.0/24,10.10.10.0到10.10.10.253都可以配置,而10.10.10.254則是配給實體機器的虛擬交換器。
  3. 可透過網頁管理伺服器。
    Proxmox VE本身就提供網頁端管理,而網路路由設定的部份是以Webmin為主。
  4. 可使用反向代理伺服器(reverse proxy)。
    可以透過FQDN直接連線到虛擬機器。在此篇介紹中,我設定了一個FQDN:joomla.example.com,欲連線到架設Joomla的虛擬機器。

這次的目標有點多,又要虛擬機器方便配置,又要虛擬機器方便架站,因此要講的東西也挺多的。如果哪些細節我講錯了,請不吝指正。

環境架構說明

20111022 Proxmox   Webmin 架構圖

目標方向比較抽象,現在來說明這個方案的具體架構。

首先,跟網際網路(internet)連線的是實體電腦Proxmox VE。在此篇介紹中,它的對外IP是192.168.11.13,連線網卡代號eth0

為了能夠讓它提供網頁管理伺服器的能力,它本身有Apache2Webmin,前者管理Proxmox VE虛擬機器,後者管理伺服器網路環境。然後為了讓內部的虛擬網路能夠方便連線,Proxmox VE還架設dhcped-server提供DHCP服務,以及利用pound實作反向代理伺服器的功能。

Proxmox VE中虛擬機器網路是連線到虛擬的交換器,代號vmbr0。作為內部網路的閘道(gateway),vmbr0的IP是10.10.10.254。而虛擬機器是以veth模式連線到vmbr0,設定區域網路IP的範圍為10.10.10.0/24。其中一台虛擬機器架設Joomla,其區域網路IP為10.10.10.1。

軟體說明

上述各種軟體的說明與版本記錄如下:

  • Proxmox VE 1.8-60:Proxmox Virtual Environment,伺服器虛擬化方案。Proxmox VE網站可以找到它的ISO檔案,檔案名稱為proxmox-ve_1.8-60.iso。它的作業系統是Debian 5。在寫作本文的時候,Proxmox VE已經出到1.9了。
  • Webmin 1.570:Linux知名的網頁管理工具。(SkyDrive備份)
  • dhcpd-server3:提供DHCP服務。
  • pound 2.4.3:提供反向代理伺服器的功能。
  • Joomla:在本篇中,它只是一個網頁服務而已。其實是什麼網站都無所謂啦。
名詞解釋

在本篇介紹與相關文章中,有兩個名詞需要特別說明:

  • 實體機器(Physical Machine):在虛擬機器環境中,它叫做Host OS,又稱為主端電腦。在本篇介紹中,它主要是指架設Proxmox VE的實體機器。
  • 虛擬機器(Virtual Machine,簡稱VM):在虛擬機器環境中,它叫做Guest OS,又稱為客端電腦。Proxmox VE的虛擬機器技術有很多種,其中以OpenVZ技術虛擬的機器又稱為Container(容器,簡稱CT)。儘管名詞有點複雜,但它們都是指在Proxmox VE中架設的虛擬機器。

至於網路(Network)方面比較複雜,我會在下節說明Proxmox VE的網路模型。

有時候我會將Proxmox VE打成Proxmox,這是筆誤。實際上Proxmox是一家公司,開發Proxmox VE這個產品,他們是有所區別的。

Proxmox VE的網路模型 (Network Model)

這邊的介紹是參考自Proxmox VE的Network Model來撰寫。

在預設的情況中,Proxmox VE使用的是橋接網路模型(bridged networking model)。橋接器(bridge)就像是實體網路交換器(switch)一樣,不過是透過Proxmox VE以虛擬出來的軟體。所有的虛擬機器都可以共用一個橋接器,配置對外TCP/IP,透過該橋接器連上網路。

Proxmox VE提供虛擬機器兩種網路類型:venet與veth。venet (Virtual NETwork)只有OpenVZ的容器虛擬化機器可以使用,是OpenVZ的預設選項,可以直接透過指令配置虛擬機器的IP;veth (Virtual eTHernet)則是OpenVZ跟KVM都能使用,是KVM的預設選項,可讓虛擬機器接上虛擬交換器藉以連到網際網路,但是必須手動進入虛擬機器設定網路IP。

以下表格比較兩種網路類型的差異:

veth跟venet的差異
Feature
特徵
veth venet
可使用的虛擬機器類型 OpenVZ
KVM
OpenVZ
可透過網頁管理
直接配置網路IP
No Yes
MAC address
網卡位置
Yes No
Broadcasts inside CT
封包會在虛擬機器間廣播
Yes No
Traffic sniffing
封包攔截
Yes No
Network security
網路安全
Low High
Can be used in bridges
可否用於橋接器
Yes No
IPv6 ready
可否使用IPv6
Yes Yes
Performance
效能
Fast Fastest

資料來源參考自:Differences between venet and veth

為了達到NAT複雜的虛擬網路架構,本篇主要談論的虛擬機器網路類型都是指veth,而虛擬交換器則是用內建的vmbr0。詳細的設定,下一篇將會繼續深入說明。

Proxmox VE除了提供上述的虛擬區域網路(VLAN,IEEE 802.1q)之外,還有網路綁定/聚合(networking bounding/aggregation)功能。網路綁定是利用兩張實體網路卡分散網路流量的技術,並不是本篇主要探討的對象。