Minecraft开服——多线教程
这篇教程是写给爱折腾的服主的,包括多线路、故障转移、负载均衡的实现。
为什么要多线路?
因为各地的网络环境不同,有的人连接你的服务器可能会很慢。如服务器A运行着Minecraft的服务端,用户C连接服务器A很慢,但连接服务器B很快,使用服务器B作为“线路”进行游戏就能获得更好的游戏体验。这时候游戏数据是走C-B-A而不是C-A。
基础——多线路的实现
土豪可以买几台国内VPS,转发端口到游戏服务器实现多线路。不过对大多数人来说,自己买国内VPS是不怎么现实的。国内VPS价格普遍偏高,而单作为“线路”的话会有严重的浪费。不过好消息是,vxTrans提供这样的服务,它提供4台国内外服务器做转发服务,按流量收费。比起自己买多台VPS的昂贵费用,Minecraft产生的流量费可能只有几十分之一。
首先,你需要在自己的服务器上开好Minecraft的服务端。这个这里就略去了,教程一搜一大把。比如你的服务器地址是216.104.43.46,端口是25565 (默认是这个)。
去
http://vnet.link 注册一个账号,然后点开“服务”选择vxTrans。如下图
名称那里随意填,只是作为区分的名字。入口地址选择中国-1,目的地址填216.104.43.46,目的端口填25565,然后点击建立连接点。如下图
然后点击建立连接点,等待一会儿刷新页面看看,连接状态很快会从“等待连通”变成“已连通”。然后使用它给出的地址和端口号就能连接游戏了。
这就完了吗?
如果你是玩家的话,这样就已经可以了。你可以用上面的方法打造自己的专属线路,因为是流量制而不是包月制,一个人使用产生的流量费及低。如果你是服主,那这样还不够。线路是有了,但要玩家自己输端口体验可不怎么好。你需要进一步优化用户体验。
进阶——隐藏端口信息
首先,你得有一个自己的域名。免费的也行,申请一个免费的tk域名很简单。
这里是入口: http://www.dot.tk/zh/index.html
详细教程戳免费资源部落的就行。注册的时候可以选择使用自己的DNS,建议用vxDNS(和vxTrans一个网站,它们的另一个服务)。因为vxDNS支持使用API修改域名,这在之后更高阶的教程中会用到。如果不想折腾你也可以选择DNSPod,腾讯旗下的免费域名解析服务——不管怎么样,别用tk它自己的DNS就行了。
首先在vxDNS中导入你的域名。确保域名的NS服务器是vxDNS给出的,你可以简单的新建一个记录然后试试能不能访问。这是vxDNS的域名管理界面
然后添加一个SRV记录。网上很多教程称SRV是“端口转发”,这其实是一种误导。SRV记录也是域名记录的一种,只不过它包含使用的程序、协议、提供服务的地址和端口号。它和上面线路不一样,单独设置SRV记录并没有端口转发的效果,也不会加快玩家访问你的服务器。在第一个框(域名)中填入“_minecraft._tcp.cn1”,其中cn1可以自由填写。比如我这里填cn1,玩家访问的时候就是填写cn1.minecrafthelloworld.tk(minecrafthelloworld.tk是我申请的tk免费域名)。第二个(记录类型)选择SRV,第三个框(内容)的格式为“权重、空格、端口、空格、主机名”,权重填5就行,端口和主机名填写在多线路教程中获得的线路的地址和端口。比如我填写的是“5 37366 vt-cn1.vnet.link”,然后直接点“增加”添加记录。
记录添加完之后,在游戏里就不用填写端口号了。
超进阶——故障转移、负载均衡
前边使用vxDNS作为域名解析服务的意义在这儿了,它有一个别的解析服务没有的优势——可以通过API切换子域名的记录。
这里是它的API: https://vnet.link/data/support/OpenAPIv1.0.pdf
这个怎么用呢?在上面的教程中我们知道,可以给域名添加cn1、cn2这样的子域名,加上SRV记录让Minecraft知道应该朝哪个服务器的哪个端口连接。设想下,如果有一个main记录,可以自动在cn1线路出现故障的时候解析到cn2线路上,甚至比较几条线路的延迟选择解析到最快的一条线路上,是不是很酷?
对Minecraft线路测速的方法有很多,比如这个: https://github.com/puteulanus/McPing
这个PHP的小程序可以模拟客户端向服务器请求数据,以获得服务器的延迟。
访问http://mcping-5f55e.coding.io/server.php?servers={"cn1":"cn1.minecrafthelloworld.tk"}
可以得到以下结果:
只要在服务器上设置Cron,用脚本(bash脚本都行,Python也不错)定时通过比较不同节点的ping值、连通性,使用vxDNS的API对main子域名的记录进行及时调整,就能做到上面的那些。甚至,如果你连启动器都是自己写的,你可以在启动器里加入记录ping值得功能。vxDNS除了支持API调整记录之外,还支持对自定义的IP段做不同的解析。只要有足够多的样本数据,可以将不同IP段(比如电信与联通、不同的地域)的玩家解析到对他们最快的线路上。
PS——额外的好处
分线路的最大目的还是在于减少用户卡顿的可能,那么还有什么其他的好处吗?答案是肯定的。你可以不将自己服务器的IP地址公布出来,仅仅告诉玩家你的“线路”子域名,这样可以减少服务器被攻击的可能性。如果你负担不起国内高内存VPS高昂的费用,可以将开服的服务器搬到国外,比如搬瓦工4G内存的VPS,月费不到50软妹币:
一般直接连接的话,这类美国低价VPS可能会卡得没法玩。但通过国内服务器的转发,可以极大提高用户连接的速度,即使比起把服务器开在国内依然会慢一些(这是必然的,线路再怎么优化数据毕竟去美国转了一圈),但依然在可以接受的范围内。
最后的超神之路:
再倒回来,vxTrans本质上是流量转发服务,因此,实际上可以利用vxTrans自身的几个服务节点进行流量跳转,比如从Client->CN-CMCC->JP-KDDI->Server,根据测试,vxTrans服务点之间的网络做了很好的优化,有加速的作用,从内部服务点进行二次跳转可以优化到即使在夜间高峰期连接美国地区的延迟不超过150ms。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/171792
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.