写这篇博客的目的是记录一下用闲置的内网机器开饥荒服务器的历程。如果你也刚好需要一个稳定的饥荒服务器,又不想去租赁昂贵的云服务器,这篇博客将非常有帮助。
动机
其实很久以前我就做过类似的探索。只不过当时玩的游戏是MC。困境的都是类似的,无论是饥荒还是MC,都是一群人在共同的服务器上玩才好玩。共同的服务器,需要能够被所有人访问到,那么就需要一个公网上可见的IP。各家云服务器厂商都提供有公网IP的云服务器,但是定价过高。对于这些游戏来说,服务器的CPU和内存配置越高越好,这意味着各个厂商提供的基础版云服务器还不够,还得继续加钱。
为了摆脱上面这种困境,我们可以把闲置的内网机器利用起来。比方说你的旧笔记本,或者某台分配给你但你不常用的台式机。现在基本上人人都能搞到一台这样的闲置机器。不要小瞧自己的闲置机器,他们的配置通常都不低于8G内存和i5的CPU。这样的配置想去云服务器厂商那里配一个一样的可不便宜,一年大约400元才能租下来的。这样的配置也完全能够满足MC或者饥荒的要求了,服务器跑起来后不会因为内存不足或者CPU不够好而卡顿。
饥荒服务器安装
安装教程:
https://github.com/qinming99/dst-admin/blob/master/README-zh.md
注意系统需要是Ubuntu。如果你的闲置机器不是Ubuntu,你得给它装个Ubuntu系统。
服务器的默认监听端口是8080。安装完成后,在浏览器上访问127.0.0.1:8080
即可访问饥荒服务器管理后台。
在这个后台上可以设定管理员、开关游戏服务器、备份和回滚等。功能很全,自行探索去吧。
给机器连上校园网。此时,同在校园网内的朋友就可以通过内网IP直连。直连方式是在游戏界面按键盘上的~
按钮,唤出命令行。然后输入c_connect("机器的内网IP",10999)
。
为了让机器重启的时候能够自动运行饥荒管理后台,我在cron job里添加了命令。具体做法为crontab -e
,然后添加:
1 | @reboot echo 0|./dstStart.sh |
这个命令的意思是重启后执行后台启动脚本,每天零点5分的时候也执行一次。如果当前后台已经启动了,这个命令不会起作用。如果当前没有启动,这个命令就会启动饥荒管理后台。所以该命令是一种防备式的命令。
内网穿透
想让内网之外的朋友能够访问到服务器,就需要做内网穿透。当然,饥荒跟MC不太一样,饥荒有一个官方的服务器存在,它会把玩家自己开的服务器映射到它的官方房间列表上。所以,理论上我们直接去房间列表搜索自己开在内网中的服务器,也是能够进去的。但是这种方式可能受限于官方中转服务器和我们机器的距离,实际的体验感不好,容易卡顿。实践表明,如果玩家都在国内,花小价钱租一个最便宜的云服务器,然后使用内网穿透把我们机器的端口映射到云服务器的端口上,不会卡顿,游戏体验感不错。如果有朋友已经有云服务器了,可以跟他商量一下借用一下他的云服务器在做内网穿透的中转服务器。内网穿透不会占用太多GPU和内存,所以完全可以部署在有其他用途的云服务器上。
我们使用著名的frp来做内网穿透。这是非常著名的开源内网穿透软件,不熟悉的可以去谷歌搜一下,也可以看看我之前写过的教程(在本博客搜frp可以看到我多次提过这个软件)。
我这里是花了50左右租了一个最低配置的华为云服务器,在上边部署了frps。在本地机器上,则部署一下frpc,配置文件frpc.ini这样写:
1 | [common] |
注意,需要给饥荒的三个端口都做内网穿透。三个穿透服务的命名也得相互区分。
完成这些之后,可以把frps的启动也写入cron job,这是保证在机器异常关机或者重启后内网穿透服务也能开机自启动。具体做法是crontab -e
,然后添加:
1 | @reboot /home/jxl/research/frp_0.43.0_linux_amd64/screen_frpc.sh |
这里的screen_frpc.sh是我写的一个用screen开frpc的脚本。它的作用是强制删除之前的frpc screen,重新开启一个screen运行frpc。这种设计类似于定期强制刷新frpc与frps之间的连接。:
1 | #!/bin/bash |
完成这些后,不在校园网的朋友只需要在游戏界面输入c_connect("华为云的IP",10999)
即可与我们的服务器直连。