晓风博客

一片荒芜的地方

自建饥荒联机版服务器

饥荒联机版是个很有意思的游戏,可惜如果联机的朋友距离较远或是主机网络不稳定游戏的体验会大大打折。摸索出来了几种办法来解决这个问题,希望以后能一起联机愉快地玩耍。

一个人在西安,另外一个人在新加坡。不管是西安的朋友开饥荒服务器当主机还是新加坡开服务器当主机,最终的延迟可能都在 200ms 往上,毫无游戏体验可言。这种情况下有什么办法来解决网络的延迟问题呢?

网络延迟的原因一个原因是距离远,如果你能把对方叫到你隔壁房间玩,那大概率是没啥延迟了。但显然这并不是解决方案,那作为解决方案能否把服务器架设到两地中间,这样双方同时去这个服务器延迟就会第一点呢?

在两地中间架设服务器

当我想到这个方案的时候,我天真的以为地理意义上的中间地即是网络上最快的。例如西安到新加坡的地理意义上的中间位置大概是越南,那在越南找个服务器架上就可以了。但是当我用 traceroute 跟踪了一下之后却发现结果大跌眼镜。

从图上可以看到实际上是绕路美国了一圈然后才到新加坡的,造成这样的结果原因很复杂,可能和你的运营商所在的线路有关系。在看了一些文章以后发现香港可能是个更好的选择,国内到香港的速度一般都比较快,而香港大多数情况下又能直接连接到新加坡。如果能在香港找一个服务器那便是相当于强制从香港路过,想必要比走美国绕路要快的多。另外之前是西安到美国再到新加坡,优化之后将会变成 A 从西安出发去香港,B 同时从新加坡出发去香港,这样也会比一个人开服务器直连的效果好很多。因此这个方案最主要的是找到稳定的中间点,不一定是地理意义上的,但最好 ping 一下你即将要选择的中间节点,看看延迟和丢包率的情况如何。

搭建饥荒服务器

网上搭建饥荒服务器的教程非常多,通常都很冗余。而我坚信 2020 年了搭建一个服务器完全不需要运行如此冗余的脚本,不出所料一个 docker 命令搞定所有。

1
docker run -v ${HOME}/.klei/DoNotStarveTogether:/data -p 10999-11000:10999-11000/udp -p 12346-12347:12346-12347/udp -it jamesits/dst-server:latest

在 docker 搭建完成后,你的 home 目录会有 .klei 文件夹,按照网上的一些教程来进行 token 以及世界相关的配置之后便可以畅快玩耍了。轻车熟路后这样的一个服务器搭建可能只需要最多20分钟即可搭建完毕。然而还没高兴起来就发现当我导入了一个 400 天的存档到我买的单核 1G 内存的服务器上时服务器爆了,因为存档的时间太长数据太多,服务器性能不足无法。辗转搜索后发现如果你想支持地上和洞穴两个世界那你的服务器至少需要双核 4G 内存,乍一想这成本有点高啊,一个搬瓦工这样配置的服务器一年需要 200 USD。只是为了解决两三个人联机玩游戏的问题似乎有点杀鸡用牛刀的感觉。有没有其他办法呢?

曲线救国之代理模式

如果这样的一个服务器太贵那是否能走一个中间人代理呢?在本地架设服务器,本地机器的性能是完全足够的。然后把本机的服务器通过某个中间服务器代理出去,这样看起来别人访问的是你在香港的服务器但实际上数据是从你本地发送过去的。虽然比之前的方案路长了一点,但是仍然是一个不错的方案至少不用绕路美国。

frp 便是这样的一个工具,设置你在香港的中转服务器为 frp server,只需要设置一个密码和端口即可:

1
2
3
[common]
bind_port = 7000
token = yourpassword

然后启动饥荒服务器的本地机器设置好饥荒服务器的代理端口:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[common]
server_addr = 106.54.56.15
token = yourpassword

[dst_master_udp]
type = udp
local_port = 10999
local_ip = 127.0.0.1
remote_port = 10999

[dst_cave_udp]
type = udp
local_port = 10998
local_ip = 127.0.0.1
remote_port = 10998

直接在 Steam 中启动饥荒即可,这样的方案好处是你完全不需要中间的代理服务器有多强的性能,单核 500M 完全够用。你所需要的仅仅是一个好的网络节点,这样的成本一个月完全可以控制在 10$ 以内了。看起来现在可以愉快地玩耍了?

主机想关机怎么办?

对的,如果你期望你的朋友们可以随时进入你的饥荒服务器,那上面的方案要求你的这台电脑一直开启 steam,你可能不舍得让你的 6700k/1070 彻夜工作,毕竟费电而且吵。这个时候如果你的家里有 NAS 服务器并且性能还可以,那你就可以用这台服务器装上 docker 然后按照上面的 docker 教程一键启动一台服务器了。家里的这台 NAS 可以同时承担 NAS、饥荒游戏服务器、软路由等多种功能,也算是一机多用了。另外你在香港某地的 500M 内存服务器除了开个 frp 做游戏代理之外也可以用作他用,顺手 docker 启动一个 xxx 服务器岂不美哉。

服务器总算是折腾好了,现在终于可以安心的在饥荒里种地了,希望各位也能玩的开心。

阅读更多