:::

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

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

2011-09-01_123836 ipfire logo 

IPFire是我最近在研究防火牆套裝系統中覺得較為合適的一套軟體。它是以Linux為基礎發展而成的作業系統,專門用來作為防火牆、DHCP伺服器、NAT路由器等功能。

IPFire在安裝Pound套件之後一樣可以作為反向代理伺服器(reverse proxy)使用,不過Pound的設定檔必須要透過指令列來修改,不是很方便。我用PHP寫了一個pound.cfg設定檔編輯器,並將之整合到IPFire的管理介面中。

以下簡介IPFire、反向代理伺服器套件Pound、IPFire安裝Pound與pound.cfg設定檔編輯器的方法,以及如何設定Pound反向代理伺服器。


IPFire簡介

2011-09-01_123836 ipfire logo

IPFire是一個設計作為防火牆的伺服器系統,採GNU第三版發佈,可供人免費自由使用。它主要是用於可設定、調整大小的中小型企業網路與家庭網路中。

在這個前提之下,IPFire原始安裝時只提供了最小的功能,但附有大量的擴充套件(add-ons),只要點點滑鼠就能輕易安裝。這也是IPFire與其他防火牆系統的差異所在:它很容易設定各種功能,並易於管理。

IPFire的安裝與設定都十分簡單,就跟它企鵝火燒屁股的標誌一樣可愛。儘管它並沒有許多UTM(Unified Threat Management,整合式威脅防護系統)主打的複雜功能,但容易上手、設定、並能夠滿足我的需求,對我來說就足夠了。

不過老實說,它網頁管理端的防火牆設定只能設定單一來源位置,如果要規劃複雜的防火牆規則,例如我之前的iptables設定,那麼就得要用指令列來手動設定iptables了。

Pound簡介

Pound是一種反向代理伺服器(reverse proxy)、負載平衡器(load balancer)以及網頁伺服器的前端(front-end)HTTPS管理器。Pound可將流量負載分散至多台網頁伺服器,並能夠使用方便的SSL包裝器加密HTTP封包,讓原本沒有HTTPS功能的網頁伺服器也能夠使用HTTPS提供服務。Pound是以GPL發佈,可供人免費自由地使用。

網路上實作反向代理伺服器的套件很多,大多人都使用Squid與Apache,而之前我也用Lighttpd來做反向代理伺服器。Squid設定複雜不易上手;Apache我試過,但不太穩定;Lighttpd雖然不錯用,但是以Lighttpd作為網頁伺服器的情況不常碰到(IPFire是用Apache);而這個Pound則是專門用來作為反向代理伺服器的套件,跟前面敘述的套件不同的地方是,Pound並沒有代理伺服器特有的快取功能,而完全只負責轉遞封包,這是在使用Pound需要注意到的問題。此外,Pound設定簡單容易上手,這也是我喜歡Pound的特色。

來聊個題外話:通常Pound套件會安裝在獨立的負載平衡伺服器中,但偶爾也會遇到將網頁伺服器與Pound套件安裝在同一台伺服器的情況。由於Pound必須監聽連接埠80才能引導封包流向,這會與一般的網頁伺服器(如Apache)監聽連接埠80相互衝突。我看有些設定是修改網頁伺服器的連接埠,例如改為8080,然後讓Pound在引導封包流向時將80轉為8080,達到兩種服務共同相處的目的。稍後在介紹Pound設定檔pound.cfg的內容時,相信應該很容易理解這個作法。不過本篇並不會處理這樣的問題,當做閒聊看看就算了。


接下來開始介紹IPFire上安裝Pound與Pound設定檔pound.cfg編輯器的方法,以及設定Pound反向代理伺服器的方法。

IPFire安裝Pound

我參考了原本IPFire安裝Pound的教學,加入我額外開發的pound.cfg設定檔編輯器,所以步驟變得有點複雜。如果有任何講述錯誤的地方,請多多指教。

1. 前置作業:安裝IPFire與開啟網頁管理介面(Web Interface)

安裝IPFire的步驟挺簡單的,就跟安裝普通的Linux作業系統一樣,我就不再贅述。

一開始常見的問題通常是要如何連上網頁管理介面(Web Interface)。不過這也不是本篇的重點,我也沒打算花太多篇幅敘述這個作法。簡單來說:

  1. 請使用內部網路(LAN)的電腦來連線。
  2. 連線到https://192.168.0.1:444
  3. 預設帳號為admin,密碼為IPFire安裝時設定的密碼。

以下所有步驟都必須要從網頁管理介面操作,請想辦法努力做到這一步吧。

2. 設定防火牆

這一步也是要在內部網路的電腦中連到IPFire網頁管理介面進行操作。

image

請進入firewall > External Access頁面中,設定網際網路連線可連入IPFire的規則。

主要欄位說明如下:

  • TCP:封包類型。我們大部分的服務都是用TCP進行,此處請選TCP。
  • Destination port:目標連接埠。為了讓網際網路的電腦可以連到IPFire的網頁管理介面,此處請開放444連接埠。
  • Remark:說明。我們為此規則加入「ipfire web interface」的說明。也可以輸入中文。

最後按下「Add」按鈕,就完成了新增規則的作業。以下就能用任意電腦連線至IPFire的網頁管理介面了。

同時,也請你以相同的步驟,開啟以下幾個之後會用到的連接埠:

  • 連接埠222:IPFire使用的SSH通訊協定。
  • 連接埠80:Pound監聽的HTTP通訊協定。
  • 連接埠443:Pound監聽的HTTPS通訊協定。
3. 開啟SSH

2011-08-31_184738 ssh access (draw)

請開啟網頁管理介面中的system > SSH Access頁面。

在ssh區塊中,勾選以下選項:

  • SSH Access:讓IPFire可以使用SSH。
  • Allow TCP forwarding:允許TCP封包轉遞。
  • Allow password based authentication:允許密碼認證。
  • Allow public key based authentication:允許公開金鑰認證。

加上前一步驟中開放了防火牆,接下來你可以就用你的電腦以SSH連線至IPFire。IPFire的SSH連接埠為222,這跟一般預設的22有所不同,因此比較不容易被駭客猜到。

稍後我們會透過SFTP(SSH的FTP模式)上傳檔案,我是使用FileZilla來上傳。如果要用SSH的指令列模式操作IPFire的話,我通常是使用PieTTY,但是指令列模式操作比較困難,本篇也不打算多談,僅供進階使用者使用而已。

4. 檔案上傳

以下幾個檔案請以SFTP方式上傳到IPFire的指定路徑中。

pound
  • 下載位址
  • 存放路徑:/etc/sysconfig/pound
  • 開機時自動啟動pound的設定。
ipfire-interface-ssl.conf
  • 下載位址
  • 存放路徑:/etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf
  • 讓Apache可以使用PHP程式。其實IPFire的Apache本來就有載入PHP元件,但並沒有設定PHP關連。此檔案就是加入了PHP的關聯設定。
pakfire.cgi
  • 下載位址
  • 存放路徑:/srv/web/ipfire/cgi-bin/pakfire.cgi
  • 在IPFire網頁管理介面中加入開啟pound.cfg的連結。
pound_edit.php
  • 下載位址 (如果新版本IPFire的pound.cfg路徑有修改的話,請下載這個檔案)
  • 存放路徑:/srv/web/ipfire/html/pound_edit.php
  • 編輯pound.cfg設定檔的程式

檔案放完之後,要記得重新啟動apache喔。指令如下:

[root@ipfire ~]# /etc/init.d/apache restart
Restarting Apache daemon... [ OK ]

5. IPFire安裝Pound套件

2011-08-31_172002 pound install (draw)

在網頁管理介面端,進入ipfire > Pakfire頁面,請在Available Addons中選擇「pound」(我目前使用的是pound-2.5-2版本),然後按下下面的「+」按鈕進行安裝。

2011-08-31_172904 pound install comfirm

接著IPFire會要你確認是否要安裝。按下綠色向右箭頭確認即可。稍微等待一段時間,IPFire一下子就會裝好Pound套件,並跳回剛剛的Pakfire頁面中。

6. 開啟pound.cfg editor

2011-08-31_173052 pound.cfg editor path

安裝完Pound套件之後,網頁管理介面的ipfire > Pakfire下方應該會出現pound區塊。請開啟pound.cfg editor連結。

2011-08-31_172934 pound.cfg editor

接著會開啟pound.cfg editor視窗,你就可以在此畫面中編輯Pound的設定檔了。詳細的設定稍後會再敘述,此處只要確認可以開啟即可。

7. 重新啟動IPFire

2011-09-01_132305 reboot

以上設定完畢之後,需要重新啟動Apache跟Pound,設定才會生效。你可以從網頁管理介面中的 system頁面找到「Reboot?」按鈕,按下去之後就會讓IPFire重開機了。

如果你會使用SSH指令列操作IPFire,也可以輸入以下兩個指令,各別將Apache與Pound重新啟動:

[root@ipfire /]# /etc/init.d/apache restart
[root@ipfire /]# /etc/init.d/pound restart

到此為止,IPFire安裝Pound就大功告成了。


設定pound反向代理伺服器

反向代理伺服器是一種特殊的網路架構,它利用FQDN(Fully Qualified Domain Name)透過反向代理伺服器連接到內部網路的伺服器。其原理我已經在之前討論pfSense時介紹過了,在此不再贅述。

Pound作為反向代理伺服器的設定方式很容易上手,在此我謹介紹最簡單的範例。我先講述一下範例的網路拓蹼,然後再講要如何設定Pound。如果要進行更複雜的設定,請參考Pound官方網站的說明

1. 網路拓蹼規劃

ipfire 網路拓蹼

現在的網路拓蹼架構如上圖,IPFire作為防火牆與路由器,負責連接網際網路(外部網路)與內部網路兩者。

在內部網路中,有一台網頁伺服器提供Joomla網站服務,內部網路的IP為192.168.0.20

為了讓網際網路的電腦可以連線至Joomla網站,我們先註冊一個FQDN:joomla.example.com,並指向IPFire伺服器的外部網路IP:140.119.61.254

接著我們就要設定IPFire中的Pound套件,讓它知道接收到來自joomla.example.com的封包時,要轉遞到內部網路中的Joomla伺服器。

2. 進入pound.cfg editor

Pound的設定檔是/etc/pound.cfg。如果你在上述步驟中一起安裝了pound.cfg編輯器,那麼你可以透過它從IPFire網頁管理介面中編輯pound.cfg。

請開啟IPFire的網頁管理介面,進入ipfire > Pakfire,找到最下面的pound.cfg editor,開啟視窗。

3. 編輯pound.cfg

依照目前的網路拓蹼規劃,有幾個參數是必須要確定的:

  • IPFire的外部網路IP位置:140.119.61.254 (以藍色表示)
  • FQDN:joomla.example.com (以紅色表示)
  • 內部網路伺服器的IP位置:192.168.0.20 (以綠色表示)

如此設定pound.cfg之後的內容如下,請注意顏色的對應:

ListenHTTP
Address 140.119.61.254
Port 80
Service
HeadRequire "Host: .*joomla.example.com*"
BackEnd
Address 192.168.0.20
Port 80
End
End
End

設定應該算蠻好懂的,在此就不多解釋了。

4. 重新啟動IPFire

修改pound.cfg之後,要重新啟動Pound才會生效。你可以從IPFire的網頁管理介面中將IPFire重新啟動,也可以透過SSH輸入指令「/etc/init.d/pound restart」來重新啟動Pound。

以上Pound的設定就大功告成了。


F&Q

為什麼pound.cfg editor抓不到檔案內容?

可能是IPFire設定的pound.cfg路徑有所修改,詳細請看IPFire addons: pound的說明。


結語

我本來是打算用pfSense作為反向代理伺服器。但很遺憾的是,不知道是不是硬體不支援的關係,我的實體伺服器並沒辦法安裝pfSense。所以我只好臨時找尋其他的方案,而找到現在的這個IPFire。

老實說,IPFire並沒有pfSense容易上手,但還算是堪用就是。希望他真的能夠讓我安裝到實體伺服器中,別讓我又要重找了啊。

至於為什麼pound.cfg editor是用PHP開發的這點,雖然IPFire主要的功能都是用Perl寫成的cgi網頁,但我對cgi並不熟,所以才會折衷用PHP來寫。雖然安裝手續上複雜了一點,但操作時應該比較容易才是吧?至少不必用到vi來編輯pound.cfg設定檔,這點應該可以讓許多管理者容易上手許多才是。

光是研究各個防火牆系統套件花了不少時間,本來想說這個pound.cfg editor應該可以很快完成,結果又因為其他意外拖了很久,實在是很慚愧。希望未來也能繼續努力加油,嗯!

(more...)

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...)