0%

aion | 搭建一个测试服务器

这里要搭建的是一个最高在线 2000 - 4000 人的大型 MMO 游戏的游戏服务器。

目标是

  • 抵御 DDOS
  • 用户有良好的访问体验

服务器选择

因为,这只是删档测试,所以,不需要考虑多服务器,多地区的情况。这里采用的架构是 gameserver「计算服务器」+ dataserver「数据服务器」。

关于配置就不说了,根据实际情况来就行,这次肯定是按照基本配置的两倍来配比的。

购买的是 AWS 服务器,要记住把没用的端口全部关了,包括 80.然后 22ssh 端口也要进行修改。

DDOS 防御商的选择

因为在 AWS 中,所以,防御商有两个

  • cloudfront
    • AWS 自己的
  • cloudflare

毫无疑问,肯定 cloudflare。因为,CF 的防御是无上限流量,其他的服务商,都是免费了一定的流量,超过后开始计费,并且,收费非常贵。真要有 DDOS 打过来,账单直接 GG

这里说一下存在的情况。游戏服务器总共有两种通信协议

  • https443
  • TCP + Socket「其他端口」

所以,这里面只有两个选择

  • CF 免费版本 + TCP 措施
  • CF 最高付费版本
    • 没尝试过

至于 CF 其他两个付费版本可以忽略,和免费版本差别不大。

CF 免费版本 + TCP 措施

游戏服务器,共有两个子域名

  • aa
    • https 协议
    • CF 代理
  • cc
    • tcp + socket 协议
    • CF DNS 直连模式

所以,aa 可以进行 CF 代理模式,而 cc 由于走 tcp 所以无法进行 CF 代理模式,只能选择直连。至于为什么请参考。

如果,cc 走直连的话,会出现问题,假如有人进行抓包,很容易获得目标服务器的 IP,那么,CF 形同虚设了。

所以,要把 ccTCP 流量也走一层代理。免费版本的 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 通信。

请我喝杯咖啡吧~