从0入门搭建
幻兽帕鲁是一个新出的类方舟宝可梦游戏,EA阶段就肥肠爆火。但其热度明显官方服务器是抗不下的。
好消息:官方给了服务器搭建文档
坏消息:配置要求非常高
一台4c16的服务器只能说一点都不便宜了。
那么有没有便宜的方案呢?还是有的。假设你有家里有闲置设备的话,满足其配置要求,也可以尝试一下。就是家里有一个非常严重的问题:没有固定公网。
那么,解决这个问题有几种思路:
- 内网穿透服务,这个看服务商线路质量。
- 通过云服务器进行内网搭建,并配置端口转发。
这次使用的是方法2。其云服务器配置为:2H2G 3M阿里云,开启公网ipv6权限
方法2与方法1其原理差不多,主要是核心的隧道该如何构建,来解决家里云没有固定ip的问题。
使用Tailscale搭建内网
进入Tailscale官方网站,进行账号注册。
在Machine界面中,点击Add Device
其中linux的命令:
curl -fsSL https://tailscale.com/install.sh | sh
你需要在你的云服务器和家里的服务器都安装Tailscale
安装后,使用tailscale up进行注册。注册过程中会提示你复制链接进行授权
对于阿里云,可能需要tailscale up --netfilter-mode=nodivert 来解决注册完成后阿里内网无法访问的问题
注册成功后,tailscale的管理界面会现实connected.
至此内网部分搭建完成,可以通过ping来测试内网连通性以及延迟。
通过iptables配置端口转发
首先编辑/etc/sysctl.conf
添加ipv4转发
nano /etc/sysctl.conf
#添加net.ipv4.ip_forward = 1
net.ipv4.ip_forward = 1
sysctl -p
配置iptables
iptables -t nat -A PREROUTING -p udp --dport 8211 -j DNAT --to-destination 你的家里云内网ip
iptables -t nat -A POSTROUTING -o tailscale0 -j MASQUERADE
配置幻兽帕鲁服务端
通过配置生成器快速生成配置
把生成器生成的内容复制到steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
,注意不是PalServer根目录的DefaultPalWorldSettings.ini
根据官方文档启动服务器
./PalServer.sh
进入游戏测试配置是否生效,以及延迟
至此搭建完成。
进阶部分
配置service文件
下面是一个参考写法:
[Unit]
Description=Palworld Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
User=user
Group=user
WorkingDirectory=/home/user/Steam/steamapps/common/PalServer
ExecStart=/bin/bash -c "/home/user/Steam/steamapps/common/PalServer/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS"
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
[Install]
WantedBy=multi-user.target
service文件放置在/etc/systemd/system
下,如
sudo nano /etc/systemd/system/palserver.service
可以按需要添加restart策略.
下面是一个添加restart策略的案例:
[Unit]
Description=Palworld Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
User=user
Group=user
WorkingDirectory=/home/user/Steam/steamapps/common/PalServer
ExecStart=/bin/bash -c "/home/user/Steam/steamapps/common/PalServer/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS"
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
表示当进程崩溃时,等待10秒后重新启动进程。
自动备份
编写一个简单的bash
#!/bin/bash
# 源目录
SOURCE_DIR="/home/user/Steam/steamapps/common/PalServer/Pal/Saved"
# SaveGames 文件夹名称
FOLDER_NAME="SaveGames"
# 目标目录 - 替换成您的目标目录路径
DESTINATION_DIR="/home/user/Save"
# 使用当前时间创建一个时间戳
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
# 创建打包文件的文件名
FILENAME="SaveGames_${TIMESTAMP}.tar.gz"
# 进入源目录
cd "${SOURCE_DIR}"
# 打包并压缩 SaveGames 文件夹
tar -czf "${FILENAME}" "${FOLDER_NAME}"
# 将打包好的文件移动到目标目录
mv "${FILENAME}" "${DESTINATION_DIR}"
# 输出操作完成的信息
echo "SaveGames has been backed up and copied to ${DESTINATION_DIR}"
对bash脚本进行一个crontab定时任务
crontab -e
# 0点/8点/16点/20点/22点执行一次备份脚本
0 0,8,16,20,22 * * * /home/momo/save.sh > /dev/null 2>&1
如何恢复?
选择你要恢复的存档,进行一个覆盖。