Ubuntu 20.04.4 LTS下tc命令无法限制下载速度的问题咨询
Ubuntu 20.04.4 LTS下tc命令无法限制下载速度的问题咨询
你好!我看到你在Ubuntu 20.04.4 LTS上尝试用tc命令给特定IP(10.0.0.162)设置上传和下载带宽限制,但目前只有上传限制生效,下载流量没受影响,还疑惑是不是下载限制和Linux版本有关。咱们来拆解这个问题:
先说说你当前配置的问题核心
tc对上传和下载流量的处理逻辑是不一样的:
- 上传流量是从你的机器发出去的,直接在网卡的出口(egress) 规则里处理,你之前的上传限制配置是对的,所以能生效;
- 下载流量是从网卡接收进来的,默认的root qdisc只处理出口流量,你之前把下载限制的规则挂在出口root下,自然不会对入口的下载流量生效。
关于Linux版本的疑问
先给你吃个定心丸:Ubuntu 20.04.4 LTS的默认内核(5.4.x系列)完全支持tc的入口流量控制功能,下载限制失效和系统版本没关系,只是配置逻辑没走对。
给你修正后的完整配置步骤
先清理掉现有规则避免冲突:
sudo tc qdisc del dev ens33 root sudo tc qdisc del dev ens33 ingress
1. 配置上传(出口)带宽限制
这部分和你原来的逻辑一致,稍作优化:
# 给ens33添加root级别的htb qdisc sudo tc qdisc add dev ens33 root handle 1: htb default 10 # 添加针对目标IP 10.0.0.162的上传限制类(1Mbit) sudo tc class add dev ens33 parent 1: classid 1:12 htb rate 1Mbit # 添加过滤规则,把发往10.0.0.162的流量导向限制类 sudo tc filter add dev ens33 protocol ip parent 1: prio 1 u32 match ip dst 10.0.0.162 flowid 1:12
2. 配置下载(入口)带宽限制
入口流量需要借助ifb虚拟网卡来实现(因为htb无法直接在入口qdisc上使用),步骤如下:
# 加载ifb内核模块,创建1个虚拟网卡 sudo modprobe ifb numifbs=1 # 启动ifb0虚拟网卡 sudo ip link set dev ifb0 up # 给ens33添加入口qdisc,用来捕获下载流量 sudo tc qdisc add dev ens33 ingress handle ffff: # 添加过滤规则,把来自10.0.0.162的下载流量重定向到ifb0 sudo tc filter add dev ens33 parent ffff: protocol ip prio 1 u32 match ip src 10.0.0.162 action mirred egress redirect dev ifb0 # 在ifb0上添加root级别的htb qdisc,处理重定向过来的流量 sudo tc qdisc add dev ifb0 root handle 1: htb default 10 # 添加下载限制类(1Mbit) sudo tc class add dev ifb0 parent 1: classid 1:13 htb rate 1Mbit # 添加过滤规则,把ifb0上的所有流量导向限制类(因为已经是重定向过来的目标流量了) sudo tc filter add dev ifb0 protocol ip parent 1: prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:13
配置完成后,你再测试和10.0.0.162之间的上传、下载速度,应该都能被限制在1Mbit左右了。
备注:内容来源于stack exchange,提问作者Jakob
相关产品推荐
相关产品推荐

