使用tc命令结合htb可限制Linux网卡出站带宽,如将eth0上传限速至1Mbps;通过ifb设备间接限制入站流量,实现下载限速;也可用wondershaper简化操作。
在Linux系统中限制网卡的速率和带宽,通常使用
tc
(Traffic Control)命令结合
htb
(Hierarchical Token Bucket)队列规则来实现。这种方法可以精细控制网络接口的上传和下载速度,适用于测试环境、带宽管理或防止某个服务占用过多网络资源。
使用tc命令限制网卡出站带宽(上传)
限制从本机发出的数据速率(即上传速度),可以通过在指定网卡上设置
htb
规则来完成。
例如:将
eth0
网卡的出站带宽限制为1Mbps。
tc qdisc add dev eth0 root handle 1: htb default 10 tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
说明:
-
qdisc add
添加一个队列规则,
root
表示作用于网卡根队列。
-
handle 1:
是该队列的标识符。
-
htb
是常用的可控制带宽的队列类型。
-
classid 1:1
定义一个类,限制速率为1mbit(即1Mbps)。
如果规则已存在,需要先清除:
tc qdisc del dev eth0 root
限制入站带宽(下载)的技巧
tc
不能直接限制入站流量(inbound),因为数据在进入网卡后才被系统控制。但可以通过
ifb
(Intermediate Functional Block)设备来间接实现。
步骤如下:
- 加载
ifb
模块并创建虚拟设备:
modprobe ifb ip link add name ifb0 type ifb ip link set ifb0 up
- 将入口流量重定向到
ifb0
:
tc qdisc add dev eth0 ingress tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
- 在
ifb0
上设置限速规则(如限制为512kbps):
tc qdisc add dev ifb0 root handle 1: htb tc class add dev ifb0 parent 1: classid 1:1 htb rate 512kbit
查看和删除限速规则
查看当前网卡的队列规则:
tc qdisc show dev eth0 tc class show dev eth0
删除所有规则(恢复原始状态):
tc qdisc del dev eth0 root tc qdisc del dev eth0 ingress tc qdisc del dev ifb0 root ip link del ifb0
使用工具简化操作(可选)
也可以使用更简单的工具如
wondershaper
,适合快速上手。
安装(以Ubuntu为例):
sudo apt install wondershaper
限制
eth0
上传1000kbps,下载500kbps:
wondershaper eth0 1000 500
清除限制:
wondershaper clear eth0
基本上就这些。使用
tc
能更灵活地控制网络流量,而
wondershaper
适合快速部署简单限速策略。