空岛灵境

幻兽帕鲁服务器管理 REST API:踢人封禁、公告与远程存档

《幻兽帕鲁》服务器管理接口已从 RCON 换成 REST API,踢人、封禁、公告、强制存档、关服都走它。怎么开、怎么认证、常用端点怎么调,以及 8212 端口为什么绝不能开到公网。

专用服务器开起来之后,房主迟早要做这几件事:踢掉一个捣乱的人、在重启前给全服发条公告、不停服强制存一次档。《幻兽帕鲁》给这些事提供的官方接口是 REST API——老教程里的 RCON 已被官方弃用并宣布将停止工作,还在教你配 RCON 的内容可以直接跳过。

这篇讲清楚接口怎么开、怎么调、能做什么、以及一条绝对不能破的安全底线。服务器本身怎么搭在开服教程里。

为什么不再是 RCON

RCON 在帕鲁上有三个实际问题,官方弃用它不是心血来潮:

  • 多字节字符会被截断。玩家昵称里有中文、日文、韩文时,RCON 指令经常判定失败或者日志乱码——对国内的服来说这几乎是必然撞上的。
  • 认证太弱。明文密码走网络,端口一旦暴露就是在公网上裸奔 AdminPassword。
  • 返回的是一段字符串。想拿在线人数、帧率做监控,得自己从文本里抠。

REST API 走 HTTP + JSON,这三条全部解决。

怎么开

PalWorldSettings.ini 那一行里加三项(改法与格式陷阱见世界设定详解),改完重启服务端:

RESTAPIEnabled=True
RESTAPIPort=8212
AdminPassword="一个足够长的密码"

AdminPassword 不只是接口的密码,它同时是游戏内管理员指令的密码。设一个长的,不要和 ServerPassword 一样——房间密码是要发给朋友的,管理密码不是。

认证方式是 HTTP Basic:用户名固定为 admin,密码就是上面那个。

一条不能破的底线

8212 端口不要对公网开。 官方文档的原话是这套接口「不设计为直接暴露在互联网上,直接暴露可能导致服务器被未授权操作」。它能关服、能踢人、能改的东西太多,而它的全部防护只有一个 Basic 密码。

正确的姿势:接口只监听本机,脚本在同一台机器上调它;真要远程管,走 SSH 隧道,或者前面加一层带 HTTPS 和来源 IP 白名单的反向代理。安全组里看到 8212 对 0.0.0.0/0 开放,就是配错了。

常用端点

全部挂在 http://127.0.0.1:8212/v1/api/ 下,写操作用 POST、JSON 请求体:

端点方法做什么
/infoGET服务器名、版本
/playersGET在线玩家列表,含每个人的 userId
/metricsGET帧率、在线人数、运行时长这类指标
/settingsGET当前生效的世界设定
/announcePOST全服公告
/kickPOST踢人
/banPOST封禁
/unbanPOST解封
/savePOST立即把世界写盘
/shutdownPOST倒计时后优雅关服
/stopPOST立即强制停止

几个最常用的,curl 直接能试:

PW='一个足够长的密码'
API='http://127.0.0.1:8212/v1/api'

# 谁在线
curl -s -u "admin:$PW" "$API/players"

# 全服公告
curl -s -u "admin:$PW" -X POST "$API/announce" \
     -H 'Content-Type: application/json' \
     -d '{"message":"Server restarts in 5 minutes"}'

# 强制存档
curl -s -u "admin:$PW" -X POST "$API/save"

# 60 秒后优雅关服,期间自动发全服公告
curl -s -u "admin:$PW" -X POST "$API/shutdown" \
     -H 'Content-Type: application/json' \
     -d '{"waittime":60,"message":"Server is going down in 60 seconds"}'

踢人与封禁:认 userId,不认昵称

踢人和封禁的对象是玩家的 userId,不是游戏里显示的名字——名字随时能改,userId 不能。所以流程是两步:先 GET /players 拿到那个人的 userId,再把它交给 /kick 或 /ban:

# 先查
curl -s -u "admin:$PW" "$API/players"
# 再封
curl -s -u "admin:$PW" -X POST "$API/ban" \
     -H 'Content-Type: application/json' \
     -d '{"userid":"steam_7656119xxxxxxxxxx","message":"Banned for griefing"}'

跨平台服务器上这一点更要紧:Xbox 和 PS5 玩家没有 Steam ID,老式的 KickPlayer <SteamID> 指令对他们无效,而 userId 是所有平台统一的标识。

踢和封的区别:踢出只是断开这一次连接,对方随时能回来;封禁是把他挡在门外,直到 /unban。

托管上不用碰接口

空岛灵境 的《幻兽帕鲁》专用服务器把这一段收进了会员中心:我的服务器里那台服务器的在线玩家面板列出当前在线的人,捣乱的人直接点踢出或封禁,不用先查 userId,封过的人在已封禁里随时解封。管理密码由平台代管,接口本身不对公网开放;自动备份前也会先通过它强制存档一次。

用它做什么

接口真正的价值不在手敲 curl,在于把它接进脚本:

  • 不丢存档的定时重启:公告、存档、关服、拉起串成一个 cron 任务,整套做法在内存泄漏与定时重启里。
  • 备份前先落盘:拷存档之前先 POST /save,拿到的才是完整的一份(备份与回档)。
  • 帧率监控:/metrics 定时拉一次,服务端帧率长时间掉到 20 以下就是该重启的信号。

常见问题

帕鲁服务器怎么踢人和封禁?

开启 REST API 并设好 AdminPassword,先用 /players 查到对方的 userId,再用它调 /kick 或 /ban。对象必须是 userId,昵称可以改所以不作数。

帕鲁的 RCON 还能用吗?

官方已宣布弃用并将在后续版本停止工作,而且它对中文昵称有截断问题。新开的服直接用 REST API,别在 RCON 上花时间。

REST API 端口能开给朋友帮忙管理吗?

不能对公网开。它的防护只有一个密码,却能关服、踢人、改世界。要远程管就走 SSH 隧道或加反向代理与 IP 白名单。

不停服怎么强制存档?

POST /save。它让服务端立刻把内存里的世界写盘,之后再拷存档目录。但它只是降低撞上写盘的概率,正式备份还是停服拷最稳。

不想自己维护?

选好游戏和套餐就能开服,机器独享,备份、版本更新和到期提醒都由我们盯着。

查看套餐