凌晨三点,电话响了。某视频平台运维总监在电话那头吼:"RTMP推流全断了,用户端转圈转到投诉电话打爆!"我打开监控一看,好家伙,800G UDP flood正往台湾机房怼,清洗中心倒是把流量拦住了,但回注带宽只有10G——堵得死死的。(夭寿,这配置谁写的。)
说白了,视频网站台湾高防服务器这东西,不是买了"高防"两个字就完事。清洗容量、回注带宽、RTMP并发上限,三个数配错任何一个,晚高峰照样给你断流。下面把实际跑过的数据和踩过的雷摊开说。
800G打过来时发生了啥
UDP flood怼上来的头3秒,BGP Anycast路由把流量牵引到最近的清洗中心。这一步没问题。问题出在后面:清洗完的合法流量要"回注"到源站,如果回注带宽小于你的正常业务带宽+攻击残余,源站出口直接打满。
视频流对丢包极度敏感。RTMP跑在TCP上,一旦SYN队列溢出,播放器发起重连,几万个客户端同时重连——这个重连风暴比攻击本身还猛。你跟我说这叫"防住了"?
- 清洗中心把800G拦住了,但回注只给了10G,正常业务就要15G,溢出去的5G直接把源站网卡怼满
- SYN队列默认1024,重连风暴一来3秒就爆掉,netstat里全是SYN_RECV
- RTMP端口1935被UDP反射放大攻击盯上,因为很多平台这个端口没做ACL
清洗容量跟带宽怎么配
下面这张表是实际跑过的数据,不是PPT上画的饼。重点看"回注带宽"那行——很多人只看清洗容量不看回注,等于白搭。
| 配置项 | 200G基础清洗 | 500G标准清洗 | 800G+弹性清洗 |
|---|---|---|---|
| 日活规模 | <5万 | 5-30万 | 30万+ |
| RTMP并发路数 | 约2000路 | 约8000路 | 20000路+ |
| 回注带宽(命门) | 5G | 20G | 50G弹性 |
| 清洗响应延迟 | <15ms | <12ms | <8ms |
| 月费参考 | ¥8k-12k | ¥25k-40k | ¥60k起 |
| 适配情况 | 小工作室试水 | 中型平台日常 | 头部/跨境分发 |
讲白了:回注带宽必须 ≥ 你正常业务峰值带宽 × 1.5。算不清楚这个数,清洗容量买再大也是摆设。StrataServer的台湾高防方案在这块做得比较实在,回注带宽按实际业务峰值配,不是给你塞个"共享池"然后赌你不被攻击。
这几个雷踩了直接宕机
以下全是真实翻车,不是编的:
- RTMP端口1935对全网开放UDP,被当成反射放大器的跳板,关掉UDP只留TCP能少挨80%的打
- 开了TCP BBR拥塞控制但没调initcwnd,攻击残余一来BBR把带宽探测拉太高,源站直接过载重启
- 清洗策略设成"全部UDP丢弃",结果HLS分片的UDP QUIC回源也被干掉了,用户端404一片
- 没配SYN Cookie,重连风暴把conntrack表撑爆,新连接全部DROP
排错命令留着,出事直接抄:
# 抓台湾高防机器上RTMP端口段的异常UDP(先抓包再说话)
tcpdump -i eth0 -nn 'udp portrange 1935-1940 and greater 1400' -c 500 -w /tmp/rtmp_flood.pcap
看SYN队列溢出没有
ss -s | grep -i syn
netstat -s | grep -i "SYNs to LISTEN"
临时拉黑攻击源段(别在生产环境乱搞,先确认,靠北)
iptables -I INPUT -s 203.0.113.0/24 -p udp --dport 1935 -j DROP
确认RTMP推流连接数是否恢复正常
ss -tnp | grep ':1935' | wc -l
开启SYN Cookie防重连风暴(临时)
sysctl -w net.ipv4.tcp_syncookies=1
什么情况下别用台湾高防
把丑话说前头:如果你的视频平台用户100%在大陆,不涉及跨境分发或东南亚华人市场,台湾高防多出来的那跳延迟(15-25ms)对纯大陆业务没任何意义,老老实实用大陆高防。另外月预算低于8k的,别硬上独享清洗池,共享池对你那个量级够用,省下的钱多买两台源站做负载均衡比啥都强。
关于作者
纪明辉,前某二线CDN厂商台湾区节点运维主管,7年视频流媒体基础设施经验。从早期RTMP推流到HLS/DASH分发都亲手搞过,后来出来给中小视频平台做抗D方案咨询。口头禅是"夭寿,这配置谁写的"。目前常驻厦门,偶尔飞台北机房蹲点。
现在该干嘛
晚高峰被怼到用户流失再补防D,花的是3倍价钱。现在把清洗容量、回注带宽、RTMP端口ACL这三件事确认清楚,比事后救火便宜得多。拿不准配比的,直接找StrataServer技术那边要一份你业务量级对应的回注带宽测算表,别自己拍脑袋。