2008年12月16日 星期二

[ZeroShell] QoS 設定

前言

QoS(Quality of Service) 的用途為流量管理,功能在於確保特定服務、特定主機可以根據管理者設定的規則,讓頻寬可以得到保證,相對也可以更穩定的提供服務,當然也可以用來杜絕相當耗損頻寬的軟體。(例如:eMule、BT …. 等等)

扮演流量管理的主機,必須位於兩個不同的網路區段之間(可以是同網段,只是實體是隔開的),因此通常提供 QoS 功能的都 Router(連結不同網段) 或是 Bridge(連結相同網段),而在不同的網路區段中互相傳輸的網路封包,就會受到 QoS 中的規則所規範。

 

設定時注意事項

在進行 QoS 的設定時,首先必須要先瞭解 QoS 的設定限制,並不是很簡單的直接設定上傳下載的限制即可(如果有,就是有人提供了很方便的設定工具才有辦法達成)。

QoS 的設定限制,在於「只能限制往外傳的流量,無法限制接收到的流量」。就像寄信一樣,你可以限制自己不要寄很多信,但是卻無法阻止別人寄很多信給自己。

瞭解 QoS 的限制後,在設定時就不會發生觀念錯誤而導致設定後結果不如預期的情形產生。

 

QoS 如何作到雙向流量管控

知道了 QoS 的管控限制後,雙向流量管控的需求還是在,但是要如何作呢? 以下先列出網路架構圖:

假設以外部 client(Windows XP,10.1.16.200) 到內部 server(Ubuntu,192.168.100.20) 的流量為例,假設內部 server 提供了 FTP 的服務,而若是要使用 QoS 來管控 client 的上傳與下載,就必須從兩個方面著手:

  1. client 的下載
    此時網路流量是由內部 server 傳到外部,若以 QoS 僅能管控外傳流量的限制為前提下,就必須從 ETH00(10.1.16.222) 網路介面來著手,藉由管控從 ETH00 網路介面流出的網路流量,來達到管控 client 下載流量的目的。

  2. client 的上傳
    反之若要管控 client 的上傳流量,就必須改從 ETH01(192.168.100.254) 介面來著手,藉由管控從 ETH01 網路介面的外傳流量,來達到管控 client 上傳流量的目的。

因此從上面的案例說明就可以瞭解,若要達到同時控管上下傳的流量,就必須要從不同的網路介面卡上著手。

 

ZeroShell 的 QoS 設定

ZeroShell 提供了 QoS 的功能,甚至還可以跟 Layer 7 的協定搭配使用,功能可說是相當強大,以下是我們的設定案例:

Client:Windows XP (10.1.16.200)

Server:Ubuntu (DMZ:10.1.16.224 –> 192.168.100.20)

其中 Server 提供了 FTP 服務,我們要使用 QoS 作到限制 client 上傳流量為 2048 Kbits/s,下載流量為 512 Kbits/s

,但在設定上稍嫌複雜,因為 ZeroShell 並沒有簡化原有 QoS 的相關設定,還是必須分成以下四個部份進行設定:

1、QoS 功能的啟用

首先必須要啟用 QoS 的功能:

選擇「NETWORK –> QoS –> Interface Manager」,進入網路介面的設定,將要管控流量的網路介面勾選啟用,並按下「Activate last Changes」儲存設定。

此外,還可以按下「Global Bandwidth」設定該網路介面的最大頻寬與保證頻寬。

 

2、設定 QoS 類別

接著要設定 Qos 類別,主要是要設定類別的相關描述以及頻寬上限的設定,選擇「Class Manager」:

接著會出現以下設定畫面:

下方可以看到一個內建的預設類別,按「New」可以新增一個類別。

首先要先輸入類別名稱:(首先要設定 FTP 上傳的類別,因此輸入「FTP_UP」)

接著要輸入類別的詳細資訊:

畫面中所要輸入的包含 Description(類別描述)Priority(封包優先權)Maximum(最大使用頻寬)Guaranteed(保證頻寬) … 等等,根據我們的模擬測試,要將優先權設定為中,最大使用頻寬設定為 2048 Kbits/s,設定完畢後要記得按「Save」儲存設定。

接著要加入 FTP 下載的類別(FTP_DOWN),相關設定畫面如下:

 

3、設定 QoS 類別與規則的對應

QoS 類別設定完後,就必須要設定封包檢查規則,並與 QoS 類別對應,選擇「Classifier」:
 

按下「Add」新增封包檢查規則,就會出現以下畫面:

針對以上有使用到的設定僅行仔細說明:

  • Apply to:Routed and Bridged Packets
    這個設定表示無論 ZeroShell 扮演的是 router 或是 bridge,只要有網路封包流經都必須由 QoS 管控。

  • Input & Output
    這個部份就要特別注意了,因為「QoS 僅能管控外傳的網路流量」的緣故,途中設定 Output 為 ETH01,表示要管制從 ETH01 外傳的網路流量,亦即 client 的上傳流量。

  • Layer 7 Filter:FTP – File Transfer Protocol – RFC 959
    設定與 L7-Filter 搭配,用來判斷是否 FTP 的流量。(使用 TCP port 21 未必就真的是 FTP 的流量)

  • TARGET CLASS:FTP_UP
    選擇要繫結的 QoS 類別。(由於此處設定的判斷規則為 client 的 FTP 上傳流量,因此選擇 FTP_UP)

  • LOG:5 Minute
    是否啟用 log 功能,此處選擇每 5 分鐘 log 一次。

最後記得要按「Confirm」儲存 QoS 的規則設定。

了解設定方式後,設定檢查 FTP 下載的規則就容易多了:

 

4、將 QoS 類別與網路介面繫結

當規則繫結到 QoS 類別後,最後就要將 QoS 類別與網路介面進行繫結,選擇「Interface Manager」:

找到所要繫結的網路介面,並按下右邊的「Add Class」新增繫結:

這裡需要注意兩點:

  • client FTP 下載是管控 ETH00 的對外流量,因此將 FTP_DOWN 繫結到 ETH00 上

  • client FTP 上傳是管控 ETH01 的對外流量,因此將 FTP_UP 繫結到 ETH01 上

最後確定 QoS 服務有啟用,按下「Activate last Changes」就完成設定了。

 

Qos 使用成效檢驗

到底設定 Qos 效果如何,以下有截下幾張圖來說明,首先為尚未開啟 QoS 功能時,client 的上傳與下載大概都有 8~9 MBytes/s 的速度:

上面設定將上傳限定為 2048 Kbits(256 KBytes)/s,開啟 QoS 後的實際速度為:

下載限制的部份為 512Kbits(64 KBytes)/s,開啟 Qos 後的實際速度為:

因此看得出來,QoS 也不是相當的精確,實際上在傳輸時,速度還是會上上下下一個範圍在傳輸(大約 10%),但最大是肯定沒有超過上面設定所設定的最大頻寬,可見 QoS 的設定是有成功的。

1 則留言:

  1. 一個小問題,請問,如果內網有多台FTP的話,這個設定是對每台FTP分別限制,還是對其總流量限制?

    回覆刪除