温馨提示×

如何利用CentOS sniffer进行流量整形

小樊
47
2025-12-31 07:54:31
栏目: 智能运维

澄清与总体思路CentOS 上,所谓 Sniffer 是用于抓包与分析的被动工具(如 tcpdump、Wireshark、tshark、ngrep),本身不具备对带宽进行限速或整形(Traffic Shaping)的能力。若要实现流量整形,应使用内核的 tc(Traffic Control) 子系统;Sniffer 的角色是在整形前后进行流量观测与验证。常见抓包工具与用途可参考:tcpdump/tshark 抓包分析、iftop/nload/vnstat 实时监控与统计。

使用 tc 实现流量整形的标准做法

  • 选择网卡与方向:明确是对 出口(egress) 还是 入口(ingress) 整形。出口用 HTB/TC 直接限速;入口限速在物理接口上受限,通常做法是在出口整形,或在入口侧使用 ifb 伪设备将入口流量重定向为“出口”再整形。
  • 基本步骤(HTB 出口限速示例,限制为 1 Mbps):
    1. 创建根队列并设定默认类 sudo tc qdisc add dev eth0 root handle 1: htb default 30
    2. 创建根类(总带宽) sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
    3. 创建子类(可再细分,这里示例与父级一致) sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
    4. 将流量分类(示例:按源 IP 分流到子类 1:20) sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.100 flowid 1:20
    5. 查看与验证
      • 队列/类/过滤器状态:tc -s qdisc ls dev eth0;tc -s class ls dev eth0;tc -s filter ls dev eth0
      • 实时带宽观测:iftop、nload、vnstat
    6. 清理规则(按需) sudo tc qdisc del dev eth0 root
  • 要点
    • rate 是承诺保证带宽,ceil 是突发上限;合理设置 burst 可改善短时突发体验。
    • 过滤器可用 u32 按源/目的 IP、端口、协议分流,实现不同业务不同限速策略。

用 Sniffer 验证整形效果

  • 抓包观察速率变化(示例抓取 eth080 端口并写入文件)
    • 抓取:sudo tcpdump -i eth0 -w http.pcap port 80
    • 读取统计:tcpdump -r http.pcap -q -nn
  • 实时带宽观测
    • iftop:sudo iftop -i eth0
    • nload:sudo nload eth0
    • vnstat:vnstat -l -i eth0
  • 抓包过滤表达式建议
    • 按主机:host 192.168.1.100
    • 按端口:port 80 or port 443
    • 按协议:icmp、tcp、udp 以上工具与过滤写法可用于在整形前后对比吞吐、并发与丢包等现象。

常见场景与命令模板

  • 单主机限速(出口,HTB)
    • 目标:限制主机 192.168.1.100 出口为 2 Mbps
    • 命令: 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 sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.100 flowid 1:10
  • 端口限速(示例:限制本机 8080 端口总出口为 500 kbit
    • 命令: 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 500kbit sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 500kbit ceil 500kbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 8080 0xffff flowid 1:20
  • 入口限速思路
    • 物理入口限速能力有限,常用方案为:加载 ifb 模块,将入口流量重定向到 ifb 接口,再对 ifb 出口应用与上文相同的 HTB 规则;验证仍用 iftop/nload/tcpdump。

注意事项

  • 权限与系统要求:tc/ifb 操作通常需要 root;确保网卡名称(如 eth0)正确,且内核已启用相关模块(如 ifb)。
  • 观测先行、变更谨慎:先用 iftop/nload/vnstat/tcpdump 建立基线,再逐步应用限速;变更后用同一组指标复核。
  • 规则可维护性:复杂策略建议分文件保存与注释;变更前先导出当前规则(tc qdisc/ class/ filter ls dev eth0),便于回滚。
  • 合法合规:抓包与限速仅可在拥有明确授权的网络与主机上实施,避免侵犯隐私或违反策略。

0