Ubuntu Sniffer怎样进行流量整形
小樊
42
2025-12-25 17:54:31
Ubuntu Sniffer与流量整形的正确做法
概念澄清
- **Sniffer(嗅探器)**的职责是抓取与分析网络数据包,例如 tcpdump、Wireshark/dumpcap。这类工具本身不提供带宽限速或整形能力。若需要“整形”,应使用 **Linux 内核的流量控制子系统 tc(iproute2)**来限速、整形与排队;嗅探器只负责观测与抓包。
使用 tc 进行流量整形的标准做法
- 安装工具(通常已预装):sudo apt-get install iproute2
- 典型目标与命令(示例对网卡 eth0 操作,请按实际接口名替换):
- 简单限速(令牌桶 TBF,适合“总带宽封顶”)
- 命令:sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
- 说明:将接口总出队速率限制在 1 Mbps,突发 32 kbit,队列延迟 400 ms。
- 分级整形(HTB,适合按业务/主机/端口分配带宽)
- 命令:
- 根队列: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
- 受限子类(示例:限制某业务/主机为 1 Mbps):sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
- 过滤器(示例:按源 IP 分流到子类 1:10):sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.100 flowid 1:10
- 查看与调整
- 查看:tc -s qdisc ls dev eth0;tc -s class ls dev eth0;tc -s filter ls dev eth0
- 调整/删除:先 tc qdisc del dev eth0 root 再按需要重建;或针对具体句柄/类进行调整。
按方向整形的要点
- 在 物理/虚拟以太网接口(如 eth0、ens, enp)**上,tc 默认整形的是“从该接口发出的流量”(出站/上传)。
- 要限制“进入本机的流量”(入站/下载),常见做法是在上行设备(如路由器、网关、veth 对端、桥接上游)上做整形,或使用 ifb 伪设备在本机对入站流量进行“重定向后再整形”。
- 虚拟机/云主机场景,通常需在宿主机或虚拟交换机/路由器侧实施限速策略,效果更可靠。
与嗅探器配合的实用流程
- 仅观测不整形:用 tcpdump 或 dumpcap 抓包分析,例如:sudo tcpdump -i eth0 -w capture.pcap;sudo dumpcap -i eth0 -w capture.pcap。
- 观测+整形的组合:先用 tc 对接口做限速/整形,再用 tcpdump/dumpcap 抓包验证效果与丢包/时延变化(例如观察 pcap 时间戳抖动、重传/丢包指示)。
- 限速后抓包验证:在整形生效后抓取同一接口,对比整形前后的吞吐、抖动与丢包特征,以确认策略是否按预期工作。
简化工具与注意事项
- 简化工具:若不想手写 tc,可考虑更友好的封装如 Wondershaper(基于 tc 的上/下行限速脚本),适合快速落地常见限速需求。
- 重要提示:
- 整形会影响时延与吞吐,生产环境应先在测试环境验证,逐步调参(rate/ceil/burst/latency)。
- 对 下载方向的整形通常需要上游设备或 ifb 介入;在云/虚拟化环境优先在网关侧配置。
- 抓包与限速都可能需要 sudo 权限;变更前记录当前 qdisc 状态,变更后及时校验与回滚预案。