启动 ifb:

启动 ifb:

我正在尝试使用 IFB 虚拟接口来限制无线接口入口的带宽。我按照说明操作这里

步骤摘要:

启动 ifb:

sudo modprobe ifb numifbs=1
ip link set dev ifb0 up

将 wlp3s0 的入口 qdisc 重定向到 ifb0:

sudo tc qdisc add dev wlp3s0 handle ffff: ingress
sudo tc filter add dev wlp3s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

设置带宽限制为 1 mbps

sudo tc qdisc add dev ifb0 root handle 1: htb default 10
sudo tc class add dev ifb0 parent 1: classid 1:1 htb rate 1mbit

我使用 iperf 测试了设置,但是我能够以 4 Mbps 的速率在物理接口上接收数据(超过了我设置的 1 Mbps 限制)。

你知道我做错了什么吗?我该如何解决这个问题?

答案1

您定义 HTB 默认使用 classid 1:10,然后仅定义 1:1。1:1 从未使用过,因此不存在任何限制。

要么将默认值定义为 1,以达到 classid 1:1,要么添加过滤器以选择性地选择何时达到 1:1。

因此,可以将其重写为:

sudo tc qdisc add dev ifb0 root handle 1: htb default 1
sudo tc class add dev ifb0 parent 1: classid 1:1 htb rate 1mbit

或者保留default 10,但添加指向 1:1 的特定过滤器,例如仅过滤(入口)目标端口 5001,这只会影响iperf -s在此系统上运行,如下所示:

sudo tc filter add dev ifb0 parent 1: protocol ip u32 match ip dport 5001 0xffff flowid 1:1

相关内容