pfSense負載平衡器
Published by knick,
徒手打造pfSense 負載平衡器
目前光纖線路因價格下降已慢慢地被市場接受,但配置固定IP的光纖線路單價仍高,一般中小型企業較難負荷,因此負載平衡仍廣泛運用在各種網路架構上。但大多數的負載平衡設備價格昂貴,並且提供許多一般企業不會用到的功能。Linux或FreeBSD雖可以實作出負載平衡功能,但在維護及設定上較為困難。其實,利用pfSense這一款免費好用的負載平衡器就可解決以上所有的難題。
本文將使用擴充性強大且易於操作及設定的開源防火牆軟體pfSense,把速度慢但有配置固定IP以及速度快但僅提供PPPoE固定IP的兩條線路加以整合,實作出內網對外網及外網對內網的負載平衡功能。
安裝環境及測試架構
pfSense的安裝相當簡單,只須連至pfSense的官方網站(http://www.pfsense.org/)下載其ISO檔後,將之燒錄至光碟。再找一台電腦,使用該光碟開機,便會自動開始其安裝流程。筆者使用的版本為pfSense-2.0.1-RELEASE-i386.iso.gz,讀者可依自己的需求,選擇合適的版本。在安裝時有兩個事項必須注意:
1. 建議安裝至硬碟或記憶卡以便日後管理。
2. 在設定網路時無須設定VLAN(可依本身需求進行調整)。
設定完成後,記得輸入99 (Install pfSense to a hard drive, etc.),將pfSense裝進硬碟或記憶卡。pfSense在2.0之後的版本,對於負載平衡功能的支援更為強大,這也是筆者特別撰文介紹的原因之一。
除了主機板內建的網路卡(sis0)外,筆者新增了兩張網路卡(re0和re1)。sis0是用來連接內網的部分,re0則連接低速但配有固定IP的512K/64K線路,而re1連接的是使用PPPoE方式取得固定IP,速率為12M/3M的線路。
而在測試架構的部分,筆者在內網架設一台IP為192.168.1.101的FTP伺服器(Server)。希望外部的訪客在連線至內部的FTP Server時可以做到負載平衡的效果。
前置作業
pfSense在2.0之後對於負載平衡提供了較完善的功能,但要實現外網至內網的負載平衡,除了pfSense本身提供的功能外,還需要在DNS上動手腳。因此先至Domain Name的註冊網頁進行相關設定,如圖1所示。
▲圖1 網域名稱設定。 |
以上的設定方式是假設讀者的內網有兩種以上的伺服器,因此需要自己架設DNS伺服器。假如讀者只有一種伺服器(如Web Server)提供對外服務並且是使用某些DNS業者的服務(如TWNIC),若指定為DNS代管模式,並設定兩筆名稱相同的A記錄,這些業者就能提供外網對內網查詢時的負載平衡服務。
舉例而言,第一次查詢web.honeypot.idv.tw的IP時,會得到203.70.181.248的結果,在第二次查詢web.honeypot.idv.tw的IP,則會顯示123.204.45.73。這樣就能輕易地達到外對內負載平衡的效果。
為便於讀者理解設定流程,以下繪製了內網對外網負載平衡設定流程圖,如圖2所示:
▲圖2 內網對外網負載平衡設定流程圖。 |
pfSense預設的LAN IP為192.168.1.1,在此不做調整,請依自己的環境進行配置。首先,示範如何設定WAN介面及路由(Gateway)、DNS Server,讓內網的電腦能夠透過pfSense連出Internet,之後再介紹OPT1介面的設定。首先設定WAN介面,先點選Interfaces,再點選WAN,如圖3所示。
▲圖3 設定WAN介面。 |
頁面 2
目前光纖線路因價格下降已慢慢地被市場接受,但配置固定IP的光纖線路單價仍高,一般中小型企業較難負荷,因此負載平衡仍廣泛運用在各種網路架構上。但大多數的負載平衡設備價格昂貴,並且提供許多一般企業不會用到的功能。Linux或FreeBSD雖可以實作出負載平衡功能,但在維護及設定上較為困難。其實,利用pfSense這一款免費好用的負載平衡器就可解決以上所有的難題。
接著,更改「Type」欄位為Static,並於「IP address」填入對應的IP設定203.70.181.248,並選擇適當的遮罩/24(此步驟常被忽略),之後點選「Gateway」後方的「add a new one」,如圖4所示。
▲圖4 設定WAN IP及遮罩。 |
▲圖5 設定Gateway IP。 |
接著便可以設定DNS Server,如圖6所示。首先先點選System,再點選General Setup,然後將DNS Servers的IP資訊填入。
▲圖6 設定DNS Server。 |
至此,pfSense已經可以做為防火牆使用了。然後新增及設定OPT1介面。先點選「Interfaces」,再點選(assign),如圖7所示。隨後,並點選右下角的+號圖示(圖8)。
▲圖7 指定OPT介面。 |
▲圖8 新增一個介面。 |
▲圖9 設定OPT1介面。 |
▲圖10 OPT1相關設定。 |
設定Routing Group
接下來,更改Routing Group的設定,先選擇System中的Routing。開啟後,再選擇Groups。並點選右上角的+號圖示,新增一筆設定(圖11)。
▲圖11 設定Routing Groups。 |
▲圖12 Gateway Priority設定。 |
然後,設定對外的Firewall Rule。先點選Firewall中的Rules,再點選LAN,之後點選右上角的+號圖示,如圖13所示。
▲圖13 設定Firewall Rules。 |
▲圖14 Rules的Gateway設定。 |
頁面 3
目前光纖線路因價格下降已慢慢地被市場接受,但配置固定IP的光纖線路單價仍高,一般中小型企業較難負荷,因此負載平衡仍廣泛運用在各種網路架構上。但大多數的負載平衡設備價格昂貴,並且提供許多一般企業不會用到的功能。Linux或FreeBSD雖可以實作出負載平衡功能,但在維護及設定上較為困難。其實,利用pfSense這一款免費好用的負載平衡器就可解決以上所有的難題。
完成以上的設定後,可以做一個簡單的測試,依序使用IE和Firefox開啟,能夠顯示目前所使用Public IP的網頁,例如「http://checkrealip.com/」,從圖15中可以看出,兩次測試時的Public IP是不同的。
▲圖15 對外Public IP的測試。 |
同樣地,這裡以一個簡單的流程圖來說明如何完成外網對內網的負載平衡設定,如圖16所示。
▲圖16 外網對內網負戴平衡設定流程圖。 |
在前置作業中曾經提到,要實現外網對內網的負載平衡,須仰賴DNS Server的輔助,在此示範如何在pfSense內安裝DNS Server並進行相關設定。
首先要安裝對應的Packages。點選System,並點選Packages,接著找到dns-server,再點選最後面的+號圖示,如圖17所示。
▲圖17 安裝DNS Server。 |
▲圖18 設定DNS Server。 |
▲圖19 設定DNS Server的IP及介面。 |
▲圖20 使用「New domain wizard」完成DNS設定。 |
同樣地,將Second A record IP hostname指定成ftp.honeypot.idv.tw,並在Second A record IP address欄位內設定123.204.45.73,如圖21所示。在此也會發現,可以輸入第三組A記錄,這代表pfSense支援三個介面的負載平衡。
▲圖21 設定ftp.honeypot.idv.tw的A記錄。 |
同樣地,也要設定Firewall Rule,讓從外部進來查詢DNS Server的封包可以進入內網。選擇Firewall的Rules,並選擇WAN的設定。接著,點選右上角的+號圖示來新增一筆rule(之前已設定過,請參考圖13,此次要選擇的是WAN)
在Interface的部分,預設為WAN,不加以變更。在Protocol設定上,理論上選擇UDP即可(DNS預設使用UDP),但為避免萬一,這裡選擇TCP/UDP。而Destination port range部分, from及to設定都選擇DNS,如圖22所示。
▲圖22 設定WAN Firewall rules。 |
設定NAT
緊接著設定NAT,這樣一來,進來的封包才曉得要往哪個IP送。在此選擇Firewall中的NAT,再點選Port Forward,並點選右上角的+號圖示來新增一筆設定(圖23)。
▲圖23 NAT新增一筆Port Forward設定。 |
頁面 4
目前光纖線路因價格下降已慢慢地被市場接受,但配置固定IP的光纖線路單價仍高,一般中小型企業較難負荷,因此負載平衡仍廣泛運用在各種網路架構上。但大多數的負載平衡設備價格昂貴,並且提供許多一般企業不會用到的功能。Linux或FreeBSD雖可以實作出負載平衡功能,但在維護及設定上較為困難。其實,利用pfSense這一款免費好用的負載平衡器就可解決以上所有的難題。
隨後,設定Interface為WAN,Protocol為TCP/UDP,Redirect target IP為127.0.0.1 (與先前設定DNS Server時所bind的IP相同),Redirect target port為DNS,如圖24所示。
▲圖24 設定DNS的NAT規則。 |
在完成這兩項設定後,不管是透過WAN或是OPT1進來的DNS查詢封包,都會往127.0.0.1送,而之前已將DNS Server所bind的IP設定為127.0.0.1,如此一來,當收到DNS查詢的封包時,DNS Server就會回應對應的IP address。
針對FTP服務的部分,也要做對應的設定,如圖25所示,Interface選擇WAN,Redirect target IP要輸入192.168.1.101(內部FTP Server的IP),而Redirect target port選擇FTP。在此,務必記要再新增一筆記錄,並且將Interface指定成OPT1。
▲圖25 設定FTP的NAT規則。 |
設定流程至此幾乎都已經完成,經筆者測試,此時已經可以讓外部的主機在連入本地FTP Server時做到by session的負載平衡,但為了做到by packet的負載平衡。建議把Load Balancer的設定也繼續完成。
接下來,選擇Services中的Load Balancer,如圖26所示。
▲圖26 設定Load Balancer。 |
緊接著,在Name部分輸入ftp-1,Mode設定選擇Load Balance,而Port輸入21,Monitor選擇TCP,Server IP Address輸入203.70.181.248,並再點選Add to pool,之後在此欄位同樣輸入123.204.45.73,並點選Add to pool。最後按下〔Save〕,如圖27所示。
▲圖27 設定Load Balancer Pool。 |
之後選擇Virtual Servers(參考圖26),同樣點選+號圖示新增一筆設定。在IP Address的部分輸入192.168.1.101,Port指定為21,而Virtual Server Pool部分選擇先前設定的ftp-1,Relay Protocol設定成TCP,最後按下〔Submit〕按鈕,如圖28所示。
▲圖28 設定Load Balancer中的Virtual Server。 |
在繁瑣的設定流程完成後(其實熟練之後需要設定的部分並不多),測試一下負載平衡的效果。為便於觀察,必須安裝RRD套件(請參考圖17進行安裝)。
首先,在外部機器使用ping的方式來檢查是否每次查詢時都能對應到不同的IP,如圖29所示。根據實際測試後,結果顯示分兩次查詢ftp.honeypot.idv.tw確實能夠得到不同的IP。
▲圖29 以ping的方式檢查外對內負載平衡。 |
▲圖30 負載平衡流量圖。 |
在配置固定IP的光纖線路單價仍高的此時,負載平衡的使用不啻在頻寬提升及費用降低兩難之間出現一道曙光。但過於昂貴的設備及不易設定的Linux(FreeBSD)又讓這一道曙光頓時黯淡不少。所幸pfSense適時出現,讓負載平衡成為一個唾手可得且易於實現的目標。
除了負載平衡外,pfSense也具有足以取代防火牆及VPN Server的功能。但不可諱言地,pfSense相較於目前市場上廣受歡迎的UTM,仍有著較不易親近、可能較不穩定及較耗電的問題。要如何取捨,端賴網管和MIS人員謹慎地取捨。
http://www.netadmin.com.tw/article_content.aspx?sn=1205110003&jump=1