Linux
使用 TC qdiscs 的 QoS:是否可以讓所有出站連接對每個唯一 IP 有 x 速度限制?
我正在嘗試在我的 VPS 中設置 QoS,以便我可以有任何新的到唯一 IP 的出站連接得到有限的 x 速度。
例如:
- 有 5 個公共 IP 從我的 VPS 請求數據。
- 當 VPS 將數據發送回每個 IP 時,每個 IP 獲得 10mbps 的專用出站頻寬速度。
- 永遠不要丟棄數據包,而是在客戶端超過 10mbps 時將它們排隊。
我不想將整個 eth0 埠的出站速度限制為 10mbps,我希望每個單獨的公共 IP 獲得 10mbps。
我經常有不同的公共 IP 聯繫我的 VPS,所以我寧願不必編寫靜態規則,這會迫使我為每個 IP 單獨編寫每個頻寬規則。
TC qdisc 可以做到這一點嗎?
我已經查看了似乎是 HTB qdics 的典型設置,它允許我擁有過濾器等。但似乎看不到描述我想要的範例或文獻。
我正在使用 ubuntu 伺服器 14.04。
更新
一旦我了解了 TC qdiscs 的工作方式,我就做了以下事情。
我用於基本設置的命令似乎工作得非常順利,因為數據包沒有丟棄而是進入令牌桶(注意:這不是高度優化但似乎執行得很好):
tc qdisc add dev eth0 root handle 1: htb default 11 tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit tc class add dev eth0 parent 1: classid 1:2 htb rate 20mbit tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 1.2.3.4 flowid 1:1 tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 2.3.4.5 flowid 1:2
我不知道會直接執行此操作的 QDISC。使用 CBQ/HTB/HFSC,您最多可以創建數量有限的 10mbps 類,然後將 IP 雜湊過濾到其中。除了顯然會發生的雜湊衝突之外,它會起作用。
運氣好的話,您可以直接在源(例如,在網路伺服器中)設置此類限制。
但是,如果它不是真的關於速率限制,而是在客戶端之間保持公平,那麼使用 SFQ/ESFQ 可能會更好。雖然它沒有限制,但它確實提供了一種平衡。