在现代网络环境中,合理分配带宽资源、防止个别应用或用户占用过多网络资源变得尤为重要。对于使用 Debian 系统的用户来说,利用内核自带的
tc(Traffic Control)工具可以轻松实现网络流量整形(Traffic Shaping)。本教程将从零开始,带你一步步掌握如何在 Debian 上进行 Linux 流量控制 和 网络带宽管理。

什么是网络流量整形?
网络流量整形 是一种通过限制、排队或调度数据包来控制网络带宽使用的技术。它可以用于:
限制某个用户或服务的最大上传/下载速度 保障关键业务(如 VoIP、视频会议)的带宽 避免网络拥塞,提升整体网络体验在 Linux 系统中,
tc命令是实现这一功能的核心工具,它基于内核的 QoS(服务质量)子系统工作。
准备工作:安装必要工具
Debian 系统通常已内置
tc,但为了确保完整功能,建议安装
iproute2包:
安装完成后,可通过以下命令验证: 在使用 假设你的服务器网卡是 sudo apt updatesudo apt install iproute2tc -V基础概念:qdisc、class 与 filter
tc
时,你需要理解三个核心组件:htb
(分层令牌桶)、fq_codel
等。 class:类别,用于定义不同优先级或带宽限制的流量组。 filter:过滤器,用于将特定流量(如某 IP 或端口)分配到指定 class。实战案例:限制某 IP 的下载速度
eth0
,你想限制 IP 地址为 192.168.1.100
的设备最大下载速率为 2Mbps(注意:下载方向对应的是“入站”,但 Linux 的 tc 主要控制“出站”流量。因此,若要限制客户端下载,需在服务器的“出站”方向做限制)。
我们将使用
htbqdisc 来实现。
步骤 1:清除现有规则
这里 现在,所有发往 你可以使用 上述规则在重启后会丢失。为使其永久生效,可将命令写入启动脚本,例如 示例:创建 sudo tc qdisc del dev eth0 root 2>/dev/null || true步骤 2:添加 HTB 根队列
sudo tc qdisc add dev eth0 root handle 1: htb default 30default 30
表示未匹配任何规则的流量将进入 class 1:30。步骤 3:创建带宽类
# 创建根类(总带宽,可设为接口最大速率)sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit# 为受限 IP 创建子类(2Mbps)sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit# 默认类(其他流量)sudo tc class add dev eth0 parent 1:1 classid 1:30 htb rate 98mbit ceil 100mbit步骤 4:添加过滤器,将目标 IP 流量导向受限类
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 \ u32 match ip dst 192.168.1.100 flowid 1:10192.168.1.100
的流量(即该设备的“下载”)将被限制在 2Mbps。验证效果
iperf3
或 wget
从该 IP 下载大文件测试。同时,用以下命令查看当前规则:tc -s qdisc show dev eth0tc class show dev eth0tc filter show dev eth0持久化配置
/etc/rc.local
(需启用该服务),或创建 systemd 服务。/usr/local/bin/traffic-shape.sh
赋予执行权限并设置开机启动即可。 通过本教程,你已经掌握了在 Debian 系统中使用 #!/bin/bashIFACE=eth0# 清除旧规则tc qdisc del dev $IFACE root 2>/dev/null || true# 添加新规则tc qdisc add dev $IFACE root handle 1: htb default 30tc class add dev $IFACE parent 1: classid 1:1 htb rate 100mbittc class add dev $IFACE parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbittc class add dev $IFACE parent 1:1 classid 1:30 htb rate 98mbit ceil 100mbittc filter add dev $IFACE protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.100 flowid 1:10总结
tc
命令进行 网络流量整形 的基本方法。无论是限制用户带宽、保障关键服务,还是优化网络性能,Linux 流量控制 都是一个强大而灵活的工具。结合 网络带宽管理 策略,你可以构建更公平、高效的网络环境。
记住,实践是最好的老师。建议在测试环境中多尝试不同的 qdisc(如
sfq、
fq_codel)和规则组合,深入理解 Debian网络流量整形 的强大能力。
