linux网卡出向限速核心是tc挂载egress qdisc,tbf适合全局限速,htb+u32可实现ip/端口级差异化限速,注意单位大小写、root权限及先删后加规则。

Linux 系统中对网卡出向(egress)流量限速整形,核心是使用 tc 在网卡的发送方向挂载队列规则(qdisc),并配合 class 和 filter 实现精细化控制。出向限速是 tc 最原生、最稳定的支持场景,无需额外虚拟设备。
基础全局限速:用 tbf 最简实现
tbf(Token Bucket Filter)适合只做整体出口带宽封顶的场景,比如防止某台服务器发包占满上行链路。
- 将 eth0 出向总带宽限制为 5Mbps,允许短时突发(burst 设为 rate 的约 1/10):
sudo tc qdisc add dev eth0 root tbf rate 5mbit burst 64kb latency 70ms - burst 太小(如仅 1KB)会导致小包频繁丢弃;太大(如 1MB)则限速不灵敏;推荐值 ≈
rate / 10,单位统一用kbit或mbit(注意大小写) - 删除规则:
sudo tc qdisc del dev eth0 root
分层差异化限速:用 htb + u32 filter
当需要按 IP、端口或协议区分限速(例如限制某客户端上传、给 HTTP 流量保底带宽),应使用 htb(Hierarchical Token Bucket)构建树状结构。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 先挂根 htb qdisc:
sudo tc qdisc add dev eth0 root handle 1: htb default 30 - 建主类(代表总可用带宽,设为物理上限或合理值):
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit - 建子类(如限制源 IP 192.168.1.100 的上传速率为 2mbit):
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit - 添加过滤器:注意在出向规则中,
match ip src匹配的是本机发出、**源地址为该 IP 的包**(即该主机作为服务端时,它自己发出的响应包);若要限客户端“上传”,实际应匹配其目的端口或结合 conntrack;更常见做法是匹配目标 IP(dst)或端口:sudo tc filter add dev eth0 parent 1: protocol ip u32 match ip dst 192.168.1.100 flowid 1:10
验证与日常维护
配置后务必检查是否生效,并保留清理入口。
- 查看当前 qdisc:
sudo tc qdisc show dev eth0 - 查看 class 分配与实时速率:
sudo tc -s class show dev eth0(重点关注sent字节数和rate实际值) - 查看 filter 规则:
sudo tc filter show dev eth0 - 一键清空所有规则(慎用):
sudo tc qdisc del dev eth0 root(会移除整个出向队列)
关键注意事项
这些细节常被忽略,但直接影响效果:
- tc 默认只作用于 egress(出向),即本机发出的包;无法直接限制“收到的包”,入向需用 ifb 虚拟网卡转换
- 所有 tc 命令需 root 权限,建议始终加
sudo - 重复执行
tc qdisc add会报错,修改前必须先del;可写成脚本自动判断是否存在再操作 - 限速单位严格区分大小写:
mbit= 兆比特每秒,mbps非标准写法,部分内核版本不识别










