- 因为实在挤不出大块时间,这几天的日志只能攒到同一天写了。虽然忙得焦头烂额,但我还是毅然接手了朋友的服务器并着手全面改造。
先交代一下服务器规模:这是一个典型的群组服,架构为 1 个 Paper 端(登录认证/大厅) + 1 个 Velocity 代理端 + 10 个 Fabric 子服,游戏版本全部统一在 1.21。版本低下且要求尽量少动原来的东西,难度可想而知。
6月29日
第一个改造目标:解决 XaerosWorldMap 和 XaerosMinimap 模组的问题。
这两个地图模组放在服务端会导致客户端也必须安装它们,否则直接拒绝连接。原因在于 Fabric 的服务端模组注册表极其严格,服务端有而客户端没有的模组会被判定不匹配。
更麻烦的是群组服的特性:如果只让玩家客户端装这两个地图模组,跨服时地图数据会分不清归属,直接把不同子服的地图混在一起,各种错乱。
这里用遥远地平线做演示,原理一样的。
6月30日
朋友表示这两款地图模组属于刚需,不能砍。查了一圈发现,只有 Paper 核心才有相关的修复插件,而且这个插件没办法通过任何兼容层模组(比如 BukkitFabricLoader)移植到 Fabric 端上,纯粹是架构鸿沟。
7月1日
最终还是找到了一个变通方案,但这个方案并不适合所有服务器。如果有你们真的急于解决,我再说出来。
7月2日
第二个改造:服务器安全性。
后端绝大部分都是 1.21 的 Fabric 服,说实话,原生环境基本和安全绝缘。我的策略是先易后难:
· 给负责登录认证的 Paper 服上一整套安全插件,把防线前移;
· 在 Velocity 代理端装上 LuckPerms 做全局权限管理。
然后发现朋友其实在所有 Fabric 子服都装了 LuckPerms,但没配置,也没装让 LP 适配一些原版指令的 vanilla-permissions 模组。
7月3日
着手配置 LP 数据库的时候踩了深坑:兼容 1.21 的 LuckPerms 版本并不新,配置文件采用的还是老旧的 HOCON 格式。照着正确格式反复配置数据库都不生效,排查了很久才定位到是格式解析问题。
7月4日
数据库配置依旧无解,无奈之下只好回归原始方法——逐个子服手动分配权限。好在我们很少给玩家下发权限,勉强能接受。
接着给所有 Fabric 子服加上模组:基础的反作弊、用于指令二次确认的 CommandSafety、保证默认无 OP 的 OpLock。至此,终于完成了从“给 OP”到“给权限”的转变,杜绝了因误给 OP 导致的隐患。
7月5日
第三个改造:VPN 拦截与优化,这也是最失败的一环。
原本使用的禁止 VPN 插件竟然默认阻止中国玩家进入,改了配置文件也毫无作用,只好换成 FoxGate 。
优化方面,除了增加 ModernFix(现代修复) 和 CrashExploitFixer 之外,不敢再多加。尤其是“奇观服”——这个子服因为塞了大量新增方块/生物的模组,模组冲突严重,最终只能忍痛移除 C2ME 和一部分优化模组,直接废掉了一个 Fabric 端的部分优化能力,非常可惜。
7月6日
没时间,鸽了。
7月8日
前一天只做了一些模组冲突测试。今天开始第四个改造:给 AuthMe 登录插件加一个登录界面。 - 然而 Paper 核心太老,新版 AuthMe 的登录界面配置根本用不了,连专门的界面插件都没法用。升级 Paper 核心后发现 Paper 核心与游戏版本强绑定,还很难换回去。
最后只能给 Paper 和代理端都装上 ViaVersion 与 ViaBackwards,既解决了界面需求,还能让不同版本的玩家都能进服。有福自然有祸,这个决定给后面埋了大雷。
7月9日
测试时发现,客户端模组装多了进不去。
经排查,代理端的 ViaVersion 会向后端服务器索要数据来核对版本。玩家缺模组或多模组没事,但一旦装了新增物品/生物的模组,插件向服务器索要这些不存在的物品数据失败,直接拒绝连接。
7月10日
试图只给后端子服安装 ViaFabric 及相关模组来解决问题,没用。
因为代理端缺少 ViaVersion 就根本读不懂后端 ViaFabric 发来的数据,两边根本握不上手。折腾了两天,最终还是给代理端把 ViaVersion 装了回去,认栽。
- 7月11日 – 12日全服模组大测试,各种边界情况拉了一遍。服务器算是基本改造好了,但遗留的难题依然不少:
· Distant Horizons(遥远地平线) 因为版本低,装到服务器上依然无法正确识别服务器地图;
· 前面提到的ViaVersion索要数据、C2ME模组冲突等坑也还没有完美方案。
如果你们也想交流这些偏门问题,或者有更好的思路,欢迎来群里一起探讨。
Q群号:865100202
-