企業網路常面臨頻寬濫用或關鍵業務搶佔資源的問題。Linux 核心內建的 TC (Traffic Control) 提供強大的流量整形能力。本文系統介紹 TC 核心概念(qdisc、class、filter)、HTB 階層式令牌桶原理,並示範結合 iptables 標記實現針對特定 IP 的差異化頻寬控制。
fwmark (iptables 標記) 或 u32 (封包頭匹配)。封包 → iptables (打標記 mark) → TC class → TC queue → 網卡驅動
# 1. 根 qdisc (HTB),handle 1:,預設 class 1
tc qdisc add dev eth0 root handle 1: htb default 1
# 2. 建立 class:保證 2Mbps,上限 4Mbps,優先級 2
tc class add dev eth0 parent 1: classid 1:30 htb rate 2mbit ceil 4mbit prio 2
# 3. iptables 標記特定 IP 流量
iptables -t mangle -A POSTROUTING -s 192.168.1.100 -j MARK --set-mark 30
# 4. filter 將 mark 30 導入 class 1:30
tc filter add dev eth0 parent 1: protocol ip prio 1 handle 30 fw flowid 1:30
關鍵參數:rate 保證頻寬(所有子類總和 ≤ 父類),ceil 借用上限,prio 數值越小優先級越高。