:::

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

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)功能。網路綁定是利用兩張實體網路卡分散網路流量的技術,並不是本篇主要探討的對象。

(more...)

從臺灣博碩士論文知識加值系統匯入書目到Zotero

布丁布丁吃布丁

從臺灣博碩士論文知識加值系統匯入書目到Zotero

image

Zotero一直是我寫論文、整理文件的得力利器。而作為一個研究生,參考我國的臺灣博碩士論文知識加值系統(原名:全國博碩士論文網,以下仍簡稱博碩士論文網)也是很正常的一件事情。

由於Zotero是國外開發的工具,文獻管理主要是以國外知名的資料庫為主,包括Google Scholar。我們的博碩士論文網就沒有在Zotero的解析器清單中,因此如果要將博碩士論文網的書目匯入Zotero,就不能用點網址列右方的快速匯入功能,而是用類似EndNote的RIS format檔案匯入。

以下我將介紹如何從博碩士論文網中匯入書目資料到Zotero的過程。


工具介紹

原本Zotero是Firefox的一個擴充套件,但是由於Firefox往往會跟太複雜的擴充套件起衝突、造成運作效能不佳,因此後來Zotero又推出了獨立運作(standalone)的版本。我現在多是用獨立版本的Zotero,目前用起來很順利,沒什麼大問題。

獨立版本的Zotero可以跟Google ChromeSafari等瀏覽器搭配運作,但是要為瀏覽器安裝額外的Zotero Standalone Connectors套件。我目前使用的是Google Chrome Portable 12.0.742.100。


匯入步驟

接下來就是在博碩士論文網中找書目匯入Zotero的教學囉。

1. 用搜尋功能找到指定文獻

2011-10-01_202025 search (mask)

現在我以「基於數位閱讀標註行為探勘影響閱讀焦慮因素 提升閱讀成效」這篇論文為例。先用博碩士論文網的搜尋功能找到這篇論文,如上圖。勾選論文左邊的核取方塊,然後看到右邊的「輸出管理」功能。

2. 輸出管理匯出檔案

2011-10-01_202356 ris

在輸出管理中, 勾選「書目資料輸出格式」的「RIS format (EndNote…)」選項,然後按下最下面「TXT檔」旁邊的「儲存」按鈕,系統會給你一個「ris」副檔名的檔案,例如fb111001.ris

3. 匯入Zotero

image

接著再到Zotero視窗中,選擇「檔案」中的「匯入」功能(獨立版本的翻譯沒有很完整,所以實際上還是很多英文單字混雜),指定你剛剛下載的ris檔案。

2011-10-01_202840 imported

接著左邊的收集(collection)就會多出你剛剛匯入的檔案名稱,而該收集裡面就是你剛剛輸出的書目資料囉。


結語:EndNote做得到的,Zotero也能辦到

上述步驟其實是參考研究生好幫手(二)--筆記給您攢便便.EndNote 學習快易通這一篇的教學。事實上,只要是有提供EndNote匯出功能的資料庫,像是臺灣大學圖書館羅列的常用電子資源匯入教學,其中大部分也都能用在Zotero上。

現在學校的研究方法教學仍是以EndNote為主。我個人並不是很喜歡EndNote,而習慣使用Zotero。一方面是因為EndNote對中文支援仍有待改善(這是我三年前對它的印象,現在應該有改進了吧?),另一方面,我認為作為未來仍會長時間使用的書目管理工具來說,EndNote會受限於只有學校才能購買的窘境,而Zotero則沒有這方面的困擾。到現在,還是偶爾會有畢業的同學找我索取學校的EndNote,而這種學校外使用的違法行為,當然不是你我願意看到的事情。既然如此,為何不要一開始就用免費的Zotero呢?

希望這些教學能夠幫助大家輕鬆地從EndNote跳到Zotero,快快樂樂地寫論文。加油。

(more...)

GLPI管理知識庫類別教學 (knowledge base categories)

布丁布丁吃布丁

0 Comments

GLPI管理知識庫類別教學 (knowledge base categories)

以下是GLPI 0.80.2管理知識庫(Knowledge base)的類別(categories)的教學。


GLPI建立類別(category)並不太直覺,連管理類別的功能也讓我找了老半天。

image

如果要管理知識庫的類別,位置是在「主頁 > 設定 > 下拉列表」的「工具 > 類別」中。

image

你就可以看到所有建立好的類別。

2011-09-05_232244 edit

點選類別的名字,就能進入該類別,執行編輯更新或刪除的動作。

(more...)

GLPI 新增知識庫教學 (knowledge base)

布丁布丁吃布丁

0 Comments

GLPI 新增知識庫教學 (knowledge base)

以下介紹GLPI 0.80.2新增知識庫(knowledge base)文章的教學。儘管有些複雜,但大致上GLPI的知識庫還算是堪用吧。

1. 登入並進入知識庫

image

請以有權限的使用者登入,並進入「主頁 > 工具 > 知識庫」中。

新增的按鈕在上方,一個小小的「+」圖示。

2. 建立知識庫文章

image

在建立知識庫文章頁面中,你可以為它設定「類別」、「標題」、「內容」。必須先建立文章之後,才能為該文章上傳文件。

2-1. 類別

image 

你可以用下拉式選單,選擇需要的類別。

如果要建立新的類別的話,請按右邊小小的「+」圖示。

image

在建立類別中,你可以設定名稱、備註,以及該類別的上層類別。例如我建立一個「測試2」類別,然後將上層類別選擇為「測試」,那麼在「測試2」類別中附屬在「測試」類別中。

新增完之後,視窗會回到剛剛的新增知識庫文章頁面,此處還要記得選擇剛剛新增的類別。

2-2. 標題與內容

image

「標題」是無格式的文字框;「內容」則可以HTML格式保存,但此處不能上傳圖片。請將「內容」當做是簡單說明來撰寫,複雜的知識庫文章,請另外儲存成文件檔案,稍後再上傳到文章中。

3. 上傳文件

接著要教的是如何上傳文件。首先你必須先找到剛剛新增的文章。

image

剛剛新增的文章,會在「主頁 > 工具 > 知識庫」左下角的「最近的文章」列表中,請點文章標題進入該文章。

image

文章下方即可上傳文件。

image

上傳完之後會顯示上傳成功的訊息。而下方相關文件則會顯示剛剛上傳的檔案。值得慶幸的是,以中文命名的文件也不會變成亂碼喔。

4. 調整上傳文件的檔案大小上限

image

GLPI可上傳的檔案大小受限於伺服器PHP參數設定的限制,預設最大只能上傳2MB。

如果要增加可上傳大小,請調整php.ini檔案中的upload_max_filesize參數跟post_max_size參數(兩個都要調整才有用喔),例如設定為100M,那麼可上傳的大小就會擴大到100MB。

php.ini的位置,在Linux中的路徑通常是/etc/php.ini;在Windows中的路徑通常是在C:\Windows\php.ini。

調整php.ini之後,還需要重新啟動Apache網頁伺服器才會生效。

關於知識庫的中文搜尋功能

GLPI有全文搜尋系統,可以搜尋標題與內容這兩個欄位。但是他並沒有中文斷詞,因此無法搜尋一連串中文句子中的某些單字。如果是很重要的單字,請盡量以 空格 斷開,好讓GLPI搜尋時能夠順利找到。

(more...)

GLPI 完全刪除使用者教學 (user)

布丁布丁吃布丁

0 Comments

GLPI 完全刪除使用者教學 (user)

以下說明GLPI 0.80.2中完全刪除使用者的步驟。

1. 登入並進入使用者頁面

2011-09-03_225713

請以超級管理者(super-admin)的使用者身分登入GLPI,然後進入「主頁」 > 「管理」 > 「使用者」 頁面。

接著點選你要刪除的使用者的登入名稱。

2. 刪除使用者

image

在使用者資訊右下角有個「刪除」的按鈕,請點此按鈕刪除使用者。

但是光是這樣子,使用者的資訊並沒有完全清除,其實還保留在資料庫當中。

3. 顯示已刪除的使用者

image

在使用者列表上方,請點選小小的垃圾桶按鈕。

image

接著就會列出已經被刪除的使用者。請點選確定要清除資料的使用者,點選他的登入名稱。

4. 清除使用者

image

在已刪除的使用者資訊右下角,有一個「清除」按鈕。點下此按鈕之後,使用者才算是完全刪除。

你也可以按下「恢復」按鈕,復原已刪除的使用者資料。

image

按下「清除」之後,就會看到「項目清除成功」的資訊,表示該使用者已經完全刪除了。

如果要回到使用者列表,請再按下垃圾桶按鈕即可。

(more...)

GLPI新增超級管理者 (super-admin) 教學

布丁布丁吃布丁

10 Comments

GLPI新增超級管理者 (super-admin) 教學

image

GLPI(Gestion Libre de Parc Informatique)是一套給資訊管理人員使用的資產管理系統。母語是法文,也有中文的翻譯介面。GLPI不僅具備IT管理的功能,也有知識管理用的「知識庫」。現在我一邊使用這個系統,一邊把一些不容易操作、需要說明的部份寫成知識庫,作為後人使用GLPI時的指引。

在此使用的是GLPI 0.80.2。正體中文語系檔是我自己修改過的版本,因此用詞有些不同,下面會再說明。


適用狀況

GLPI可以設定不同權限的使用者(user)。一開始新增使用者時,預設的權限是post-only,能做到的事情很少。如果要讓使用者能夠使用所有的管理功能,必須給他super-admin權限才行。

接下來開始說明各個步驟。因為我並沒有很仔細地去確認各個功能的意義,主要是將操作的步驟寫出來而已。畢竟GLPI有些複雜,沒有太多時間去摸熟所有功能。如有寫錯的地方,請不吝指教,我會儘快修正。

用詞說明

原本我使用的GLPI語系檔@version $Id: zh_TW.php 14708 2011-06-21 06:28:45Z moyo $中,有時候將「用戶」翻譯為「使用者」,總覺得不是很統一。「用戶」是中國大陸的用詞,臺灣這邊主要是以「使用者」為主。

此外還有「授權」、「外部連結」等零零總總許多翻譯都看起來很奇怪。我一邊修改這個語系檔,一邊把他上傳到SkyDrive。等到改到自己覺得合適時,我再發佈這個訊息。

如果你使用的是moyo的版本,那麼有些用詞看起來會不太一樣,這是因為我這邊介紹的是修改過的版本的關係。


以下開始介紹如何新增超級管理者

1. 以管理者登入

image

GLPI安裝好之後通常會有預設的超級管理者,預設是:

  • 帳號:glpi
  • 密碼:glpi

請先以超級管理者的使用者身分登入GLPI吧。

2. 新增使用者

image

接著到「主頁」>「管理」>「使用者」中。

image

進入「新增使用者」。

image

建立新的使用者。必須注意的是,右邊欄位的「密碼」即使沒有填也能新增,只是該使用者就無法登入。請記得要填一下密碼喔。

寫完之後就按下「新增」按鈕吧。

image

順利的話就能看到新增成功的訊息。

3. 新增權限使用者

image

回到「主頁」>「管理」>「使用者」頁面,點選剛剛新增的使用者的名字。

image

確認是在權限的頁籤中。

image

在使用者資訊下方,有個「新增權限給使用者」的區塊。請將「個人配置」選擇「super-admin」,然後按下右邊的「新增」按鈕。

image

確認底下的權限列表已經有了「super-admin」即可。

4. 以新增的使用者登入

image

為了測試新的使用者是否能正常登入,首先先要登出目前的使用者。「登出」的功能在右上角。

image

接著以剛剛新增的使用者名稱與密碼登入。

image

一開始登入時,只會看到「post-only」權限可以使用的功能。

如果要改變權限,請在導覽列下方的下拉式選單中,選擇「super-admin」的權限。

image

改為「super-admin」之後,就能看到所有功能了。

(more...)

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