使用 CDN 来保护 MC 服务器 / TCP Over WebSocket
最近写了个项目:TOH Proxy
项目地址:
https://github.com/albert4719/toh-proxy
可以把 Minecraft 的 TCP 连接转发到 WebSocket 上,再通过 CDN 代理,从而隐藏服务器真实 IP 。
简单来说:
玩家 -> CDN -> WebSocket -> MC 服务器
而不是:
玩家 -> 直接攻击你的服务器 IP
为什么这么做?
传统 MC 服务器:
- IP 直接暴露
- 容易被 DDOS
- 一打就炸
- 国内高防价格离谱
但 WebSocket 属于 HTTP 体系。
也就是说:
- 腾讯云 EdgeOne
- 百度 CDN
- Cloudflare
- 其他 CDN
理论上都能代理。
于是就能做到:
TCP -> WebSocket -> CDN 加速
让 MC 流量走 CDN 节点。
特性
- TCP Over WebSocket
- 支持 Proxy Protocol
- 还原玩家真实 IP
- 支持 Velocity / Paper
- 支持 CDN 回源
- 支持 HTTPS / WSS
- 隐藏真实服务器 IP
- 支持第三方 MOD 直连
原理
服务端监听:
ws://your-domain/mc
客户端:
本地 TCP -> WebSocket -> CDN -> 服务端
服务端收到 WS 后再转发回真正的 MC TCP 服务。
这样:
- 玩家看到的是 CDN IP
- 攻击者看到的也是 CDN IP
- 真实服务器 IP 不暴露
延迟测试
很多人第一反应:
“WebSocket 会不会很卡?”
实际测试结果比预想好很多。
百度 CDN (付费动态加速)
测试使用:
DRCDN 动态加速
实际延迟:
仅增加约 30ms
基本没有明显游玩影响。
正常生存服、小游戏服都完全可玩。
腾讯云 EdgeOne (免费版)
免费版本也能正常使用。
但由于:
- 无动态加速
- 路由不稳定
- 免费线路优先级较低
实际延迟大概:
增加约 50ms ~ 150ms
会有略微卡顿感。
不过:
腾讯云 EO 支持购买动态加速套餐
理论上延迟还能继续下降。
适合什么场景?
非常适合:
- 小型公益服
- 容易被打的服务器
- 国内裸奔服务器
- 没钱买高防
- 想隐藏真实 IP
已支持
- Velocity
- Paper
- Proxy Protocol
- 第三方 MOD 接入
后续准备:
- 官方 MOD
- UDP/KCP
- 多线路
- 自动节点切换
使用方式
服务端:
MC TCP -> TOH Proxy Server -> CDN
客户端:
本地 MC -> TOH Proxy Client -> CDN -> 服务端
玩家本地连接:
127.0.0.1:3001
即可进入服务器。
题外话
其实 Minecraft 本身挺适合走 CDN 的。
因为:
- 长连接
- 带宽低
- 数据量小
- 延迟要求没 FPS 那么极端
之前一直没人这么搞,主要是:
TCP 不能直接过 CDN
但套一层 WebSocket 后,问题就解决了。
有兴趣可以一起研究。
欢迎提 issue / PR 。