FreeBSD Jail 容器中的 Minecraft 服务器
发布时间:2025/04/05
作者:𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗
今天——应我儿子的要求——我们来讲讲如何在 FreeBSD Jail 容器中运行 Minecraft 服务器。

这有点像 Linux 上的 Docker/Podman,但安全性更高。
准备工作
首先我们将在 /jail 路径下创建环境,并获取所需的 FreeBSD 基本系统 版本。
今天我们将使用 FreeBSD 14.2-RELEASE 版本。
接下来我们将创建专用的 Minecraft FreeBSD Jail,并为其填充独立的 基本系统 内容。
我们还会复制 /var/run/dmesg.boot,因为 Minecraft 服务器需要使用它。
创建
现在我们将设置基础 FreeBSD Jail 配置。
这些配置将作为所有其他 Jail 的默认值,除非我们重新定义它们。
现在配置我们的 Minecraft Jail。
我们将使用局域网接口 em0 和 IP 地址 10.0.0.210。
下面你还会看到宿主机上的规则集 /etc/devfs.rules。
现在我们可以启动我们的 Jail 了。
你也可以使用我提供的工具 jmore(8)。
为了让 Minecraft Jail 在启动时自动运行,需要在 host 系统的 /etc/rc.conf 文件中添加如下内容:
配置 FreeBSD Jail
现在我们进入 Minecraft Jail。
使用 jmore minecraft c 相当于执行了知名的命令:
示例:
接下来进行一些基本配置,例如设置 DNS 或将 pkg(8) FreeBSD 包管理器切换到 latest 分支:
现在安装其他所需的包,因为 Minecraft 服务器需要通过 FreeBSD Ports 构建:
由于需要通过 FreeBSD Ports 构建 Minecraft 服务器,并且许可需要手动接受(或忽略)(译注:并不需要),因此接下来使用 gitup 工具获取 FreeBSD Ports 树。
在 make config 阶段选择选项 DAEMON 。
构建
接下来我们将构建 Minecraft 服务器。
Minecraft 服务器配置
按照 pkg-message 中的建议,我们将在 /etc/fstab 文件中添加额外的虚拟文件系统。
同时,我们还要确保这些文件系统在 Jail 启动时通过 /etc/rc.local 文件被挂载。
我们不会修改 Minecraft Jail 的主 /etc/rc.conf 配置文件来添加所需的 Minecraft 服务器选项。
同时,我们将“接受”EULA,并在 /usr/local/etc/minecraft-server/server.properties 文件中创建基本的 Minecraft 服务器配置。
你也可以在 /usr/local/etc/minecraft-server/java-args.txt 文件中配置额外的 Java 参数。如果默认值对你的情况太小,请自行增大。
启动
现在是时候启动已安装并配置好的 Minecraft 服务器了。
看起来服务器运行正常——但如果不正常,可以使用以下命令进行调试。
连接 Minecraft 客户端
首先 – 确保你的客户端版本与 Minecraft 服务器版本一致 – 我这里是 1.21.4。
我的情况是,Minecraft 客户端是在某台随机的 Windows 电脑上启动的,如下所示。

点击 多人游戏 按钮。

然后点击 添加服务器 按钮 – 我们将添加基于 FreeBSD 的 Minecraft 服务器。
输入你喜欢的 Minecraft 服务器名称和 IP 地址。

稍等片刻,我们的基于 FreeBSD 的 Minecraft 服务器将出现在列表中。

现在点击 加入服务器 按钮加入服务器。

我们会看到 正在连接服务器… 的提示。
……片刻之后,我们就成功加入了 Minecraft 服务器。

用户
由于我不是 Minecraft 专家,我花了一些时间才找到在该服务器上定义“管理员”的方法。
幸运的是,我有一个可行的解决方案 🙂:
当我在这里写关于我自己的 jmore(8) 工具时 New jmore(8) FreeBSD Jails List/Manage Tool,我最初把它叫作 jless(8),但有人提醒我这个名字已经被一个处理 JSON 的工具占用了。我们稍后会用到它 🙂。
当有人连接到我们的服务器时,他的 名字 和 uuid 会被添加到 /usr/local/etc/minecraft-server/usercache.json 文件中,如下所示。
用 bat(1) 命令显示颜色后看起来效果更好。

现在 – 要让这些用户成为“管理员”,我们需要将他们添加到 /usr/local/etc/minecraft-server/ops.json 文件中,并且重启 Minecraft 服务器才能生效。
权限等级 4 是记录中最高的权限等级。

现在我儿子拥有了他需要使用的所有命令,例如 /gamemode 或 /time 🙂。
总结
欢迎随意分享你对个人 Minecraft 服务器其他所需配置的想法。
更新 1 – FreeBSD Jail 与 Linux Podman
我没想到第一句话会成为评论的焦点,因此在这里补充一些细节。我们来讨论一下 FreeBSD Jails 和 Linux Podman 容器在安全性上的差异。
隔离性: 对于无 root Podman 来说,如果启用了 SELinux/AppArmor,它的隔离性似乎与 Jail 在同一水平。但如果没有 SELinux/AppArmor,Jail 提供了更好的隔离性。当你在 Podman 中启用 SELinux/AppArmor 并再添加 MAC 框架(如 mac_sebsd / mac_jail / mac_bsdextended / mac_portacl)时,Jail 的隔离性更高。
内核系统调用暴露面: 即使是无 root Podman,除非通过 seccomp(SELinux)限制,否则仍有“完全”的系统调用访问权限。Jail 对系统调用的使用有限制,不需要额外工具就能实现;在 FreeBSD 上结合 MAC 框架还可以进一步缩小系统调用的可用范围。
防火墙: 你无法在无 root Podman 容器内运行防火墙。而在 VNET Jail 中,你可以运行完整的网络栈和任何防火墙(如 PF 或 IPFW),独立于宿主机运行,这意味着安全性更高。
总结: FreeBSD Jail 通常在默认情况下比 Podman 容器更安全,如果花时间添加额外的安全层,其安全性会更高。
市场存在时间也是一个重要因素。
Jail 自 1999/2000 年引入以来已经投入生产环境,已有 25 年历史,久经考验。Docker 从 2014 年开始流行,时间短约 10 年,但我们要比较的是 Jail 与 Podman。Podman 的无 root 支持首次出现在 2019 年晚期(1.6 版本),因此在市场上的时间不足 6 年。
这意味着 Jail 是所有方案中最经受考验的。
最后更新于
这有帮助吗?