如何用Debian Sniffer进行流量整形
小樊
39
2025-12-12 11:06:02
概念澄清与总体思路
- Debian 并不存在名为“Sniffer”的官方流量整形工具;常见的抓包/嗅探器如 tcpdump、Wireshark/dumpcap 仅用于捕获与分析流量,不具备流量整形能力。若要进行流量整形,应使用 Linux 内核的 tc(Traffic Control) 子系统,它可实现基于令牌桶/漏桶等算法的限速与整形策略。
快速上手示例 限制本机出网带宽
- 目标:在接口 eth0 上将本机对外“发送”流量整形为1 Mbps(HTB 分级示例,便于后续扩展优先级/多类限速)。
- 步骤:
- 安装工具(若未安装)
sudo apt update
sudo apt install iproute2
- 添加根队列与默认类
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 2mbit ceil 2mbit
- 创建受限子类(本例限制为 1 Mbps)
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
- 将流量导向子类(示例:按源地址匹配;如需按目的地址,将 ip src 改为 ip dst)
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 flowid 1:10
- 查看与调整
- 查看:tc -s qdisc ls dev eth0;tc -s class ls dev eth0
- 调整/删除:tc class change/replace …;tc qdisc del dev eth0 root
- 说明:上述示例仅对“出接口”生效(影响本机对外发送流量)。若需限制“入站”流量,见下一节。
限制入站流量的两种做法
- 方法 A(推荐):使用 ifb 伪接口 将入站流量重定向为“出方向”再整形
- 加载模块并创建 ifb
sudo modprobe ifb
sudo ip link add name ifb0 type ifb
sudo ip link set ifb0 up
- 将 eth0 入站重定向到 ifb0
sudo tc qdisc add dev eth0 handle ffff: ingress
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
- 对 ifb0 出方向做 HTB 限速(示例 1 Mbps)
sudo tc qdisc add dev ifb0 root handle 1: htb default 30
sudo tc class add dev ifb0 parent 1: classid 1:1 htb rate 2mbit ceil 2mbit
sudo tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
sudo tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 flowid 1:10
- 方法 B(简单丢弃式监管):在 ingress 上使用 police 丢弃超速率包(不平滑,适合“封顶”)
sudo tc qdisc add dev eth0 ingress
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 0.0.0.0/0 police rate 1mbit burst 15k drop flowid :1
- 说明:ingress 队列不支持真正的队列调度,若需要平滑整形请优先采用 ifb 方案。
与抓包工具配合进行验证
- 抓包工具(如 tcpdump/dumpcap)不负责整形,但可用于验证限速效果与观察突发。示例:
- 抓取本机发往某目标的流量
sudo tcpdump -i eth0 -nn host 1.2.3.4 and port 80
- 使用 dumpcap 写入文件(便于后续分析)
sudo dumpcap -i eth0 -w /tmp/cap.pcap ‘tcp port 80’
- 建议做法:先配置 tc 限速,再用抓包/统计工具观察吞吐是否接近设定值、是否存在丢包/重传等异常。
常见问题与注意事项
- 作用方向:tc 默认只影响出接口;入站整形需借助 ifb 或在 ingress 上使用 police(丢弃式)。
- 单位与突发:rate/ceil 支持 kbit/mbit;突发与延迟参数(如 burst/latency)需结合业务容忍度与链路 RTT 调整,过小会丢包,过大则失去整形意义。
- 监控与回滚:使用 tc -s 观察队列/类统计;变更前记录当前规则,必要时用 tc qdisc del 快速回滚。
- 生产变更:先在测试环境验证,逐步调参,避免一次性大幅限速影响业务。