这里要搭建的是一个最高在线 2000 - 4000
人的大型 MMO
游戏的游戏服务器。
目标是
- 抵御
DDOS
- 用户有良好的访问体验
服务器选择
因为,这只是删档测试,所以,不需要考虑多服务器,多地区的情况。这里采用的架构是 gameserver
「计算服务器」+ dataserver
「数据服务器」。
关于配置就不说了,根据实际情况来就行,这次肯定是按照基本配置的两倍来配比的。
购买的是 AWS 服务器,要记住把没用的端口全部关了,包括 80
.然后 22
的 ssh
端口也要进行修改。
DDOS 防御商的选择
因为在 AWS
中,所以,防御商有两个
cloudfront
AWS
自己的
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
通信。