家宽组MC CDN计划
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。 —— CDN_百度百科 (baidu.com)
说到CDN的话,应用场景大多都是在网站,因为网站的引擎有个很基础的功能支持CDN服务的使用:**使用域名进行同端口不同服务的分流加载。**游戏服务器用的CDN并不亲民,尽管Cloudflare有MC服务器专用的CDN套餐(例子:Hypixel),以及阿里云近期推出的应用加速可以支持MC JE服务器的加速服务,但是都有个通病:贵。
在MC服务器领域有个司空见惯的攻击方式:DDoS,也就是分布式拒绝服务攻击,使用肉鸡,发包机等进行Udp Flood/SYN洪水攻击等使MC服务器无法正常访问。而绝大多数MC服务器是没有Hypixel一般的财力上Cloudflare CDN那样的服务的,解决方案大多分为两种:要么上高防,要么等死)
那有没有什么方法,可以让自己没有防御的服务器也能承受一定的攻击以保证MC服务器的正常服务呢?这就是我要提出的:MC服务器 社区CDN计划。
为什么说是小服福利?啊,有一定规模的服务器可能都不需要这种东西吧(bushi
众所周知,分布式攻击要用分布式节点缓解防御,俗称以毒攻毒)所以CDN服务有个很牛逼的“BUFF”,便是防御DDoS攻击。CDN的节点越多,防御DDoS的效果也就越好。但是MC服务器有个和网站服务相比很严重的缺陷,即**多个服务器无法共享使用相同的端口连接。**这就导致MC服务器无法像网站服务一样游刃有余的使用CDN服务。但是这样的缺陷在我“意外”发现的功能中被弥补了。
force-host是JE的Proxy端的一个功能,他支持识别客户端加入的域名并将玩家分配直接连接到域名对应的子服,从而达到多个服务器使用一个端口的功能。 这样的功能与Nginx等网站程序类似,为MC服务器使用CDN服务器提供了前提。但是BungeeCord的force-host的功能使用场景有限,仅支持JE Bukkit系的服务器,很多服务端诸如Vinalla,Fabric,以及使用Geyser加入的BE玩家等均无法接入BungeeCord,使用这个Force-host功能,并且我在使用过程中发现了很影响体验的问题,那就是服务器一旦加多了就会因发包过多频繁踢人。
前几天在琢磨Velocity的force-host时候偶然发现了一个很牛批的功能:Velocity的Force-host,能够被基岩版玩家识别,从而支持基岩版玩家使用域名直连子服!并且Velocity支持Fabric等mod服务端,而且无需子服开启BungeeCord选项就能获得玩家的真实IP,这让MC CDN的实现成为了可能。
既然有了上述基础,那么实现MC服务器的均衡负载CDN就并非幻想。有钱的大老板自然可以买节点买IP来组CDN,从而实现MC的商业CDN产业,但这样并不能解决一个实际的问题就是:**由单独的一方出资构成的CDN势必会造成经济压力的负担,这样的负担,作为MC这样的社区游戏来说是绝大多数个人势服主无法承担得起的。**既然如此,何不我们来自产自足?
社区的游戏,社区的服务器,社区的服务,理应由社区来提供。
原理很简单:采用DNS均衡负载的手段,集成所有参与计划的服主的IP,并让参与计划的服主自行布置Velocity,配置所有参与人员的服务器为子服,再配置域名CNAME解析到集成IP的域名上,实现CDN连接的功能。与传统商业用CDN有个根本区别:这样的模式是完全由社区自愿参与,由社区维护,不会收取任何一方的费用!
参与前提:请保证你的服务器具有公网IP,并可自由使用25565/TCP 和 19132/UDP 端口!
具体配置流程:
- 下载Velocity,Geyser-Velocity,将Geyser安装至Velocity上,设置Velocity的端口为25565,Geyser的端口为19132。
- 获取最新的Velocity社区服务器配置。
- 将自己的服务器的公网IP地址以及连接域名添加至社区服务器列表清单中,等待其他服务器节点同步。添加请加群 626525809 联系群主。
- 将连接域名CNAME解析至集成节点域名上,集成节点域名加群获取。
- 使用连接域名即可进入你的服务器游玩,至此MC服务器用CDN就配置好啦~
- 服务器由社区自愿提供维护,参与者均可免费使用他人提供的节点
- 有效缓解因源站IP暴漏导致的DDoS集火攻击。
- 因为是社区提供节点,无法保证节点的稳定性和安全性。