用 pktgen 模拟 10 Gbps SYN Flood,如何验证云清洗生效时间

解读

面试官想知道三件事:

  1. 你能否在实验室里把 10 Gbps SYN Flood 真实打出来,而不是“号称 10 Gbps”;
  2. 你能否把“云清洗生效”这一瞬间精确捕捉,而不是模糊地说“好像流量降了”;
  3. 你能否用可复现、可量化的指标向客户/领导证明 SLA 达标(如 3 秒内清洗)。

国内云厂商(阿里云、腾讯云、华为云)普遍提供“高防 IP”或“DDoS 高防包”,触发后流量先经过清洗中心,再回注到业务。验证生效时间=从攻击流量达到触发阈值,到回注流量中 SYN 包速率下降 90% 的时间差。整个实验必须绕开 CDN 和本地缓存,确保测量的是“清洗”本身,而不是其他环节。

知识点

  1. pktgen-dpdk 参数:prefetch 数、burst size、mbuf 池大小、tx-thresh,决定能否打满 10 Gbps。
  2. 网卡 offload:关闭 tx-nocache-csum,防止网卡重算校验和导致速率抖动。
  3. 触发阈值:云厂商默认 2 Gbps 或 5 kpps,需提前在控制台调低,否则 10 Gbps 直接黑洞。
  4. 测量点:
    • 攻击侧:pktgen 自带 rate counter,每秒输出 pps/Gbps;
    • 清洗侧:云厂商提供“高防监控 API”或“回注 NetFlow”,粒度 5 s 不够,需用秒级采样;
    • 业务侧:在回注口挂一台 Linux 探针,tcpdump ‘tcp[tcpflags] & tcp-syn != 0’ 统计 syn_pps。
  5. 时间同步:攻击机、探针、云 API 统一用 ntp.aliyun.com,误差 < 50 ms。
  6. 指标定义:
    T0 = 最后一秒 syn_pps < 阈值的时间;
    T1 = 探针观测到 syn_pps 下降 90% 的时间;
    生效时间 ΔT = T1 – T0。
  7. 可重复性:同一 Region、同一可用区、同一高防实例重复 5 次,取 P90 ΔT 作为报告值。

答案

实验拓扑
攻击机(裸金属,16 核,Intel XXV710 25 G)—> 云高防 IP —> 回注探针(同一 VPC)—> 业务虚机。

步骤

  1. 准备
    • 攻击机编译 DPDK 20.11,绑定网卡到 igb_uio,预留 4 G 大页。
    • 写 pktgen 脚本,单核打 1.5 Mpps,8 核并发 12 Mpps,包长 64 B,理论 10.2 Gbps。
    • 在云控制台把“基础防护阈值”临时调到 1 Gbps,确保 10 Gbps 一定触发清洗。
  2. 校准
    先跑 30 s 1 Gbps 背景流量,确认探针 syn_pps 与云监控一致,误差 < 3%。
  3. 正式测试
    • T=0 s 启动 pktgen,命令:
      pktgen -l 0-7 -n 4 -- -P -m “[1:8].0” -s 0:dst=高防IP,dport=80,flags=syn
    • 攻击机每秒记录 tx_pps、tx_bps;
    • 探针每秒输出 syn_pps;
    • 用 Python 调用云 API 每秒拉取“回注流量 bps”。
  4. 结束条件
    当探针 syn_pps 连续 3 s 低于 10 kpps(下降 90%)时停止 pktgen。
  5. 计算
    取 API 返回的“触发清洗时间戳”为 T0,探针 syn_pps 下降 90% 的时间戳为 T1,ΔT=T1-T0。
  6. 结果
    重复 5 次,ΔT 分别为 2.1、1.9、2.3、2.0、2.2 s,P90=2.2 s,小于厂商承诺 3 s,验收通过。

报告要素

  • 原始 csv(时间戳、tx_pps、rx_syn_pps、API bps);
  • 折线图(不提供图,但给出 gnuplot 脚本,方便现场复现);
  • 结论:云清洗生效时间 2.2 s,满足 SLA。

拓展思考

  1. 如果客户业务走了 Anycast 高防,清洗中心分布在华北、华东、华南,如何确定是哪一座清洗中心生效?
    可在 SYN 包中嵌入 IP-ID 递增字段,回注口抓包看 IP-ID 连续性,结合 BGP AS-Path 判断清洗中心。
  2. 云厂商在“黑洞”前会先“限速”,如何区分限速与清洗?
    限速阶段 SYN/ACK 比例不变,清洗阶段 SYN 被丢弃、ACK 也下降,可联合统计 syn/ack_ratio。
  3. 若未来升级到 100 Gbps,pktgen 单机无法打满,如何横向扩展?
    用多台裸金属 + gPTP 1588 时间同步,统一启动时刻,控制总速率 100 Gbps;同时担心交换机微突发,需在交换侧配置缓冲监测,验证瞬时突发是否超过 200 ms。