这里要搭建的是一个最高在线 2000 - 4000 人的大型 MMO 游戏的游戏服务器。
目标是
- 抵御
DDOS - 用户有良好的访问体验
服务器选择
因为,这只是删档测试,所以,不需要考虑多服务器,多地区的情况。这里采用的架构是 gameserver「计算服务器」+ dataserver「数据服务器」。
关于配置就不说了,根据实际情况来就行,这次肯定是按照基本配置的两倍来配比的。
购买的是 AWS 服务器,要记住把没用的端口全部关了,包括 80.然后 22 的 ssh 端口也要进行修改。
DDOS 防御商的选择
因为在 AWS 中,所以,防御商有两个
cloudfrontAWS自己的
cloudflare
毫无疑问,肯定 cloudflare。因为,CF 的防御是无上限流量,其他的服务商,都是免费了一定的流量,超过后开始计费,并且,收费非常贵。真要有 DDOS 打过来,账单直接 GG。
这里说一下存在的情况。游戏服务器总共有两种通信协议
https「443」TCP + Socket「其他端口」
所以,这里面只有两个选择
CF免费版本 +TCP措施CF最高付费版本- 没尝试过
至于 CF 其他两个付费版本可以忽略,和免费版本差别不大。
CF 免费版本 + TCP 措施
游戏服务器,共有两个子域名
aa- 走
https协议 - 走
CF代理
- 走
cc- 走
tcp + socket协议 - 走
CF DNS直连模式
- 走
所以,aa 可以进行 CF 代理模式,而 cc 由于走 tcp 所以无法进行 CF 代理模式,只能选择直连。至于为什么请参考。
如果,cc 走直连的话,会出现问题,假如有人进行抓包,很容易获得目标服务器的 IP,那么,CF 形同虚设了。
所以,要把 cc 的 TCP 流量也走一层代理。免费版本的 CF 肯定指望不上了,但是,可以用 nginx 进行代理转发。
这样子,整个服务器的架构又增加了一个代理服务器。
3 个服务器之间的数据传递如下
aa子域名,走https协议,通过CF的代理转发给gameserver服务器上cc子域名走TCP协议,先通信到代理服务器上,然后通过代理服务器从内网走到gameserver服务器上
由于代理服务器只是进行状态的转发,硬件配置不需要很大,2核4G足够了,带宽大一些即可。「如果觉得一个代理服务器不够,可以进行 DNS 负载均衡,上多个代理服务器」
代理和 gameserver 能走内网就走内网。
这个方案当然不能防御住 TCP/IP 的攻击,但是,可以有效的将服务器的 IP 隐藏起来。后续万一出问题,也可以建立防护。但是,一旦 IP 暴漏,后续啥措施都没用了。
关于 TCP/IP 层的第三方防御请参考。
新思路 2024-6-27
全部采用直连的方式,等有 DDOS 攻击的时候,弄一个代理服务器,然后代理服务器套上防 DDOS 的服务。游戏服务器所有的入流量均走代理服务器的 IP。
新思路 2024-7-2
将 TCP 通信变成 websocket 通信。