无公网 IP 的 Ubuntu 环境下 Factorio 服务端的安装配置及利用阿里云服务器和 FRP 实现的内网穿透
0x00 环境
-
内网机器:Ubuntu 18.04 Server
-
服务端程序:Factorio 0.16.51 Headless Stable
-
内网穿透软件:FRP
-
阿里云 VPS:Ubuntu 16.04 Server
0x01 从官方网站上下载服务端程序
直接从 Factorio 官网中下载 Headless 版程序即可(网速很感人,推荐搭梯子下载)。下载得到一个 factorio_headless_x64_0.16.51.tar.xz 文件,拷贝到内网服务器中,再使用 tar 命令解压:
tar -xJvf factorio_headless_x64_0.16.51.tar.xz
解压可得到 factorio 目录。
0x03 配置文件
一个比较重要的配置文件是 server-settings.json,在 data 目录内有一个 server-settings.example.json 作为样例,复制一份根据其中的 comment 改一改参数即可。
cp /path/to/factorio/data/server-settings.example.json /path/to/factorio/settings/server-settings.json
vim /path/to/factorio/settings/server-settings.json
其余配置文件在 data 中也有相应的样例,可以参考,但是本文中用不到这些配置文件。
0x04 建立新存档
为存档准备一个目录
mkdir /path/to/saves/
运行服务端建立存档
/path/to/factorio/bin/x64/factorio --create /path/to/saves/new_game --server-settings /path/to/factorio/settings/server-settings.json
0x05 运行服务端
调试阶段没必要将服务端运行为守护进程,不妨直接在命令行中运行,还能即刻看到日志信息,方便发现问题
/path/to/factorio/bin/x64/factorio --start-server /path/to/saves/new_game
0x06 进行内网穿透
本文使用 FRP 来进行内网穿透,需要用到一台带有公网 IP 的服务器,我恰好有一台闲置的阿里云服务器,刚好这里用上。基本 FRP 配置可以阅读专门讲解 FRP 的博客,本文不做赘述。
特别需要注意的是,服务端默认端口在 34197,使用 UDP 协议进行通讯。
0x07 配置阿里云安全组
笔者被阿里云可爱可恨的安全性坑了一把,平时我们开放出的端口都是为 SSH,HTTP(S) 所准备的,因此都是 TCP 端口,由于该游戏使用 UDP 协议,所以在配置安全组的时候一定要注意将端口类型设置为 UDP 或者 ALL
0x08 登录游戏
在随便某一台电脑中尝试直连该服务器,地址填写经 FRP 转发后带有公网 IP 的服务器的地址及对应的端口(此时一般不是 34197 了),发现确实能登陆上,但是被阿里云 1Mbps 的垃圾带宽卡得砍树都费劲,加大阿里云服务器带宽应该可以解决。
0x09 注册为守护进程
懒得写 service,就写个 shell 脚本吧,每次想玩手动启动游戏就好了。
#!/bin/sh
# run.sh
nohup /path/to/factorio/bin/x64/factorio --start-server /path/to/saves/new_game --server-settings /path/to/factorio/settings/server-settings.json &
浙公网安备 33010602011771号