SDK 游戏盾
游戏和 App 集成 SDK 后,客户端首包带应用令牌,节点在四层校验令牌与防重放,没有令牌的连接到不了源站;防 DDoS、防 CC、隐藏源站。
能解决什么问题
游戏和 App 的登录、对战、语音走四层长连接。攻击者拿到节点地址后,可以用外形合法的连接打 CC,节点分不清真玩家和脚本。SDK 游戏盾让客户端证明“我是这个应用的客户端”:客户端集成 SDK,SDK 从主控拉取签名的防护节点列表,测速选点建连,首包带应用令牌;节点校验令牌和防重放,通过的连接照常回源,不通过的直接断开,同一来源频繁失败时在内核层拉黑。
- 防 DDoS、防 CC:没有有效令牌的大流量(洪泛、扫描、通用 CC 脚本)在节点首包就被丢弃。
- 隐藏源站:客户端只拿到防护节点地址和端口,节点列表里没有源站地址。
- 节点故障时 SDK 立即换下一个节点,不用等 DNS 切换和 TTL 过期。
怎么开通与启用
SDK 游戏盾是商业版的官方模块,当前限免,在插件商店按安装领取;社区版不包含。
- 管理员在插件商店购买 SDK 游戏盾。菜单“四层转发 → SDK 游戏盾”出现。
- 主控是在带 SDK 游戏盾的版本之前安装的(升级上来的):先在主控机上以 root 执行一次密钥补齐,否则新建应用和生成密钥会提示“未配置 SDK 游戏盾密钥”。新装的主控不用做这一步。
curl --proto '=https' -fsSL -o install-control.sh https://auth.cdnca.com/downloads/install-control.sh
bash install-control.sh converge-sdkshield apply
bash install-control.sh converge-sdkshield check命令在本机生成密钥(不打印),重启主控服务并等待就绪;没就绪会自动恢复原状态。可以重复执行,已配置时什么都不改。check 输出 installer 或 converged 表示已配置。
- 新建 SDK 应用,保存 AppSecret(只显示一次)。
- 在应用的“四层转发”页签绑定游戏用的 TCP / UDP 转发。保存后会重新发布这些转发;节点要升级到支持 SDK 游戏盾的版本,否则发布会被拒绝并列出节点。
- 在“接入指引”页签下载 SDK(随主控版本发布,登录后下载,可核对 SHA-256)并集成:用 AppID、密钥编号、AppSecret、节点列表地址和内置的列表签名公钥初始化,业务代码改用 SDK 的拨号函数。
- 给租户开放:在套餐的资源规格里开启“SDK 游戏盾”并设置“SDK 应用数”(-1 不限)。
主要设置
| 设置 | 说明 |
|---|---|
| 允许时钟偏差 | 默认 30 秒,5–300 秒;SDK 拉节点列表时会自动校时 |
| 失败拉黑 | 同一客户端 IP 在统计窗口内握手失败达到次数后拉黑;默认 10 秒内 20 次、拉黑 600 秒;拉黑时长填 0 只断开不拉黑 |
| 按应用握手限速 | 每节点每秒最多放行多少次握手,默认 0 不限;AppSecret 泄露时用它限制伪造连接的规模 |
| 密钥 | 每个应用最多 2 把有效密钥,用于轮换;吊销后下一次发布生效,已建立的连接不断 |
| 绑定转发 | 一个应用最多绑 16 条转发,一条转发只属于一个应用;线路组、源站、负载方式、PROXY protocol / TOA 沿用转发自己的配置 |
| 节点列表签名密钥 | SDK 内置公钥验签节点列表,镜像或 DNS 被篡改也不能把玩家引到别的地址;轮换前先发布内置新旧两把公钥的 SDK |
| 统计与拦截日志 | 按应用、按节点看握手通过、拒绝原因、重放、新拉黑和失败来源 Top 10;拦截日志按分钟汇总,保留 30 天 |
SDK 有 Go、Java(Android)、Swift(iOS / macOS)、C(供 Unity、Unreal 和 Windows 原生插件调用)和 Unity C# 封装。
典型用法
- 手游登录走 TCP、对战走 UDP:两条转发绑到同一个应用,客户端用同一套参数初始化 SDK。
- 节点列表地址镜像到自己的 HTTPS 或对象存储,主控地址不暴露给玩家;镜像要返回正确的 HTTP Date 响应头,SDK 用它校正玩家设备时钟。
- AppSecret 被逆向:生成新密钥,发布新版客户端,等旧密钥近 24 小时握手数降到 0 后吊销;不同渠道包用不同密钥编号,泄露时只吊销一个渠道。
限制与注意事项
- 只做防 DDoS、防 CC、隐藏源站。不做传输加密,需要加密时业务自己走 TLS 或自有加密,节点透传;不解析应用层协议;节点列表只包含管理员分配的固定节点。
- 性能:没开 SDK 的监听、HTTP 网站和普通四层转发零差异,节点配置逐字节不变。开 SDK 的 TCP 只在建连首包多一次校验,之后照常转发、不逐包处理。开 SDK 的 UDP 长会话每包成本为不开时的约 1.4–1.5 倍(实测)。
- 能绑定的转发:独占端口、单个端口(不是端口范围)、不开入站 PROXY protocol、不开 TLS 透传。
- UDP 带不了真实客户端 IP 给源站;需要的话在业务协议里上报,或用同应用的 TCP 连接。UDP 源站要丢弃以 C5 D7 01 01 开头的 64 字节握手数据报(SDK 提供判断函数)。
- AppSecret 编进客户端,迟早可能被逆向提取。拿到密钥的攻击者能伪造令牌,但每个令牌只能用一次、只对一个节点有效,握手限速、单 IP 新建速率和四层防护规则照常生效。
- 授权到期、撤销或在本机停用后:已发布的 SDK 监听照常校验,在线玩家不断;不能新建或修改应用、密钥和绑定,节点列表接口返回 404,SDK 继续用缓存列表。
- SDK 的验证范围:Go 已对真实节点端到端测试;Java 未在 Android 真机或模拟器上运行;Swift 在 iOS 模拟器跑过单元测试;C 库在 macOS 与 Linux 上测过,Windows 只做了交叉编译,Android、iOS 未构建;Unity 封装未在引擎内运行。