tc无法直接限下行(ingress)流量,必须用ifb虚拟设备将入向流量重定向至ifb0的egress路径再限速;规则须绑定真实网卡如ens33,且需sudo权限、先清空原有qdisc、导出脚本并配置systemd服务实现持久化。

麒麟OS局域网内某台设备持续占用大量带宽导致其他用户网页卡顿、视频缓冲,需在服务端对指定IP或MAC地址实施下载限速,避免全局网络拥塞。
使用tc命令对单个IP做下行限速
这一步直接控制网卡入向流量,适用于已知目标设备IPv4地址且需快速生效的场景。
1、确认本机对外网卡名:执行 ip -br a | grep UP,记下如 ens33 或 eth0 这类处于UP状态的有线接口名。
2、清空该网卡原有qdisc配置(避免冲突):sudo tc qdisc del dev ens33 root 2>/dev/null(若提示“No such device”请替换为实际网卡名)。
3、创建HTB根队列并设定总出口带宽上限:sudo tc qdisc add dev ens33 root handle 1: htb default 30。注意:此处ens33必须与上步一致,写错将导致命令静默失败。
4、添加针对目标IP的子类规则(以限速1Mbps为例):sudo tc class add dev ens33 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit。
5、用u32过滤器将目标IP(如192.168.1.105)所有入向数据包导向该子类:sudo tc filter add dev ens33 parent 1: protocol ip u32 match ip dst 192.168.1.105 flowid 1:1。
通过firewalld+tc实现按应用协议限速
当无法固定设备IP,但能识别其下载行为特征(如HTTP/HTTPS大文件传输)时,此方法更稳定。
方法一:标记HTTP(S)流量后限速
1、用firewalld给目标端口出向包打标记:sudo firewall-cmd --direct --add-rule ipv4 mangle OUTPUT 0 -p tcp --dport 80 -j MARK --set-mark 1;再加一条对443端口的同理命令。
2、创建基于标记的tc规则:sudo tc qdisc add dev ens33 root handle 1: htb default 10 → sudo tc class add dev ens33 parent 1: classid 1:1 htb rate 512kbit ceil 512kbit → sudo tc filter add dev ens33 parent 1: protocol ip handle 1 fw flowid 1:1。
方法二:临时禁用标记(调试用):sudo firewall-cmd --direct --remove-rule ipv4 mangle OUTPUT 0 -p tcp --dport 80 -j MARK --set-mark 1。
永久保存tc限速规则
重启后tc规则自动丢失,必须导出并设置开机加载。
1、将当前tc配置导出为脚本:sudo tc qdisc show dev ens33 | sudo tee /usr/local/bin/tc-limit.sh > /dev/null;再补全完整命令序列(含qdisc add/class add/filter add),确保可重复执行。
2、赋予执行权限:sudo chmod +x /usr/local/bin/tc-limit.sh。
3、创建systemd服务单元:sudo nano /etc/systemd/system/tc-limit.service,填入:
[Unit]
Description=Apply TC bandwidth limit
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/tc-limit.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
4、启用服务:sudo systemctl daemon-reload → sudo systemctl enable tc-limit.service → sudo systemctl start tc-limit.service。
【注意:若系统使用Netplan或NetworkManager管理网络,务必确认tc规则绑定的网卡名在每次网络重连后不变,否则需配合nmcli connection down/up触发重载】

















