Proxmox VE建立虛擬區域網路 (VLAN) 方案 (1) 方案說明
這次是繼上次的伺服器虛擬化技術研究之後,特別針對Proxmox VE的虛擬網路建立深入鑽研的進階研究。這篇預設的讀者是對伺服器虛擬化技術Proxmox感興趣,也具備網路相關概念,這樣比較容易知道我在講些什麼。由於Proxmox VE是在Debian環境下運作,所以熟悉Linux──特別是Debian──當然是必備條件。
由於內容頗多,我分成三篇來撰寫,各別是(1) 方案說明、(2) 環境配置、(3) 操作說明。這篇是介紹這個方案的背景、目標、環境,並簡單介紹Proxmox VE的網路模型。
Proxmox VE建立虛擬區域網路(VLAN)方案目錄:
方案背景
之前我比較了多種不同伺服器虛擬化技術,目前採用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更容易使用。
方案目標
總結以上背景需求,這一篇方案想要達到的目標有以下四點:
- 僅使用一台實體機器與一個對外連線的IP。
實體機器當然是架設Proxmox VE。
在此篇介紹中,對外IP使用的是192.168.11.13。 - Proxmox VE中建立的虛擬機器皆可使用區域網路,透過DHCP或靜態設定配置區域網路的IP。
在此篇介紹中,區域網路的範圍是10.10.10.0/24,10.10.10.0到10.10.10.253都可以配置,而10.10.10.254則是配給實體機器的虛擬交換器。 - 可透過網頁管理伺服器。
Proxmox VE本身就提供網頁端管理,而網路路由設定的部份是以Webmin為主。 - 可使用反向代理伺服器(reverse proxy)。
可以透過FQDN直接連線到虛擬機器。在此篇介紹中,我設定了一個FQDN:joomla.example.com,欲連線到架設Joomla的虛擬機器。
這次的目標有點多,又要虛擬機器方便配置,又要虛擬機器方便架站,因此要講的東西也挺多的。如果哪些細節我講錯了,請不吝指正。
環境架構說明
目標方向比較抽象,現在來說明這個方案的具體架構。
首先,跟網際網路(internet)連線的是實體電腦Proxmox VE。在此篇介紹中,它的對外IP是192.168.11.13,連線網卡代號eth0。
為了能夠讓它提供網頁管理伺服器的能力,它本身有Apache2與Webmin,前者管理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。
以下表格比較兩種網路類型的差異:
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)功能。網路綁定是利用兩張實體網路卡分散網路流量的技術,並不是本篇主要探討的對象。