You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为指定本地主机限制带宽?tc与iptables配置衔接疑问

你已经找对思路啦!用iptables标记特定主机的数据包,再配合tc的分层队列就能实现精准的带宽限制,不用影响整个接口的设备。下面是完整的操作步骤:

实现特定本地主机的带宽限制

1. 清理原有tc配置(可选但推荐)

避免之前的残留规则干扰,先重置目标接口的队列规则:

tc qdisc del dev $IF root

记得把$IF换成你的实际接口名,比如路由器的eth0或者桥接接口br0。

2. 添加根队列(使用HTB分层令牌桶)

直接用TBF会限制整个接口,我们需要用HTB来创建可分类的根队列,这样能把不同主机的流量分到不同的限速组:

tc qdisc add dev $IF root handle 1: htb default 10

这里handle 1:是根队列的标识,default 10表示未标记的流量会走默认类1:10(我们不给这个默认类限速,所以其他主机不受影响)。

3. 创建专属限速类

给你要限制的主机段(192.168.1.128/25)创建一个专属的流量类,设置你想要的带宽和突发值:

tc class add dev $IF parent 1: classid 1:10 htb rate 100kbps burst 1mb

这个classid 1:10就是你之前iptables命令里要关联的类标识,一定要对应上!

4. 给限速类添加队列优化(可选)

为了让限速后的流量更平滑,减少延迟波动,可以给这个类加一个先进先出队列:

tc qdisc add dev $IF parent 1:10 handle 10: pfifo limit 100

5. 用iptables标记目标主机的数据包

你之前的命令只差一点细节(注意--dst前面不要加反斜杠),如果是出站流量(本地主机访问外网的流量),用这条:

iptables -t mangle -A POSTROUTING -d 192.168.1.128/25 -j CLASSIFY --set-class 1:10

如果是入站流量(外网访问这些本地主机的流量),要把POSTROUTING换成PREROUTING:

iptables -t mangle -A PREROUTING -d 192.168.1.128/25 -j CLASSIFY --set-class 1:10

6. 验证配置是否生效

查看tc的队列和类规则:

tc class show dev $IF
tc qdisc show dev $IF

查看iptables的标记规则:

iptables -t mangle -L POSTROUTING -v

取消限制的方法

如果后续要移除限速,先删除iptables规则,再清理tc配置:

# 删除出站流量标记规则
iptables -t mangle -D POSTROUTING -d 192.168.1.128/25 -j CLASSIFY --set-class 1:10
# 清理tc配置
tc qdisc del dev $IF root

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:17:03