:::

pfSense 實作反向代理伺服器(Reverse Proxy)

pfSense 實作反向代理伺服器(Reverse Proxy)

2011-08-12_182742 lighttpd

最近在研究用pfSense(1.2.3版)當做路由器架設內部網路,然後利用FQDN(Fully Qualified Domain Name)透過pfSense連到內部網路中的網頁伺服器的方法。

最簡單的作法是連接埠轉遞(port forward),可是網址帶個連接埠號就是不好看。在此介紹在pfSense中設定Lighttpd的反向代理伺服器(Reverse Proxy),以FQDN連接到內部網路伺服器的作法。這方法只能適用於HTTP跟HTTPS,其他通訊協定就要另外想辦法了。


網路拓蹼狀況說明

網路拓蹼

在介紹原理跟作法之前,必須先讓人搞清楚我現在的網路拓蹼狀況。上圖是目前的網路拓蹼圖。中間的伺服器是用pfSense架設,主機名稱為pfSense,對外網卡的IP是140.119.61.254,這也是我唯一一個可以使用的公用IP(public IP)。對內的內部網卡是192.168.1.1,提供內部區域網路連線到網際網路。內部區域網路中有兩台甚至更多的伺服器,其中一台主機名稱為joomla,內部區域IP為192.168.1.20,執行我架設的joomla網站

現在我跟DNS註冊一個FQDN:joomla.example.com,對應到公用IP 140.119.61.254,也就是pfSense主機。而我要藉由設定pfSense作為反向代理伺服器,讓joomla.example.com連到joomla主機。

再回到上面的網路拓蹼圖,圖片上方是網際網路(internet)的電腦,當他想要連結到「http://joomla.example.com」時,實際上是會先連到pfSense主機,然後我們要想辦法讓pfSense主機再去存取Joolma主機,以達到我們的目標:用FQDN連到pfSense伺服器背後內部區域網路中的網頁伺服器。

達到這個目標的方法很多,其中一個方法就是將pfSense主機設置成反向代理伺服器。


反向代理伺服器(Reverse Proxy)

一般常聽到的代理伺服器(Proxy),像是在家裡要用圖書館的資料庫要先設定代理伺服器的這種,指的都是正向代理伺服器(Forward Proxy)。其運作方式為:客戶端(client)跟代理伺服器要求要下載的資料,代理伺服器先去抓好,然後再回傳給客戶端。

而本篇討論的網路拓蹼中,目標是要讓網際網路的電腦連到內部區域網路的伺服器,這個作法則是透過中間的反向代理伺服器來進行。反向代理伺服器的運作方式一樣是根據網際網路上客戶端的請求,從內部區域網路中的伺服器抓取資料,然後回傳給客戶端。

反向代理伺服器的好處有:

  1. 當網路被隔離外部與內部時,可以讓外部電腦取用內部伺服器的網站。
  2. 可以直接用FQDN來連接內部伺服器,如:http://joomla.example.com;不需要像連接埠轉遞還附帶額外的連接埠,如:http://joomla.example.com:64080/
  3. 代理伺服器可以進行快取與負載平衡的機制。

詳細的內容請參考聯成電腦的使用 Reverse Proxy代理服務

然而,跟NAT的連接埠轉遞相比之下,反向代理伺服器設定比較麻煩,還有一些額外的速度考量等缺點。

在本篇要討論的情況中,pfSense就是扮演反向代理伺服器的角色。

架設反向代理伺服器的工具很多種,網路上大家常使用的工具為SquidApache。pfSense雖然可以安裝Squid,但是Squid設定反向代理伺服器的配置挺複雜的,我沒有仔細研究。Apache的反向代理伺服器設定就很簡單,但是pfSense預設不是用Apache執行網頁伺服器,而是用Lighttpd

Vadim Tkachenko有介紹Lighttpd設定反向代理伺服器的方法,但在pfSense中操作Lighttpd的方式有點不同。在此我主要介紹的是在pfSense(1.2.3版)中設定Lighttpd作為反向代理伺服器的過程。


Lighttpd設定反向代理伺服器

現在我們要設定Lighttpd作為反向代理伺服器,而我們有個FQDN:joomla.example.com,指向pfSense主機的IP。而實際上架設joomla的主機內部IP為192.168.1.20。這些設定必須事先配置好,接下來才能開始設定反向代理伺服器。

1. 開啟pfSense的SSH連線

我大部分的操作都是用SSH進行,遠端操作比起在主機前面還要方便,要編修檔案時也可以用FileZilla以sftp來傳送,所以在此建議打開pfSense的SSH連線。

pfSense開啟SSH連線的設定是在Adcanced中的Secure Shell,請勾選「Enable Secure Shell」,再按下「Save」按鈕儲存。

2. 下載/var/etc/lighty-webConfigurator.conf

你可以利用FileZilla下載該檔案到本機電腦編輯。我一直無法習慣pfSense內建的vi編輯器,還是下載回來編輯,然後再上傳回比較方便。

3. 加入反向代理伺服器設定

接著我們編輯lighty-webConfigurator.conf這個檔案。

首先是要先額外載入mod_proxy模組,請在server.modules參數中加入"mod_proxy”。請注意以下紅字的部份,中間要相隔逗號:

## modules to load
server.modules = (

"mod_access", "mod_accesslog",
"mod_fastcgi", "mod_cgi",
"mod_proxy"

)

然後在檔案的最後插入反向代理伺服器的設定:

#### Reserve Porxy
$HTTP["host"] == "joomla.example.com" {
cache.enable = "false"
proxy.server = ( "" => ( ( "host" => "192.168.1.20") ) )
}

必須要說明的是cache.enable設定。在本篇當中,反向代理伺服器的目的不在於加速,而只是在於連結外網與內網而已。因此這邊是不使用快取,避免讀取到過期的舊檔案。

詳細的代理伺服器設定請參考Lighttpd的mod_proxy說明

修改之後,請再上傳到/var/etc/目錄,覆寫原本的lighty-webConfigurator.conf檔案。

4. 重新啟動Lighttpd服務

pfSense主機上的Lighttpd服務要重新啟動,剛剛修改的設定才會生效。但是pfSense的Lighttpd不知道是怎麼執行的,我找不到restart選項來用。所以在此我是關閉既有的Lighttpd,再開啟Lighttpd服務,來達到重新啟動的效果。

請以SSH連接到pfSense主機,然後用以下步驟來重新啟動Lighttpd。

4.1 關閉執行中的Lighttpd

pfSense預設開啟時會執行Lighttpd,我們要先把它關掉。

查詢執行中的Lighttpd的指令是ps,執行之後的結果如下,請注意紅字的執行緒編號。這個指令每次執行的結果都不同,執行緒編號也不會相同,請依據你的狀況來取得現在的Lighttpd執行緒編號:

# ps aux | grep light
root 13839 0.0 2.6 5316 3068 ?? S 12:08PM 0:05.15 lighttpd -f /var/etc/lighty-webConfigurator.conf

然後再用kill指令關閉Lighttpd,kill指令後面接的是Lighttpd的執行緒編號:

# kill 13839

這樣就關閉Lighttpd了。

4.2 開啟Lighttpd

開啟Lighttpd的方法如下:

# lighttpd -f /var/etc/lighty-webConfigurator.conf

這樣就重新啟動Lighttpd了。

不過,用kill殺掉執行緒好像會有很多問題,如果可以的話,還是重新啟動pfSense主機,這樣就能確保Lighttpd一定會重新載入。

4.3 測試 joomla.example.com

這樣就設定完成了,請試著用外部網路的電腦連到 joomla.example.com ,看看能不能連接到 joomla主機吧。

討論

反向代理伺服器可以上傳檔案

2011-08-12_202946 phpfilemanager upload 成功

反向代理伺服器看起來只是下載、轉交檔案而已,那麼像是上傳檔案這種要跟伺服器互動的操作,反向代理伺服器可以完成嗎?測試之後是可以的。

我在內部網路伺服器中架設了XAMPPphpFileManager,然後嘗試上傳檔案,結果很順利。

反向代理伺服器效能與速度的考量

由於客戶端瀏覽網站的所有動作都必須經過反向代理伺服器,因此反向代理伺服器的運作效能也不能太差,否則會拖慢網頁速度,這是他的缺點。

不過另一方面,反向代理伺服器也可以考慮設置快取與負載平衡,加快網頁的速度。這部份的設定請參考Lighttpd的mod_proxy說明

只用於HTTP跟HTTPS通訊協定

我這篇主要是用於HTTP通訊協定。

HTTPS的設定有些不同,雖然mod_proxy說明中沒有寫,不過網路上很容易可以找到相關設定說明,例如lighttpd論壇中的SLL trough reverse proxy。我對HTTPS並沒有這麼熟,也沒有急迫需求,所以並沒有動手設定。如果有人設定成功,歡迎留言分享一下作法。

至於其他通訊協定,例如SSH,好像就不是Lighttpd管轄的範圍,必須仰賴其他程式,或是直接設定連接埠轉遞比較快。


結語

網路上pfSense的討論很少提及lighttpd,而pfSense的lighttpd操作也跟一般在FreeBSD上的操作不太一樣,我為此找了好一段時間。上述方法其實並不太漂亮,特別是重新啟動Lighttpd的方法。如果有人對pfSense很熟悉的話,請務必指正我這個錯誤的方法吧!

好,繼續研究pfSense。

(more...)

pfSense 安裝dns-server的方法

pfSense 安裝dns-server的方法

2011-08-09_230254 logo

我最近研究以pfSense架設路由器,並安裝dns-server套件的方法。由於套件語法有點問題,安裝會發生「 Parse error: syntax error, unexpected '&', expecting T_VARIABLE or '$' in /usr/local/pkg/tinydns.inc on line 880 」錯誤。我想到一種方法可以繞過錯誤,雖然作法不是很漂亮,不過還是記錄一下。


pfSense簡介

pfSense是一套具備路由器、防火牆等多功能的網管系統。它是基於FreeBSD維基百科)、可以空機安裝的完整系統,也是開放原始碼可供人自由下載、安裝。pfSense具備網頁管理介面,可直接用瀏覽器控制、監控系統狀況。而且可以安裝各種套件(package)擴充pfSense的功能。

kidz在Mobile01上有好幾篇介紹pfSense安裝與設定的教學,想知道到如何使用pfSense的人可以參考看看。


pfSense安裝dns-server失敗

2011-08-12_161415 package list - draw

我使用的pfSense是1.2.3版。而pfSense的套件之一「dns-server」是搭配TinyDNS軟體修改而成的整合套件,目前版本是1.0.6.14。

2011-08-12_161601 error message

但是安裝dns-server的過程會發生錯誤,套件無法順利安裝。錯誤訊息寫在網頁最下方,有時候會不小心略過。訊息內容為:

Parse error: syntax error, unexpected '&', expecting T_VARIABLE or '$' in /usr/local/pkg/tinydns.inc on line 880

這個意思是,/usr/local/pkg/tinydns.inc的880行程式錯誤。

我下載該程式來檢查,原本的880行附近的程式如下(878行到884行):

/* Uncompress the v6 IP so we have all of the sections we need */
$fullip = explode(":", Net_IPv6::uncompress($ip));

/* Expand even more so we have a digit in every possible place */
foreach ($fullip as & $q) {
$q = sprintf("%04s", $q);
}

foreach裡面多了一個「&」,我以紅字粗體標示,這就是發生錯誤的原因。

修正後878行到884行的程式如下:

/* Uncompress the v6 IP so we have all of the sections we need */
$fullip = explode(":", Net_IPv6::uncompress($ip));

/* Expand even more so we have a digit in every possible place */
foreach ($fullip as $q) {
$q = sprintf("%04s", $q);
}

我把修正後檔案上傳到SkyDrive供人下載,網址如下:

雖然我想把這個錯誤報告回報給pfSense,但是論壇不知為何不能註冊,甚至有人在論壇上已經提過相同的問題了,但還是沒有解決。期待好心人士能夠幫忙反應一下吧。


修正pfSense安裝dns-server

不過光是修正檔案沒有用,這樣還是無法安裝到pfSense中。於是我想到一個替代的方法:在pfSense下載tinydns.inc之後、準備要安裝dns-server之前,將tinydns.inc替換成修正版本。

這樣不是很漂亮,但至少可以讓它安裝成功。而短時間內我也找不到更漂亮的方法了。

以下介紹操作步驟:

1. 下載tinydns.inc修正檔、開啟pfSense的SSH

tinydns.inc的修正檔網址如上所述,請從SkyDrive空間下載。

2011-08-12_171807 ssh

傳送檔案的方法,我使用的是sftp,這要先開啟pfSense的SSH通訊協定才行。設定的位置是在Adcanced中的Secure Shell,請勾選「Enable Secure Shell」,再按下「Save」按鈕儲存。

試著用FileZilla Client之類的軟體以SFTP連線看看,順利的話應該能夠連到pfSense。

2. 準備sftp連線

2011-08-12_162325 upload tinydns.inc - mask

先準備好FileZilla中本機目錄與遠端目錄的路徑。左邊是你的本機目錄,也就是要上傳的tinydns.inc修正檔的位置;右邊則是pfSense檔案系統中存放tinydns.inc的位置, 預設是在/usr/local/pkg目錄底下。

待會就要上傳了,這個視窗先放著待命。

3. pfSense開始安裝套件

2011-08-12_164334 download

回到pfSense的套件列表,並安裝dns-server。

請觀察它的安裝訊息,確定「Additional files… tinynds.inc」訊息已經處理完畢(通常很快,這是第一個下載的檔案),然後馬上進入下個步驟。

4. 上傳修正版tinydns.inc

再回到FileZilla,上傳tinydns.inc。

5. dns-server安裝成功

2011-08-12_172544 installation complated

然後安裝過程就會順利地進行,看到「Installation completed」的訊息,表示安裝已經成功。


使用dns-server

 2011-08-09_231223 DNS Server

如果要設定dns-server,你可以從導覽列「Services」中的「DNS Server」進入。

2011-08-09_231258 DNS Server Setting

設定內容也挺複雜的,我還要研究看看就是了。


結語

pfSense感覺還不錯用,很容易上手。介面其實有簡體中文版本,但這樣子常常會被翻譯術語混淆,所以我個人比較喜歡用英文版。

這個方法不是很漂亮,如果有更好的作法,歡迎大家建議指正,感謝。

(more...)

學校實驗室的伺服器虛擬化方案評比(三):綜合比較

學校實驗室的伺服器虛擬化方案評比(三):綜合比較

5BE1364F-74A0-9288-304C-124E9DD7732Awallpaper

經過前面個別測試安裝六個伺服器虛擬化方案之後,接下來我先綜合比較各個方案的功能,再來決定要選擇哪個方案。


綜合比較

由於評比的時間並不長、使用的功能也沒有很完整地評估,在此我只看成本、虛擬化技術、安裝、管理介面安裝、管理介面操作、虛擬機器網路、虛擬裝置支援等七個面向。

成本

由於我是先以免費或開放原始碼方案來挑選,所以這七個方案基本上都可以免費取得。

其中,下載、安裝之後可以自由使用的是OpenNode、Proxmox VE。它們都是開放原始碼軟體,各基於不同的Linxu發佈版整合而成。

Oracle VM也是可以免費取得、安裝,應該也是不需要輸入認證序號就能使用。

VirtualBox也有OSE(開放原始碼版本),但通常大家用的都是具有VRDP跟USB 2.0支援的普通版本,在商業使用上需要收費,個人及教育用途則沒有任何限制。

VMware ESXi跟Citrix XenServer都要申請免費的序號。其中XenServer每年都要申請一次;ESXi只要輸入一次序號就可以永久使用,但輸入序號後就從60天評估版降低到免費版,功能有所縮減。

虛擬化技術

這幾個伺服器虛擬化方案往往整合了多種虛擬化技術,以因應不同的虛擬化需求。然而,在沒有VT-x / AMD-V硬體虛擬化技術的輔助下,各方案可以支援客端電腦就有很大的差別。

即使沒有VT-x / AMD-V也能進行全虛擬化的VirtualBox以及半虛擬化技術的VMware ESXi(感謝網友指正,關於全虛擬與半虛擬技術詳細可以參考TKG的說明)都可以安裝Windows作業系統,可以支援大多數的作業系統。其中,ESXi是空機安裝特製的伺服器,比起VirtualBox容易受到主端電腦作業系統影響,ESXi的效率較高。

沒有VT-x / AMD-V輔助,只能使用半虛擬化的方案為Citrix XenServer、Oracle VM。在半虛擬化的限制之下,客端電腦也僅能安裝特定版本的Linux而已,而且通常搭配要安裝修改核心的工具才能發揮客端電腦的真正效能。儘管如此,效能還是比全虛擬化還要高些。

OpenVZ技術的容器虛擬化不需要VT-x / AMD-V的輔助,OpenNode、Proxmox這兩個方案也只能製作特定版本的Linux客端電腦。效能運作較高,從虛擬裝置/樣板建立虛擬機器的手續也相當簡單。

反過來說,如果實體機器有VT-x / AMD-V技術支援的話,那麼採用Xen與KVM技術的方案就可以使用全虛擬化,全部就都能安裝Windows作業系統,因此虛擬化技術的差異就不是很大了。

安裝

空機安裝是建立虛擬電腦伺服器的最佳方案,你可以讓主端電腦能夠在預先配置好的最佳狀態中執行虛擬機器。提供空機安裝的方案有VMware ESXi、Citrix XenServer、OpenNode、Proxmox VE、Oracle VM。

大部分的方案也同時提供安裝檔供人安裝於特定作業系統中,VirtualBox是了個人用的桌面虛擬化應用程式,因此僅有提供安裝檔,可以安裝於Windows與多數Linux中。但是由於安裝VirtualBox之前,必須要先準備好作業系統才能安裝Virtual,配置上比較麻煩。

管理介面安裝

一般來說,管理虛擬機器的工作都不會在本機的電腦螢幕上進行,而是由遠端的電腦(通常是Windows作業系統)來管理。各方案的管理介面都有所不同,光是在安裝、配置管理介面的方式,就有很大的差異。

安裝完虛擬機器軟體之後,就能從瀏覽器直接啟用是最簡單的作法,這是Proxmox VE的特色。

安裝完虛擬機器之後,需要再安裝額外的客戶端管理程式。Citrix XenServer、VMware ESXi跟VirtualBox都是如此。其中VirtualBox的遠端管理程式是裝在伺服器上的網站系統phpVritualBox,比起前兩者的Windows安裝精靈來說安裝起來更複雜。

為了能達到進階的管理,許多方案採用建立獨立管理伺服器的方式。你可以將管理伺服器建置成虛擬機器,不過要注意到管理伺服器的硬體要求通常不低。OpenNode跟OracleVM都要建立管理伺服器,才能讓管理者遠端控制虛擬機器。其中我在OracleVM的管理伺服器時失敗了,也無從評估OracleVM的使用細節。

管理介面操作

好的管理介面能夠控制主端電腦的開關機與網路、控制虛擬機器的建立與設定、以及各種效能的監控。更重要的是,操作起來也要流暢。VMware ESXi、Citrix XenServer與Proxmox VE都有達到基本的要求。其中Proxmox VE的操作方式與前兩者有很大的差異,但是至少操作上都沒什麼問題,整合度也相當高。

相反地,VirtualBox的phpVirtualBox與OpenNode的OMS操作起來十分不流暢,OracleVM管理伺服器建置失敗,因此都不合格。

虛擬機器網路

本來我以為各種虛擬化方案都會提供NAT模式,但事實上似乎只有個人用的桌面虛擬化應用才會有這樣的功能。

在這次評比的方案中,只有VirtualBox有提供NAT與各種常見的網路模式,其他五個方案都只有虛擬內部網路與橋接模式。

虛擬裝置 / 樣板支援

有時候我們建立虛擬機器的目的只是為了架一些常見的網站,像是WordPress、Joomla、DSpace(這在我們實驗室還蠻常見的),而不是真的想要搞一台Linux主機或Windows主機讓你慢慢設定、調整。

虛擬裝置 / 樣板的應用,可以讓你快速建立起需要的虛擬機器。其中虛擬裝置支援數量最多的應該就是普遍受到市場歡迎的VMware系列,雖然我不清楚是不是ESXi也可以使用,但應該是可以吧?而VirtualBox兼容VMware的虛擬機器,所以一樣可以使用VMware的虛擬裝置。

如果是要求簡單、高效率的虛擬裝置,Proxomox也提供了一系列各種網站的虛擬裝置可供下載取用,而且安裝也是十分方便。

OpenNode也有OpenVZ提供的Linux樣板,可以建立各種Linux發佈版,但是空空的作業系統還是不如已經有內建特定應用的虛擬裝置來得方便。

Citrix XenServer跟Oracle VM也有樣板,但是我並沒有成功使用過,因此評語保留。


最終決定

經過以上考量之後,最後我選擇的是Proxmox VE。選擇的理由是基於以下幾點:

  • 適合舊硬體:老舊伺服器只有記憶體2G、硬碟空間256GB,不適合安裝需要吃太多資源的Windows,還是建立Linux虛擬機器拿來架架網站即可。
  • 簡單高效率:Proxmox VE整合度相當高、操作步驟簡單、OpenVZ可以動態調整虛擬機器的資源。
  • 快速建置:當有人需要快速建立常見的網站時,Proxmox VE是最簡單的選擇。

其他議題

預設網路環境有NAT路由器比較好

經過這次比較之後,我發現大多數的伺服器虛擬化方案都需要直接配給IP。然而考量到高可用、負載平衡等機制的需求上,我想他們應該都是配置在一個內部網路中,以DHCP配置內部IP、透過NAT路由器來連線。

原本我這邊的網路環境是要配給獨立的公開IP,但經過這次架設的經驗之後,我也想用pfSense架一個NAT路由器了。

管理介面的安全性

管理虛擬機器時大多都是在遠端電腦進行,但這個遠端電腦可不能毫無限制地讓任何電腦都可以連線,我們可不希望有莫名其妙的人嘗試連線到虛擬機器搞破壞。

雖然管理介面都有帳號與密碼的認證機制,但這只是防君子不防小人,真的有心的駭客可以用暴力法猜測密碼,帳號密碼被猜到的可能性依然存在。

最好的方法還是限定內部網路或特定IP能夠連線到虛擬機器伺服器進行管理,防止不認識的電腦嘗試登入,這樣就能大幅提高安全性。

大部分防火牆都能做到這種限制,例如iptables。有些基於Linux的方案,例如OpenNode,就能夠安裝iptables來提高安全性。其他的方案能不能做到,則還需要謹慎的評估。


結語

終於寫完啦!粗淺的評估提供給他人的價值不多,但是對自己來說,這是學習虛擬化技術的一個成果交代。

然後,就繼續鑽研吧。

題外話,我好想要一台有VT-x / AMD-V的伺服器啊……

(more...)

學校實驗室的伺服器虛擬化方案評比(二):方案比較

學校實驗室的伺服器虛擬化方案評比(二):方案比較

image

我先從維基百科的虛擬機器比較表格中KVM管理工具選擇伺服器虛擬化方案,再以免費、開放原始碼、客端電腦可運作的作業系統等條件篩選,然後再選擇活躍的、知名度較高的方案來安裝,並用用看各種功能。由於時間並不多,我主要關注安裝、管理、虛擬機器的建立與網路設定等部分功能,並沒有將每個方案的所有細節都摸透。詳細請看下面各方案的評比內容。

這一週多的時間內,我評比了7個方案,包括VirtualBoxHyper-V Server 2008 R2VMware ESXiCitrix XenServerOpenNodeProxmox VEOracle VM,不過實際安裝到能夠成功使用的只有其中5個而已。以下一一介紹:


VirtualBox

2011-08-06_165936 VirutalBox Version

簡介

Oracle VirtualBox是由德國InnoTek軟體公司出品的虛擬機器軟體,現在則由甲骨文公司進行開發,是甲骨文公司xVM虛擬化平臺技術的一部份。它提供使用者在32位元或64位元的Windows、Solaris及Linux 作業系統上虛擬其它x86的作業系統。使用者可以在VirtualBox上安裝並且執行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD及FreeBSD等作業系統作為客端電腦。

與同性質的VMware及Virtual PC比較下,VirtualBox獨到之處包括遠端桌面協定(RDP)、iSCSI及USB的支援,VirtualBox在客端電腦上已可以支援USB 2.0的硬體裝置,不過要安裝 virtualbox extension pack.。

VirtualBox跟Oracle VM Server的差異在於,前者是個人用的桌面虛擬化軟體,後者才是伺服器虛擬化的用途。因此跟以下我安裝的幾個伺服器虛擬化方案比起來,VirtualBox的功能有很大的差異。

豐富的網路設定

對我來說,我覺得VirtualBox最好用的地方在於網路設定:NAT模式。VirtualBox預設使用了NAT模式(Network Address Translation),客端電腦僅需要以DHCP設定網卡,就能從VirtualBox取得IP、連到網路,而幾乎所有客端電腦作業系統都預設採用這種方式連上網路。比起大多數虛擬機器都僅有提供橋接模式(Bridged Networking),安裝客端電腦時還需要特定配給IP、做額外的網路設定,擁有NAT模式的VirtualBox架設虛擬機器時就方便許多。

桌面虛擬化應用

此外,VirtualBox的3D加速與無接縫(seamless windows)功能相當實用,可以將模擬出來的虛擬機器當做Windows中的一個應用程式來使用。但是這個特色主要是用於個人的桌面虛擬化應用的目的,並不是伺服器虛擬化所關注的焦點。

即時遷移:Teleportation

VirtualBox在3.1版之後已經有即時遷移的功能,叫做「Teleportation」。與大多數提供即時遷移的虛擬機器一樣,都需要一個共享儲存環境作為暫存的角色。但是在使用即時遷移的時候,多伺服器整合的監控管理介面是很重要的工具,而Teleportation目前卻仍是以指令列操縱為主,也沒有高可用的相關技術可以一起搭配使用,因此實用度有待評估。

phpVirtualBox簡介

VirtualBox提供了本機端的圖形化管理介面,但也僅有供本機端使用。儘管我們可以用遠端桌面、VNC等遠端操控伺服器的工具來管理,但仍有所不便。為了遠端管理VirtualBox,phpVirtualBox提供了一套管理系統,並成為VirtualBox專案中相當火熱的焦點議題。

如果要用大量管理虛擬化伺服器的角度來評比VirtualBox,那麼應該要連phpVirtualBox也一併介紹才行。

2011-08-06_171137 VBox test-xenserver 2011-08-06_171159 phpVBox test-xenserver

VirtualBox管理介面

phpVirtualBox管理介面

phpVirtualBox幾乎把VirtualBox圖形化管理介面都模擬出來了,還加上了遠端管理時需要有的權限控管功能:除了帳號密碼設定之外,還能規範哪個IP的電腦才能連到phpVirtualBox進行管理,這點相當貼心。

phpVirtualBox的限制

phpVirtualBox必須搭配apachePHP執行環境才能運作,此外也要一併開啟VirtualBox的VBoxWebSrv功能。安裝phpVirtualBox前置作業較為繁雜,而必須額外開啟VBoxWebSrv才能順利連線,這又是為自動運作為目標的伺服器加上了額外的麻煩。

phpVirtualBox支援多台VirtualBox伺服器的整合管理。例如我有三台設有VirtualBox的伺服器,那麼我可以在phpVirtualBox的設定中將這三台伺服器列入管理設定,登入時就能夠一併管理。

但是由於phpVirtualBox需要對應VirtualBox的版本才能正常運作,如果我們要管理的伺服器各別安裝了不同版本的VirtualBox,例如一台是3.x版本、另一台是4.1.0版本,那麼就不能用一個phpVirtualBox來整合管理這些伺服器了。不過這只要規劃時有所考量,就不會是什麼問題。

VirtualBox安裝過程

Windows中安裝

我在Windows 7作業系統中安裝VirtualBox,然後再把phpVirtualBox配置到Apache中。配置phpVirtualBox的時候遇到了些問題,像是phpVirtualBox版本跟VirtualBox不合、不小心用管理者模式開啟VBoxWebSrv.exe等自己操作的錯誤,都不是什麼大問題。搞定後就可以開啟phpVirtualBox來管理VirtualBox了。

phpVirtualBox太慢了

2011-08-06_170543 phpVbox非常慢

但是phpVirtualBox的開啟速度可說是出乎意料的慢。我自認為我現在用的四核心電腦並不差,而且目前也沒有執行太多需要吃資源的軟體。但即使如此,從登入phpVirtualBox到看到操作畫面,至少讓我等了個5分鐘左右吧。而裡面要做任何的動作,也都要等相當久才有反應。

此外,虛擬機器主控台的功能也無法順利開啟,真不知道是我哪裡架設錯誤了,十分讓人灰心。

然而光是緩慢的問題,就足以讓人決定捨棄VirtualBox與phpVirtualBox的組合方案了。


Hyper-V Server 2008 R2

2011-08-07_003240 logo

Microsoft Hyper-V Server 2008 是一項獨立的產品,提供了空機安裝的方式,達到簡易、可靠、符合成本效益且最佳化的虛擬化解決方案,協助公司提升伺服器的使用率並降低成本。

它可將工作負載整合至單一實體伺服器;提供適用於開發與測試環境的基本簡易虛擬化解決方案;支援現有的 IT 基礎結構,協助公司降低成本、提升使用率,及佈署新的伺服器;充分利用現有的修補 / 佈署 / 管理與支援工具 / 程序。

Windows的管理介面

在官方介紹中看不太出來Hyper-V跟其他產品有啥差別。最大的決定性差異,應該就是管理介面使用了大家熟悉的Windows 2008。你可以用熟悉的方式進入Windows、設定防火牆等工作。這對已經習慣Linux的我來說,這並不是什麼特別的優勢,但對未來的管理者來說應該還是一件好事。

相較於大多數虛擬化技術對於Windows支援較差,XenServer等方案在沒有VT-x / AMD-V的加持之下甚至是不能以全虛擬化安裝Windows,Hyper-V絕對是Windows作業系統使用者的不二選擇。

Windows授權

Hyper-V的另一個優勢,就是虛擬機器中客端主機的Windows授權是包含在Hyper-V當中的。以VMware為例,安裝Windows的客端主機時,每一個客端主機理論上都需要獨立的授權(例如序號之類的)。但是一台Hyper-V企業版伺服器,就包含了四台客端主機的Windows授權。可以想像成買一份Windows又送你四份Windows的感覺。

詳細的授權細節我並不是很瞭解,因為實驗室這邊的Windows基本上都是使用學校的大量授權,因此並不需要特別在意授權數量上的限制。

Linux支援不足

不過相對的,Hyper-V在Linux作業系統支援就顯得薄弱:它只能安裝SUSE企業版伺服器、Red Hat Linux。常用的Debian卻不在名單上。

本篇主要需要架設的伺服器中,Linux佔了相當大的比重,因此這成為我並沒有選用Hyper-V的主要原因。


VMware ESXi

ESX02-2011-06-27-16-03-17 

VMware的伺服器虛擬化方案為VMware vShpere,這是一個綜合多種元件與軟體的綜合性大型方案,提供虛擬機器、集中管理、虛擬網卡與虛擬儲存裝置、即時遷移與高可用等功能。

免費的VMware ESXi

VMware大部分元件都是要收費的,只有最底層的元件:伺服器虛擬化主端電腦VMware ESXi(以下簡稱為ESXi)可供免費下載、安裝。你只要輸入可免費取得的序號,就能夠延長ESXi的使用期限。

        ESXi是以空機安裝的方式配置,你可以從VMware網站上下載ISO光碟來安裝。安裝完之後ESXi有著經過設計的文字介面主控台,可以快速設定伺服器的網路、密碼等。ESXi本身是個精簡型的Linux,許多Linux常見的套件都沒有安裝,因此較難對ESXi動手腳,也確保ESXi運作的穩定性。

        VMware vShpere Client

        虛擬機器的管理上則是以獨立的管理軟體VMware vShpere Client(以下簡稱vShpere Client)進行。供人免費使用的vShpere Client一次只能連線到一台ESXi主機,它可以調整ESXi伺服器的設定、檔案傳送(上傳ISO或虛擬裝置)、虛擬機器的監控、記錄與控制,也可以開啟虛擬機器主控台。

        虛擬機器的新增與設定都與以往常見的VMware Workstation很像,在全虛擬化技術的支持下,你可以控制虛擬機器的大部分硬體設定,就像是組一台電腦一樣。

        不過ESXi的網路模式跟Workstation有很大的差別,它只有提供虛擬交換器(vSwitch)跟VMkernel。後者是用來配置ESXi相關服務,像是vMotion(類似即時遷移等)。ESXi沒有NAT伺服器,所以沒辦法自動分配IP給客端電腦,這點必須自己想辦法。

        豐富的資源

        VMware系列產品在虛擬化技術中廣為人知,相關的資源與應用也非常多。VMware上提供了1799種虛擬裝置可以馬上下載來使用。我之前研究的DSpace也有提供VMware的虛擬裝置

        此外,VMware提供的免費工具VMware vCenter Converter Standalone也具備了相當高相容性的P2V、V2V功能。P2V是指實體機器轉換成虛擬機器,而V2V則是虛擬機器轉換成另一種虛擬機器。你甚至可以將Norton GhostAcronis True Image的硬碟映像檔轉換成VMware的虛擬機器。

        VMware ESXi安裝過程

        安裝過程十分順利

        我使用了ESXi 4.1版進行空機安裝。因為在VirtualBox上怎樣進了安裝畫面,所以我是用實體機器來安裝ESXi。
        安裝過程只有硬碟分割、密碼等少數設定需要輸入,大部分都由系統自行去判斷。大概不到五分鐘就安裝完畢了,令人訝異的輕快。

        然後是下載vShpere Client並連線到ESXi管理,ESXi也支援全虛擬化,所以也可以安裝Windows。但是它的網路設定有點複雜,直到現在我也只能理解vSwitch的運作而已。

        簡單安裝幾個虛擬機器之後很快就上手了,網路上也有很多圖文並茂的心得文,例如挨踢人的VMware vSphere 4安裝試用不專業網管筆記的VMware ESXi實戰全記錄,再此就不再額外記錄。

        手動建立NAT內部網路

        至於NAT的問題,我參考RomanT.net的Configuring NAT on ESX and ESXi一文,在ESXi中架設一個pfSense伺服器以提供DHCP、NAT的功能,而其他虛擬機器則透過pfSense來進行連線。這種方式會讓ESXi跟pfSense都各別佔據一個IP,還不算是理想的解決方案。但這種方案不管是用在ESXi還是XenServer等類似的虛擬內部網路架構中都能夠適用。

        VMware GO無法使用

        vShpere Client只能管理一台伺服器,而另一個管理方案VMware GO則是可以管理多台ESXi。它是架設在VMware網站上的網站服務,而不是我們可以自行安裝、架設的伺服器,所以必須連到VMware進行操作。

        2011-08-08_232614 vmware go (mask)

        然而,我在VMware GO新增ESXi的動作卻一直都沒有成功過,不知道是哪裡設定錯誤。網路上看得到的VMware GO文章好多都是官方的廣告說明,例如伺服器虛擬化管理服務─VMware GO,但內容都大同小異。實際上用VMware GO的人好像不多的感覺,不知道是不是我的錯覺?


        Citrix XenServer

        2011-08-08_135631 logo

        簡介

        Citrix XenServer 是一種全面而易於管理的伺服器虛擬化平臺,建構於強大 Xen Hypervisor 程式之上。Xen 技術被廣泛視為業界最快速、最安全虛擬化軟體。XenServer 是為了高效率管理 Windows® 和 Linux® 虛擬伺服器所設計,可提供符合成本效益的伺服器整合和業務連續性。

        XenServer有著與VMware vShpere、Hyper-V 2008 Server R2等類似的功能,但是XenServer在免費版就能使用很多其他廠商方案中需要付費才能使用的功能,像是即時遷移、高可用等伺服器虛擬化所需要的技術。

        XenServer是基於知名的開放原始碼虛擬機器技術:Xen。許多Linux發行版中就能預先安裝Xen,鳥哥也有介紹如何在Linux中使用Xen。Citrix XenServer也是利用Xen的虛擬電腦技術,製作出整合型的管理方案。

        網路心得豐富

        儘管市面上電腦圖書不常看到XenServer的介紹,但是網路上研究XenServer的文章卻還蠻容易找到的。

        射手科技採用XenServer作為他們的虛擬化應用方案,對於為何採用XenServer的理由以及使用XenServer時遇到的瑣事做了詳細的記錄,是官方說明之外的另一種角度的使用者說明。

        一個低調而不張揚的角落黃小瀞的學習筆記也有介紹XenServer的安裝過程,圖文並茂相當詳細,我在安裝XenServer的許多障礙都可以從這邊找到解答。

        Citrix XenServer安裝過程

        可以安裝在VirtualBox中

        2011-08-08_160517 vbox設定

        VirtualBox的設定細節

        XenServer必須安裝在64位元的電腦中。剛好我的VirtualBox可以模擬64位元的電腦,所以我就用VirtualBox來安裝XenServer,並直接讓AP配給它IP。

        空機安裝

        2011-08-08_155330 console

        XenServer是採空機安裝的方式,安裝過程沒什麼問題。安裝好之後很快就能看到XenServer的主控台。接著先用瀏覽器連線到XenServer,它會提示你下載XenCenter安裝檔,好用來管理XenServer。

        2011-08-08_161110 xencenter

        Citrix XenCenter

        在此使用的是Windows環境中使用的版本。安裝過程也十分簡單,請看黃小瀞的學習筆記的說明即可。

        半虛擬化的限制

        在安裝虛擬機器時遇到了一些麻煩。由於VirtualBox無法提供VT-x / AMD-V給XenServer,所以XenServer只能用半虛擬化(Paravirtualization)模式建立虛擬機器。

        2011-08-08_161659 template

        XenServer半虛擬化支援的樣板,但是Windows在安裝過程中必須全虛擬化進行

        半虛擬化技術最為人詬病的地方,就是必須使用特定的作業系統,並修改該作業系統的核心,這樣才能順利運作。XenServer提供了許多Linux發佈版跟Windows的樣板,不過Windows在安裝過程中需要全虛擬化,所以我連新增都不能新增。Linux發佈版中也限定了版本,我下載了許多CentOS,到最後還是用CentOS 5才能順利運作。直到安裝XenTool之後,整個新增虛擬機器的工程才算是完成。

        網路上可以找到供XenServer使用的樣板,像是Ubuntu 9.10,可是我下載之後卻無法使用,令人感到灰心。

        網路設定

        2011-08-08_162313 Netwrok

        網路的部份,XenServer也只有提供橋接模式與內部網路模式。如果要用NAT模式的話,可以參考三块石头的Citrix XenServer上实现NAT介紹。其作法是建立虛擬路由器、虛擬網卡,然後用iptables來做NAT連接埠的轉遞。這樣還沒有DHCP服務,所以必須手動分配虛擬機器的IP。雖然這都是Linux網路的基礎技巧,但是由於操作還是太過繁雜,所以我並不打算這樣做。

        另一個作法是像ESXi一樣建立pfSense路由器,不過也會有多佔據一個IP的缺點就是。

        小結

        XenServer有著不輸給VMware ESXi的伺服器虛擬化方案,免費版就能使用許多功能,令人感到興奮。但是因為我的伺服器沒有VT-x / AMD-V技術,新增虛擬機器的過程中老是綁手綁腳,令人難以適應。最後還是放棄不使用XenServer了。


        OpenNode

        2011-08-07_024309 logo

        OpenNode雲端平台(OpenNode Clode Platform)是一個開放原始碼伺服器虛擬化與管理方案,它包括了以下幾個元件:

        虛擬化技術

        OpenNode採用了KVM的全虛擬化與半虛擬化技術,同時也用了OpenVZ的容器虛擬化技術。這種虛擬化技術組合在開放原始碼專案中似乎很常見,Proxmox也是採用了類似的方案。

        空機安裝

        基於CentOS的空機安裝ISO檔,支援OpenVZ容器虛擬化與新興的KVM全虛擬化技術。OpenNode的命令列管理也使用了OpenNode CLI Utility與廣為人知的virsh與vzctl技術。

        OpenNode Management Server(簡稱OMS)

        OMS是以虛擬裝置打包(OpenVZ的半虛擬化技術),可以輕易安裝到OpenNode伺服器中整合運作。

        管理主控台

        OpenNode管理主控台,在這邊通常稱為管理介面,稱之為「FuncMAN」。它是次世代網頁式AJAX管理主控台,具備非常簡單與整齊的版面設計。在OpenNode伺服器的虛擬機器實體管理上,採用了以HTML5為基礎的VNC與SSH虛擬機器主控台。OpenNode管理主控台是含括在管理伺服器中。

        整合不如Proxmox

        基本上,OpenNode採用的技術與Proxmox很像。虛擬機器可設定的部分都一樣,網路設定也只有虛擬內部網路、橋接模式,沒有NAT。但整體來說,Proxmox的整合程度比起OpenNode高很多,以下敘述我安裝與使用的過程。

        OpenNode安裝過程

        有如CentOS的空機安裝

        2011-08-07_030940 裸機安裝

        十分精美的安裝介面

        OpenNode伺服器的安裝很簡單,就跟安裝CentOS一樣……因為他本來就是基於CentOS去修改的。安裝畫面很漂亮,但是安裝所需時間卻也跟CentOS一樣長,跟VMware ESXi比起來就差很多。

        安裝OMS與連線配置

        2011-08-07_032452 主控台

        OpenNode的文字介面主控台

        安裝完OpenNode伺服器之後,接下來要在OpenNode伺服器的主控台中安裝OpenNode Management Server(簡稱OMS)。安裝時是下載OpenVZ的虛擬裝置打包檔,將OMS建立成伺服器中的虛擬機器。因此你還需要給OMS額外的IP,讓他能夠連到網路供人連線,這是我覺得很麻煩的缺點。

        OMS必須要以完整的FQDN(Fully qualified domain name,就是完整的網域名稱啦)來解析、連線。舉例來說,OMS的IP如果是192.168.56.101,那麼我必須給他一個FQDN,例如「opennode.dlll.nccu.edu.tw」,這樣才能連線,這似乎是SSL安全認證的需求。

        FQDN的設定通常要搭配DNS伺服器來指定,不過也可以修改要客戶端的網域解析hots檔案,讓客戶端手動辨識FQDN、連到對應的OMS的IP上。Windows請修改C:\Windows\System32\drivers\etc\hosts;Linux通常是修改/etc/hosts,詳情請參考鳥哥的教學

        OMS匯入OpenNode伺服器

        2011-08-07_034317 oms

        連線到OMS時需要輸入帳號密碼,帳號是root,密碼則是剛剛建立OMS時設定的資料。然後OMS會要你安裝安全憑證,以SSL方式跟OpenNode連線,提高安全性。

        2011-08-07_034702 funcManOMS剛安裝完的時候看不到任何主機,我們必須手動匯入OpenNode伺服器。

        2011-08-07_034937 register

        使用手冊上講述兩種方法,我是用OpenNode文字主控台登入,然後再到OMS中選擇要匯入的主機。

        2011-08-07_035009 import selected

        匯入的過程要等待很久,我想應該有10分鐘左右吧,而OMS卻不會有任何運作提示。一開始我一直以為是我輸入錯誤了,等很久之後,才看到OpenNode伺服器成功匯入OMS。

        2011-08-07_035338 loading成功匯入一台OpenNode伺服器之後,OMS就時常需要讀取伺服器的資料,而且讀取速度非常慢,操作並不太順暢。儘管如此,還是比phpVirtualBox還要快就是了。

        從樣板建立虛擬機器

        由於這台OpenNode沒有VT-x / AMD-V技術,虛擬化的部分只能使用OpenVZ的容器虛擬化,因此必須要下載虛擬裝置才能建立新的虛擬機器。

        2011-08-07_035551 templates OpenNode下載虛擬裝置的操作是在伺服器主控台中,可以選擇的虛擬裝置都是乾淨各個Linux發佈版,這似乎是OpenVZ預設的虛擬裝置。相較之下,Proxmox有些虛擬裝置會預先安裝好服務,較為實用。而Proxmox在網頁端就執行下載虛擬裝置的動作,整合度更勝OpenNode。

        2011-08-07_100818 create new OVZ VM

        下載好虛擬裝置之後,就能夠在OMS建立虛擬機器。建立的方式與Proxmox雷同,畢竟都是使用同樣的OpenVZ技術。建立時需要花點時間,但是OMS卻像是沒有回應一樣的呆滯住,操作起來實在是不怎麼流暢,強調AJAX技術卻沒有帶來相對應的優勢啊。

        2011-08-07_100940 console 虛擬機器的主控台稱之為「WebShell」,是以HTML5技術寫成的,頗為特別。但老實說不太好用,不如Proxmox的Java Applet還容易上手。

        小結

        稍微操作了一下,感覺上,要用OpenNode不如用Proxmox吧。


        Proxmox VE

        800px-Screen-startpage-with-cluster 

        簡介

        在一小時裡面建立完整的虛擬伺服器平台」。這個Proxmox的願景可不是痴人說夢話,而是一個可行性相當高的方案──而且還是免費的開放原始碼專案!

        Proxmox使用了KVM的全虛擬化與半虛擬化技術,以及OpenVZ的容器虛擬化技術(只能供Linux的客端電腦使用)。然而KVM需要有Intel VT-x / AMD-V技術支援,我目前只能測試OpenVZ的容器虛擬化。

        虛擬裝置應用

        真的只要一個小時,你不僅可以將一台空的伺服器安裝成Proxmox,然後快速地建立起郵件伺服器(Proxmox Mail Gateway)、內容管理平台(Joomla)等各種常見的虛擬裝置。一個可以馬上使用的網站系統就這樣完成了!

        操作門檻低

        Proxmox不僅是快,而且是個高度整合的方案,換句話說,他用起來非常簡單!習慣用VirtualBox或是更複雜的VMware的我,在一開始就為它過於簡單的操作方式而感到困惑。但經過短時間的摸索、閱讀安裝文件、熟悉Proxmox的使用方式之後,現在則是對它高度整合的成果感到十分敬佩!

        接著我就介紹一下Proxmox的安裝、使用過程吧!

        Proxmox VE安裝過程

        空機安裝

        Proxmox提供了空機安裝的方式,讓你快速建立起基於Debian的虛擬機器伺服器,內含用瀏覽器就能連線的網頁管理平台,一應俱全。

        2011-08-06_215904 Login

        網頁管理平台的帳號密碼是與Proxmox的Linux系統結合在一起,因此你不需要設定太多套帳號,這是高度整合的具體表現。

        從虛擬裝置建立虛擬機器

        由於我只能用容器虛擬化技術,所以我必須從虛擬裝置來建立虛擬機器。Proxmox最特別的地方,就是它準備了一堆的虛擬裝置(Virtual Appliance)──就是將已經安裝好、配置好的作業系統,上面甚至會安裝好特定的應用工具,然後包在一起供人下載取用。

        2011-08-06_220221 templates download 虛擬裝置可以從Proxmox的網站下載,不過Proxmox的管理介面就內建下載清單了。

        2011-08-06_220256 start download

        你可以從管理介面直接將虛擬裝置下載到Proxmox VE伺服器中,操作起來一氣呵成、不需要多餘的步驟。

        下載完之後就能在建立虛擬機器中選擇該虛擬裝置作為範本,同時可以為他設定基本常用的參數,包括root的密碼。大概只要兩分鐘,一台全新可用的虛擬機器就建好了。

        虛擬機器設定

        建立虛擬機器的部份,跟其他虛擬機器平台比起來,特別是超複雜的VMware ESXi或是比較像個人電腦的VirtualBox來說,Proxmox建立虛擬機器中可以自訂的設定非常少,一開始使用時讓我有點不知道該如何下手。

        2011-08-06_220331 create

        不過重要的設定該有的還是都有,像是硬碟容量、記憶體、網路。我後來才知道,大部分Open VZ的虛擬機器都是如此。其中網路設定的部份,他也只有橋接模式,只是Network Type要選Virtual Network (venet),用橋接網卡反而無法運作,奇怪。

        以Java Applet實作虛擬機器主控台

        2011-08-06_220856 enter console 在主控台操作方面,Proxmox是以Java Applet元件,利用VNC來連線。操控上出乎意料地簡單,按鍵也不會被捕捉鎖定(例如VMware預設要用ctrl + alt來解除捕捉鎖定),感覺就像是在用PieTTY操控主控台一樣的容易。不過,可惜複製貼上這種動作還是做不到的啦。

        小結

        Proxmox的設定太過簡單了,似乎沒辦法像VMware一樣弄出複雜的網路結構。不過換個角度想,簡單也是一件好事,正符合本篇所需要的容易管理優點。我很中意這個方案。


        OracleVM

        vm_general_info

        • 專案網站:Oracle VM Overview
        • 維基百科:Oracle VM
        • 下載網頁(Oracle VM要先註冊登入才能下載,註冊是免費的。)
        • 使用版本:Oracle VM 2.2.2 Media Pack(內含OracleVM-Server-2.2.2.iso與OracleVM-Manager-2.2.0.iso)
        簡介

        Oracle VM為甲骨文公司(Oracle)所發行的企業級開放原始碼虛擬機監視器,其建基於Xen。其免費供應於大眾下載、使用與發布,並為使用者提供有償支援。

        Server與Manager

        Oracle VM分成Server跟Manager兩個元件,它都是提供ISO檔供人免費下載。其中Server是空機安裝,Manager則是要依附作業系統來安裝。

        Manager硬體要求條件最少2GB記憶體、4GB的硬碟空間,因此可能難以裝在預設的虛擬機器中,這是需要注意的地方。

        網路

        Oracle VM的網路似乎只有提供橋接模式,因此它在文件中建議我們在Oracle VM前面設置好DHCP伺服器,再來進行虛擬機器的安裝。

        樣板

        Oracle VM提供了樣板安裝,這是已經安裝好了作業系統,只要下載、放到Oracle VM中,就能夠直接使用。

        Oracle VM安裝過程

        實體機器安裝

        由於我在VirtualBox跟VMware ESXi中都無法順利進入Oracle VM Server的安裝畫面,所以我把它燒成光碟後,放到實體機器上安裝。

        實體機器上的安裝過程十分順利,很快就架設好Oracle VM Server。然後我才想起來還要安裝Oracle VM Manager

        安裝Oracle VM Manager

        本來我想把Oracle VM Manager裝在Orcale VM Server的電腦上,但是它的安裝器不知道是哪裡搞錯了,跟我講說硬碟空間不足,明明安裝完Oracle VM Server之後還有18x GB的空間。
        因此我只好另外架設虛擬機器,先安裝CentOS 5作業系統,再來安裝Oracle VM Manager。

        Oracle VM Manager安裝過程照文件進行操作即可,大致上沒什麼問題。在安裝過程中會安裝許多工具,而它會一一要你設定密碼,這點十分煩人。

        無法連線到Manager

        Manager安裝完之後,應該可以透過「http[s]://IP_address:port/OVS」連接到Oracle VM Manager的管理介面。

        儘管看起來各元件都正常啟動了,防火牆也開啟所需要的連接埠,但我卻怎樣都連線不了,一直看到「錯誤 102 (net::ERR_CONNECTION_REFUSED): 伺服器拒絕連線。」的問題。

        我嘗試以上步驟安裝了第二次,還是一樣無法使用Orcale VM Manager。因此許多功能都還沒嘗試使用,Oracle VM就被我放棄了。

        (more...)

        學校實驗室的伺服器虛擬化方案評比(一):背景需求

        學校實驗室的伺服器虛擬化方案評比(一):背景需求

        2011-08-08_215458 manage virtual machine

        我所在的教學單位實驗室中一直有著大量伺服器的需求,因此我最近開始研究起虛擬機器技術。這一篇事先敘述為什麼實驗室需要伺服器虛擬化方案來解決伺服器的需求,以及一些基本的虛擬機器相關技術名詞。

        本篇要講的內容頗多,我預計拆成三篇文章來敘述,這一篇主要描述背景需求與相關名詞解釋。

        背景需求

        我們實驗室在進行實驗時,往往會需要伺服器來安裝網站、提供服務,主要使用的作業系統是Windows(因為很多系統是以ASPMSSQL實作),此外普通架站時常常使用的則是Linux。另一方面,在學生畢業之後,我們也要典藏學校畢業論文的系統,供後續研究發展的用途。

        但是不管實驗室經費再多,伺服器的數量也不能滿足永無止盡的實驗、典藏需求。所以我們需要借助伺服器虛擬化方案的力量,將不常用、測試用的伺服器需求轉換成虛擬機器來運作,以達到節省經費成本、機器空間的效益。

        具體來說,這種伺服器虛擬化的需求有兩種:一種是實驗用的短時間伺服器,可以讓人在虛擬機器裡面胡搞瞎搞,搞壞了也不會影響到其他虛擬機器的運作;另一種是展示用的長時間伺服器,這是在偶爾需要展示系統功能一下時才會連線使用的系統,效能不是第一考量,但需要長時間保持運作、易於備份才行。

        由於我們是教育單位的實驗室,人力跟經費都不比外面的企業公司,因此方案的考量點都是開放原始碼、免費的方案為主。

        目前我打算將虛擬機器架在一台老舊的伺服器上,它連VT-x / AMD-V的硬體協助虛擬化技術都沒有,這會造成之後選擇虛擬化方案上的限制。

        在網路環境方面,這邊要配置獨立、公開的IP才能連線到網際網路。然而大部分伺服器虛擬化方案的前提,都在於已經有大量IP可以使用,或是已經架設在有DHCP服務的內部網路中、可透過NAT路由器進行連接埠轉遞。這些差異在之後評比時會再進行說明。

        最後,最麻煩的是人力方面。這邊並不是理工科系,不太能期待學生能擁有網管的技能。學生一屆一屆地交替,複雜的管理技術也會難以轉交。因此整個伺服器虛擬化方案必須簡單,能夠有圖形化介面進行操作,盡量不用記憶文字型指令。

        基於以上背景需求,我大概花了一週多的時間研究、比較各種伺服器虛擬化方案的運作方式。比較其優缺點,並從中決定最後要採用的最佳方案。

        而接下來幾篇也就是記錄各種伺服器虛擬化方案的評比過程。


        名詞解釋

        由於本篇會用到一些虛擬機器與網路技術的專有名詞,在此先解釋一下常用名詞的意思。

        主端電腦 / 客端電腦 (HostOS / GuestOS)

        在虛擬機器的角色中,用來安裝虛擬機器軟體的作業系統稱為主端電腦(Host OS),被模擬出來、安裝在虛擬機器上的作業系統,稱為客端電腦(Guest OS)。我們通常是在一個主端電腦上建立多個客端電腦的虛擬機器提供服務。

        而在伺服器虛擬化方案中,常常會將多台主端電腦結合成一個集叢(Cluster),以進行即時遷移、高可用等技術的實作。

        名詞解釋:虛擬化技術

        本篇評比的方案中,大致上會用到幾種虛擬化技術。

        全虛擬化(Full-Virtualization)

        虛擬機器軟體模擬出所有硬體設備與可操作的指令,客端電腦安裝在虛擬機器時就像是安裝在一個普通的機器硬體上。VMware、VirtualBox都是採用這種全虛擬化技術。

        客端電腦發出的硬體指令會經過擷取、轉換,並於主端電腦上實作,虛擬化的效能較差。相對的,全虛擬化可以模擬出完整的電腦環境,可以安裝的客端電腦種類也比較多,不論是Linux或Windows都可以安裝。

        半虛擬化(Para-Virtualization)

        虛擬機器軟體模擬出部分硬體設備與指令,而部分硬體不進行模擬、客端電腦會直接使用主端電腦的硬體。因為這種部分硬體模擬的方式,所以中文常以「半虛擬化」稱之。英文原名的意思是「在旁邊的虛擬化」,意思是客端電腦的執行實際上是部分仰賴於主端電腦的虛擬化。

        為了讓客端電腦能夠順利融入主端電腦中並進行半虛擬化的作業,通常需要修改客端電腦的核心。這通常是半虛擬化為人所詬病的缺點。但有人認為半虛擬化中客端電腦可以直接操作硬體,因此虛擬化損耗的效能較低、運作效率較高。

        硬體協助虛擬化 Intel VT-x / AMD-V

        在x86虛擬化的硬體支援中,Intel跟AMD都個別開發出虛擬化擴充的功能。他們彼此並不直接相容,但大部分功能卻都相同。VT-x / AMD-V技術可以讓主端電腦擷取客端電腦發出的低特權態部件的敏感指令,因此半虛擬化技術就不需要修改客端電腦的核心、全虛擬化也不用轉換客端電腦的執行代碼,這種硬體協助技術在某些方面來說可視為已經抵消了這兩種虛擬化技術的差別,而都可以視為全虛擬化技術。

        藉由VT-x / AMD-V的協助,XenKVM等多種虛擬機器就能夠以全虛擬化模擬或是支援64位元的客端電腦。

        然而,由於VT-x / AMD-V允許客端主機對記憶體的直接取用(Direct Memory Access,DMA),容易造成安全管理上的問題。因此Citrix XenServerMicorsoft Hyper-VVMware ESX等不同虛擬化方案會在系統服務安全上有著不同的性質,這也是他們之間會有明顯差異的地方。

        容器虛擬化(Container-based virtualization)

        容器虛擬化是在主端電腦中將部分資源、程序區隔成獨立的虛擬環境。容器中的客端電腦與主端電腦一樣的硬體設備,但是與主端電腦、其他客端電腦之間有很好的隔離性與安全性。

        OpenVZ是容器虛擬化技術中相當知名的開放原始碼專案,它不需依賴硬體虛擬化技術VT-x / AMD-V的支援,可攜性也很高,而且允許你在客端電腦執行中直接動態調整客端電腦的資源(硬碟大小、記憶體等)。有不少人認為容器虛擬化的效能相當地高。

        容器虛擬化技術要建立虛擬機器時,通常是要從虛擬裝置(Virtual Appliance),或是樣板(Template)中建立。例如你可以下載一個CentOS作業系統的虛擬裝置,然後基於這個虛擬裝置來建立一個全新、可以馬上執行的CentOS──大概只要三分鐘。

        容器虛擬化最大的限制在於支援的作業系統很少、可選擇的類型不多,OpenVZ就只能從Linux主端電腦去模擬Linux客端電腦,並不能使用Windows。

            名詞解釋:虛擬機器應用

            有些與虛擬機器安裝、建立、操作時的相關技術名詞,在此也先解釋定義。

            空機安裝(Bare-metal installer)

            空機安裝是指在電腦上透過光碟或網路直接進行安裝,架設起一個包含作業系統與虛擬機器的完整電腦,這樣就不需要仰賴其他作業系統。

            為了讓伺服器虛擬化能夠穩定運作,主端電腦盡量是精簡服務、專心在虛擬機器運作上就好。空機安裝採用了預先規劃好的作業系統與虛擬機器服務設定,提供必要的功能,也減少安裝時額外設定的麻煩。

            許多方案都有提供空機安裝的ISO光碟映像檔。就像安裝普通的作業系統一樣,你可以把空機安裝的ISO檔燒成光碟、放到實體電腦光碟機上安裝,也可以掛載到虛擬機器上、在虛擬機器進行空機安裝。

            空機安裝的系統通常包括作業系統與虛擬機器軟體。有些開放原始碼專案的作業系統是採用常見的CentOS、Debian等Linux發佈版,允許使用者能再作業系統上加工。也有的作業系統單一功能的精簡版,除了虛擬化工作與基本設定之外沒有什麼能夠調整的地方,就像安裝了一個嵌入式系統一樣,例如VMware ESXi。

            虛擬裝置 / 樣板(Virtual Appliance / Template)

            將虛擬機器打包之後供人下載、使用,這就是一個「虛擬裝置」(Virtual Appliance),通常翻譯成「虛擬設備」。虛擬裝置就像是一台完整的、可以獨立運作的客端電腦,你只需要把它放到主端電腦中,以虛擬機器開啟、設定一下參數與網路,就能夠直接使用。

            在容器虛擬化的OepnVZ或半虛擬化的Xen中,通常是稱之為「樣板」(Template)。使用者可以以一個樣板為基礎產生多台同時運作的客端電腦。

            VMware的虛擬裝置市場有著1799個虛擬裝置可供下載,OpenVR也有許多Linux作業系統的樣板,而Proxmox也提供了各種網站伺服器的虛擬裝置

            利用虛擬裝置快速建立客端電腦,比起從光碟安裝作業系統更有效率。有些對應的技術也可將客端電腦轉換成虛擬裝置或樣板,供大量配置使用。

            虛擬機器主控台(Virtual Machine Console)

            2011-08-09_150658 console - mask

            VMware vShpere Client的虛擬機器主控台,裡面是一個Windows的虛擬機器。

            虛擬機器的操作介面稱為主控台(Console)。有些虛擬機器會模擬顯示卡,因此主控台可以看到漂亮的圖形化操作介面,類似平常我們在實體機器與螢幕上操作電腦一樣。但也有些虛擬機器並不模擬顯示卡,操作全部都以無頭模式(Headless Mode)進行,你只能在僅有鍵盤的情況以文字指令操作客端電腦。雖然這大致上跟Linux的指令列模式差不多。

            而主端電腦虛擬機器顯示客端電腦主控台畫面的方式有很多種,通常可以在虛擬機器管理介面開啟,VirtualBox可以用特有的VRDP虛擬遠端桌面協定,用Windows的遠端桌面開啟客端電腦的主控台。

            主控台為了模擬真實的操作環境,有時候會在開啟時捕捉鍵盤與滑鼠的操作。被捕捉的鍵盤與滑鼠只能在客端電腦主控台中進行操作,要脫離捕捉狀態時必須按下特殊按鍵組合,以VMware來說就是「Ctrl + Alt」。而虛擬機器無法捕捉特殊的按鍵組合「Ctrl + Alt + Del」(這會在Windows伺服器登入時使用),因此會有一些功能按鈕可以讓使用直接送出這個組合。

            似乎很少虛擬機器相關技術會在意這個基本的功能,但我真的覺得不同方案的主控台技術之間有很大的差異。

            名詞解釋:虛擬機器與網路

            虛擬內部網路(Virtual Intranet Network)

            許多方案都能夠建立虛擬的網路環境,就像是建立一個虛擬的交換器(switch),讓虛擬機器的網路卡與他連線,進而構築出複雜的網路結構。VMware及某些方案稱之為「vSwitch」,VirtualBox稱之為「Internal Network」(intnet),使用起來差不多都是類似的概念。

            橋接網路(Bridged Network)

            在這種網路型態之下,客端電腦會透過虛擬橋接器與主端電腦的實體網卡相連接。在這個網域中,主端電腦跟客端電腦都會被視為兩台獨立的電腦,可以各別配給IP、連上網路。

            NAT (Network Address Traslation)

            NAT是路由器常使用的技術,通常會搭配DHCP服務、連接埠轉遞機制一起使用。

            VirtualBox提供了NAT的網路模式,客端電腦會連到VirtualBox建立的虛擬路由器上,由虛擬路由器透過DHCP配給客端電腦內部IP,客端電腦責是透過虛擬路由器連線到網際網路。當網際網路的電腦要連到客端電腦時,則需要搭配連接埠轉遞機制,將指定的連接埠轉移到客端電腦中。

            NAT的網路功能不僅在個人使用時很容易就能建立一個可以連上網際網路的客端電腦(相較之下,其他模式都要自行指定IP),更可以讓你只要用一個IP、多個不同的連接埠,就能同時讓許多客端電腦提供服務。但是在伺服器虛擬化方案中,幾乎看不到內建NAT網路的功能。

            名詞解釋:伺服器虛擬化應用

            要進行大量虛擬機器的管理時,必須配合多種網路技術搭配,才能做到服務穩定、容易管理的目標,也是各個方案都想要實作的技術。在此舉兩個常見的技術:

            遷移(migration)

            遷移是讓伺服器管理者將虛擬機器轉移到不同的實體主端電腦上。當主端電腦需要維修、停機時,遷移功能可以快速將虛擬機器轉移到其他主端電腦再繼續執行。

            要進行遷移的先決條件是要有多台具有虛擬機器軟體的主端電腦。大部分的伺服器虛擬化方案中,遷移是在特定的管理介面中進行。你必須要先將多台主端電腦都結集成叢集,而且需要準備一個遷移時暫存的空間,這樣才能進行遷移的動作。

            即時遷移(Live migration)則強調遷移過程中虛擬機器運作不會中斷,而客戶端的網路服務也不會因此斷線。由於這還牽涉到網路技術,因此並不只是單純的虛擬化技術就能完成。許多伺服器虛擬化方案都會強調他們具有即時遷移的功能,而成為各家競爭的賣點之一。

            高可用性(High Availability,簡稱HA)

            高可用性是指為了縮短日常維護操作和突發系統崩潰的停機時間,配置多個相同的系統,而在其中某些停機的時候短時間內轉移到其他可用的系統中。

            在網路架構中,高可用性通常會與負載平衡、同步備份、服務監控與故障排除等技術一起使用。而在虛擬機器應用上,可以輕易地部屬多台相同功能與內容的虛擬機器,而以低成本實現高可用性的優勢。在伺服器虛擬化方案中,高可用性也是各家主打的賣點之一。

            (more...)