徒手打造pfSense負載平衡器

目前光纖線路因價格下降已慢慢地被市場接受,但配置固定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規則。

接著是重點中的重點:同樣再新增一筆記錄,其他的部分都與方才的設定相同,但是在Interface部分,務必記得設定為OPT1。

在完成這兩項設定後,不管是透過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規則。

設定Load Balancer

設定流程至此幾乎都已經完成,經筆者測試,此時已經可以讓外部的主機在連入本地FTP Server時做到by session的負載平衡,但為了做到by packet的負載平衡。建議把Load Balancer的設定也繼續完成。

接下來,選擇Services中的Load Balancer,如圖26所示。


▲圖26 設定Load Balancer。

然後,選擇Pools(參考圖26),並點選最後的+號圖示來新增一筆設定。

緊接著,在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。

設定完成後,在Members的Enabled (default)欄位中會有203.70.181.248及123.204.45.73這兩個成員。

之後選擇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的方式檢查外對內負載平衡。

隨後,從外部主機連線至自己的FTP Server下載檔案,並點選Status中的RRD Graphs,以便觀察流量圖。如圖30所示,從中可以發現,在WAN和OPT1的流量圖中同時均有out-pass的流量,此結果代表by packet的負載平衡確實已經生效。


▲圖30 負載平衡流量圖。

結語

在配置固定IP的光纖線路單價仍高的此時,負載平衡的使用不啻在頻寬提升及費用降低兩難之間出現一道曙光。但過於昂貴的設備及不易設定的Linux(FreeBSD)又讓這一道曙光頓時黯淡不少。所幸pfSense適時出現,讓負載平衡成為一個唾手可得且易於實現的目標。

除了負載平衡外,pfSense也具有足以取代防火牆及VPN Server的功能。但不可諱言地,pfSense相較於目前市場上廣受歡迎的UTM,仍有著較不易親近、可能較不穩定及較耗電的問題。要如何取捨,端賴網管和MIS人員謹慎地取捨。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!