如何設置Linux網絡QoS 流量控制與限速配置

linux中設置網絡qos和流量控制的核心方法是使用tc命令結合htb和iptables進行限速與流量分類。1. 使用tc命令進行基礎限速配置,包括清除已有規則、添加根隊列規則、創建主類與子類、綁定過濾器以實現對特定端口(如http服務80端口)的限速;2. 利用htb實現靈活帶寬管理,通過父子結構設定最低保障帶寬和最大帶寬,確保不同服務(如web與ftp)之間互不干擾;3. 結合iptables打標記并配合tc的u32過濾器,實現基于ip地址或用戶的精準流量分類與控制;4. 注意事項包括確認設備名、清空舊規則、重載策略及采用iperf等工具測試限速效果,建議將常用命令整理為腳本以便調試與重復使用。

如何設置Linux網絡QoS 流量控制與限速配置

linux系統中設置網絡QoS(服務質量)和流量控制,其實并不像聽起來那么高深。它的核心目的就是通過限速、優先級劃分等手段,合理分配帶寬資源,防止某些應用或用戶占用全部帶寬影響整體體驗。尤其在服務器、路由器或者需要多任務并行的場景下,這項技能非常實用。

如何設置Linux網絡QoS 流量控制與限速配置


1. 使用 tc 命令進行基礎限速配置

Linux下的流量控制主要依靠一個叫 tc(traffic control)的命令行工具。它是iproute2包的一部分,大多數發行版默認已經安裝了。

如何設置Linux網絡QoS 流量控制與限速配置

基本操作流程如下:

  • 清除已有規則(避免沖突):

    如何設置Linux網絡QoS 流量控制與限速配置

    tc qdisc del dev eth0 root
  • 添加根隊列規則(使用HTB):

    tc qdisc add dev eth0 root handle 1: htb default 12
  • 創建主類(例如總帶寬為100mbit):

    tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
  • 創建子類(例如限制某個應用為10mbit):

    tc class add dev eth0 parent 1:1 classid 1:12 htb rate 10mbit
  • 綁定過濾器(根據端口或其他條件匹配流量):

    tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:12

上面的例子是給HTTP服務(端口80)限速到10Mbps。你可以根據實際需求修改端口、IP地址或協議。


2. 利用HTB實現更靈活的帶寬管理

HTB(Hierarchical Token Bucket)是一種分層式令牌桶算法,非常適合做帶寬分配和優先級控制。

HTB的優勢在于:

  • 支持父子結構,方便組織不同等級的服務
  • 可以設定最低保障帶寬和最大帶寬
  • 能夠配合過濾器對特定流量做精細控制

比如你有一臺服務器要同時跑Web服務和FTP服務,就可以分別創建兩個子類,各自設置不同的帶寬上限,并且保證即使其中一個占滿也不會完全擠占另一個的資源。

舉個例子:

# 添加主類,總帶寬100mbit tc class add dev eth0 parent 1:1 classid 1:10 htb rate 60mbit ceil 100mbit # 添加子類,用于Web服務,最低30mbit,最高50mbit tc class add dev eth0 parent 1:1 classid 1:11 htb rate 30mbit ceil 50mbit

這樣做的好處是,在帶寬充足時,Web可以跑到50M,但在緊張時至少能保證30M。


3. 結合 iptables 實現更精確的流量分類

有時候光靠端口不夠,我們還需要結合 iptables 來打標記(mark),再通過 tc 的u32過濾器來識別這些標記。

大致步驟如下:

  • 用 iptables 打標記:

    iptables -t mangle -A POSTROUTING -d 192.168.1.100 -j MARK --set-mark 10
  • 在 tc 中根據這個標記做匹配:

    tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10

這樣一來,所有發往192.168.1.100的數據包都會被歸類到特定的流量控制策略里,實現基于IP地址或用戶的限速。


4. 注意事項與常見問題

雖然 tc 功能強大,但也有一些細節容易忽略:

  • 設備名寫錯:很多同學忘了自己網卡名字是 eth0 還是 ens33,可以用 ip link show 查看。
  • 規則沖突不清空:每次修改前最好先執行 tc qdisc del dev eth0 root 避免沖突。
  • 忘記重載規則:修改完后如果沒有重啟網絡或手動重新加載腳本,規則不會生效。
  • 測試方法不當:可以用 iperf 或 dd if=/dev/zero | nc 模擬流量來驗證限速是否起作用。

基本上就這些。Linux的流量控制機制不算復雜,但涉及的參數和邏輯比較多,稍微不注意就容易出錯。建議把常用的命令整理成腳本,方便重復使用和調試。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享