在Linux系统中限制带宽是网络管理的重要任务,适用于服务器流量控制、多用户公平共享或测试网络场景,以下是四种主流方法,操作前请确认具备root
权限,并备份关键数据。
TC(Traffic Control)命令
Linux内核自带的流量控制工具,通过令牌桶算法实现精确限速。
操作步骤:
-
清除现有规则(避免冲突)
tc qdisc del dev eth0 root # 删除eth0网卡的原有规则
-
创建根队列
tc qdisc add dev eth0 root handle 1: htb default 10
handle 1:
:规则编号htb
:分层令牌桶算法default 10
:未分类流量走ID 10的子类
-
创建父类(总带宽限制)
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit ceil 1gbit # 总带宽1Gbps
-
创建子类(限制特定IP)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit ceil 15mbit burst 20k # 限制为10~15Mbps tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.100 flowid 1:10 # 目标IP限速
burst
:突发流量容忍值u32 match
:匹配目标IP的流量
验证规则:
tc -s qdisc show dev eth0 # 查看统计信息
Wondershaper(自动化工具)
简化tc
命令的封装工具,适合快速配置。
安装与使用:
# 限制eth0下载100Mbps,上传50Mbps wondershaper eth0 100000 50000 # 单位Kbps # 清除限制 wondershaper clear eth0
Trickle(应用级限速)
在用户空间限制单个程序的带宽,无需内核权限。
操作流程:
-
安装工具
sudo apt install trickle # Debian/Ubuntu
-
限制
wget
下载速度trickle -d 500 -u 300 wget http://example.com/file.iso # 下载500KB/s,上传300KB/s
IPTables(辅助限速)
结合connlimit
和hashlimit
模块实现基础控制。
示例:限制单IP并发连接数
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP # 限制80端口单IP超过20连接则丢弃
选择建议
方法 | 适用场景 | 精度 |
---|---|---|
TC | 系统级精准控制 | |
Wondershaper | 快速配置整机带宽 | |
Trickle | 限制特定程序 | |
IPTables | 辅助连接数控制 |
注意事项
- 网卡名称确认:使用
ip link
查看实际网卡名(如ens18
可能替代eth0
)。 - 数值单位:
tc
默认单位为bit
,wondershaper
为Kbit
,注意换算(1Byte=8bit)。 - 临时性规则:重启后TC规则失效,需将命令写入
/etc/rc.local
实现持久化。 - 测试验证:用
iperf3
或speedtest-cli
测试限速效果。
引用说明参考Linux内核文档(kernel.org)、Ubuntu Manpage及网络管理实践指南,技术细节遵循RFC 3290(流量控制标准),工具版本要求:
iproute2-5.0+
、wondershaper-1.1+
。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6603.html