从零自建Minecraft服务器:域名解析、版本选择与离线模式全指南

从零自建Minecraft服务器:域名解析、版本选择与离线模式全指南 前阵子在列表里看到有人发帖我开了一个 mc 服务器有人一起玩吗happydog.ltd1.21.11离线可进。乍一看似乎只是个普通的招人帖但这句话的信息量其实相当大。域名、版本号、离线模式三个关键词基本就是一个自建 Minecraft 服务器的完整自我介绍。如果你也想跟朋友一起玩生存又不想被官方 Realm 或局域网限制绑住那看懂这句话背后的技术链路比单纯进去玩一圈更有价值。这篇文章就以这个实际示例服为切入点完整拆解一台 MC 自建服务器从环境准备、服务端选型、域名解析、离线模式配置到安全加固的全流程。看完之后你不仅能看懂别人的服务器是怎么搭起来的也能自己搭一个稳定、安全、朋友能随时进来的 Minecraft 服务器。1. 自己开服到底难不难先解决三个核心问题很多人第一次产生开服念头是因为联机体验太差了。官方服务器需要正版账号局域网联机需要同在一个网段用第三方联机工具又要面对延迟、限速和广告。自己开服虽然听起来程序员味很重但实际上真正决定成败的只有三件事服务端能不能跑起来、端口能不能通、玩家能不能连进来。先说结论在 2025 年这个时间点自建 MC 服务器的技术门槛已经比过去低很多。官方服务端只要装好对应版本的 Java 就能启动云服务器按量付费一个月几十元就能带起来一个小型生存服域名解析和端口放行也都有非常成熟的图形化操作界面。真正容易踩坑的反而是那些看起来很简单、但做错一步就导致别人死活连不上的细节。以标题里出现的 happydog.ltd 为例它至少透露了三个信息第一服务器绑定了一个独立域名而不是直接用裸 IP 让玩家连接。这说明开服者做了域名解析或者有长期运营的打算。第二版本号是 1.21.11玩家客户端和服务端的版本必须匹配否则会出现协议版本不兼容。第三离线可进四个字是关键它代表服务器把online-mode设为了false关闭了 Mojang 会话验证。理解了这三点你就明白这篇文章要聊的不是怎么下载一个服务端按启动这么简单而是要把服务器从能跑做到能稳定运营。下面按完整流程展开。2. 版本与服务端选型为什么 1.21.x 是当前主战场Minecraft Java 版的版本迭代非常快1.21 系列已经属于较新的游戏内容阶段。从技术角度看版本选择直接决定了两件事需要哪个版本的 Java 运行环境以及能使用哪些服务端分支和插件生态。2.1 1.21.x 的 Java 版本要求Minecraft 从 1.20.5 开始要求 Java 21 运行服务端1.21.x 系列自然也不例外。如果你还用 Java 8 或 Java 11 去启动 1.21 的官方服务端通常会直接报版本不支持的错误例如Error: A JNI error has occurred, please check your installation and try again所以开 1.21.x 的服务器环境第一步就是装好 Java 21。2.2 主流服务端分支对比很多人以为开服 下载官方 server.jar但实际上服务端有很多选择不同分支对应不同的使用场景。服务端核心特点适合场景Vanilla Official原版服务端兼容性最好性能一般测试、小范围纯原版体验Spigot支持 Bukkit 插件性能优于原版小型插件服PaperSpigot 的高性能分支支持插件配置项多中小型生存服、插件服Fabric轻量级模组加载器适合模组服需要玩 Fabric 模组Forge / NeoForge经典模组加载器模组生态最丰富大型模组整合包服从实践角度看如果你的目标是开一个朋友都能进、加一点基础管理插件、保持原版玩法的小型服务器我更推荐使用Paper而不是官方纯原版。原因很简单Paper 在区块加载、实体运算、网络协议处理上做了大量优化同样配置的云服务器跑 Paper 能承受的在线人数通常比原版更高而且延迟波动更小。标题中的 1.21.11 如果是一个具体的未来或测试版本开服思路完全一致只需要把服务端 JAR 换成对应版本即可。这里不纠结于具体版本号的发布细节核心是服务端版本必须和玩家客户端版本匹配或者使用支持向下兼容的协议处理方式。3. 环境准备云服务器、域名解析与 Java 21 安装有了服务端选型思路接下来就是真实的环境搭建。这一节以最常用的 Linux 云服务器为例操作同样适用于家中闲置电脑只是网络层处理稍有不同。3.1 服务器配置怎么选MC 服务器是典型的单线程高负载应用CPU 主频比核心数更重要。一个 2 核 4G 的云服务器带 5 到 10 个朋友同时在线不开大型模组完全够用。内存方面给 Java 进程分配 4G 是 1.21.x 生存服比较舒适的起点。这里需要提醒一句不要去选那种1核1G的入门级云服务器跑 MC跑是可以跑但加载区块时大概率会卡到玩家骂人。内存不足也会频繁触发 GC直观表现就是服务器每隔几秒就卡一下。3.2 域名解析happydog.ltd 是怎么生效的玩家在 Minecraft 客户端添加服务器时填happydog.ltd实际上要经历一次 DNS 解析把这个域名转换成服务器的公网 IP。开服者需要在域名服务商的控制台配置一条A 记录例如主机记录 记录类型A 记录值你的服务器公网 IP如果服务器 IP 是 IPv6 公网地址也可以配置 AAAA 记录。配置完成后可以通过命令行验证域名是否已经解析到目标 IPdig short happydog.ltd注意DNS 解析生效需要一段时间通常在几分钟到几小时之间。如果玩家报告域名进不去但 IP 能进多半是本地 DNS 缓存还没刷新或者记录值填错了。3.3 安装 Java 21以 Ubuntu 22.04 或 24.04 为例安装 OpenJDK 21 的命令如下sudo apt update sudo apt install -y openjdk-21-jdk java -version如果系统源里没有 Java 21可以手动添加 Adoptium 或使用sdkman管理多版本。不建议使用系统自带的 Java 8 或 Java 11 硬启动版本不匹配会浪费时间排查。3.4 创建专用目录与用户生产环境不建议直接用 root 用户跑 MC 服务器原因后面安全部分会详述。这里先建立一个专用目录和普通用户sudo useradd -r -m -d /opt/mcserver mcserver sudo mkdir -p /opt/mcserver sudo chown -R mcserver:mcserver /opt/mcserver之后所有服务端文件都放在/opt/mcserver下日志、地图、插件集中管理后续备份也简单。4. 服务端下载与初始化从 JAR 到控制台的三次启动目录准备好之后接下来是服务端本体。无论选择哪个分支初始化的流程都遵循同一个套路。4.1 下载服务端 JAR从服务端官方或对应分支的发布页下载server.jar放到/opt/mcserver目录下。以官方原版为例第一次启动时会有提示cd /opt/mcserver sudo -u mcserver java -Xmx4G -Xms4G -jar server.jar nogui此时服务端会因为没有接受 EULA 协议而退出并生成一个eula.txt文件。编辑它# 文件路径/opt/mcserver/eula.txt eulatrueEULA是 Mojang 给服务端定下的使用协议个人开服直接接受即可但要注意不能利用服务端做违反协议的事情例如将服务端二次分发或用于商业侵权场景。4.2 二次启动生成基础配置再次运行上面的启动命令服务端会开始加载世界生成server.properties、logs、world等目录和文件。第一次生成世界会比较慢观察日志出现Done (XX.XXXs)! For help, type help说明启动成功。4.3 创建一个规范的启动脚本每次手动敲 Java 命令不方便建议写一个启动脚本#!/bin/bash # 文件路径/opt/mcserver/start.sh cd /opt/mcserver MEMORY4096M JARserver.jar exec java -Xms${MEMORY} -Xmx${MEMORY} -XX:UseG1GC -XX:ParallelRefProcEnabled \ -XX:MaxGCPauseMillis200 -XX:UnlockExperimentalVMOptions \ -XX:DisableExplicitGC -XX:AlwaysPreTouch \ -jar ${JAR} nogui给脚本加执行权限后启动chmod x /opt/mcserver/start.sh sudo -u mcserver /opt/mcserver/start.sh启动脚本里使用了 G1GC 和几个常见 JVM 调优参数。小规模服务器不一定需要调优到这种程度但加上这些参数通常不会带来副作用反而能降低卡顿频率。5. 核心配置server.properties 与离线可进的真正原理初始化完成后最重要的配置文件是server.properties。玩家能不能进、游戏怎么玩、端口是多少都由它控制。5.1 常用配置项解释# 文件路径/opt/mcserver/server.properties # 是否开启正版验证。 # true玩家必须是正版 Minecraft 账号服务器会向 Mojang 会话服务器校验身份。 # false关闭会话验证离线可进。 online-modefalse # 服务器监听端口默认 25565 server-port25565 # 服务器描述会显示在客户端服务器列表里 motdWelcome to Happydog MC Server # 最大在线人数 max-players20 # 视野距离值越大服务器压力越大 view-distance10 # 出生点保护范围0 表示不保护 spawn-protection0 # 是否允许飞行。一般在生存服建议 false防止作弊需要飞行功能的模组服可开 true allow-flightfalse5.2 离线模式的真实含义很多人第一次看到离线可进四个字以为是不需要联网就能玩。这个理解是错的。Minecraft 客户端本身需要网络连接服务器所谓离线指的是服务器不会验证玩家的正版身份。当online-modetrue时玩家加入服务器时服务端会拿玩家的 UUID 和 accessToken 去请求 Mojang 会话服务器验证成功才放行。当online-modefalse时这一步被完全跳过任何客户端只要在离线登录模式下输入一个任意用户名就能连入服务器。这带来两个直接后果第一玩家不需要购买正版 Minecraft 就能进服。这是很多人选择离线模式的主要原因。第二服务器的身份系统完全失效。因为服务端无法确认你是你任何人都可以顶着别人的 ID 进服盗号、冒充管理员、破坏建筑几乎无法追踪。所以离线可进不是一个简单的开关它代表开服者必须额外补齐安全能力。5.3 离线服务器的安全补偿方案如果你决定开离线服我的建议是至少做到以下三步而不是裸奔运营。第一步开启白名单只允许你信任的玩家进入# 在服务端控制台执行 whitelist on whitelist add Alice whitelist add Bob第二步安装 AuthMe 这类密码登录插件让每个离线玩家在进入时进行注册和登录。AuthMe 会为每个 ID 绑定一个密码即使有人冒用 ID没有密码也无法登入。第三步给予管理员权限时务必谨慎。不要在离线服上随便给玩家op权限插件如 LuckPerms比原版 op 系统更可控可以做到按组、按权限节点分配能力。从安全角度讲一个只开放给熟人、开了白名单、配了密码登录的离线服风险是可控的。但如果要做全互联网公开服我更建议关闭日离线模式引导玩家使用正版登录否则运维成本会非常高。6. 网络层端口、防火墙与域名解析的完整打通服务端配置完成后只剩下最后一个大关卡让外部玩家能通过网络访问到你的服务器。这一步最容易出问题也是自己开着好好的别人却永远连接超时的头号原因。6.1 云服务器安全组如果你用的是云服务器除了系统内部防火墙云平台还有一个安全组规则。需要在控制台添加一条入方向规则协议类型TCP 端口范围25565/25565 来源0.0.0.0/0 或限定为你信任的 IP 段注意安全组规则修改后通常立即生效但有些平台会有几秒延迟。6.2 系统防火墙在服务器内部用 UFW 放行端口sudo ufw allow 25565/tcp sudo ufw status如果是腾讯云、阿里云这类镜像默认带 firewalld 的系统也可以使用sudo firewall-cmd --permanent --add-port25565/tcp sudo firewall-cmd --reload这里最容易犯的错是只放了安全组忘了系统防火墙或者反过来。两者都要放行并且确认服务端监听地址是0.0.0.0而不是127.0.0.1。6.3 家用机开服的特殊处理如果你是用家里电脑开服那么还需要在路由器里做端口转发把公网 IP 的 25565 端口转发到内网这台电脑的局域网 IP 上。此外部分运营商对大流量入站连接有限制或者不提供公网 IPv4 地址这会让 NAT 穿透变得很麻烦。相比之下一台人数规模不大的轻量云服务器省心程度高很多。6.4 连通性测试端口放行后先别急着让朋友连接自己用命令行测一下nc -vz happydog.ltd 25565如果看到Connected to happydog.ltd说明域名解析、公网可达、端口放行三个环节都是通的。如果超时则按顺序排查域名是否解析到了正确 IP服务器公网 IP 是否变更云安全组和系统防火墙是否放行服务端是否正在监听 25565 端口检查端口监听可以用ss -lntp | grep 255657. 完整启动与客户端连接验证配置到这里可以完成一次全流程启动和连接验证。7.1 服务端启动sudo -u mcserver /opt/mcserver/start.sh等待出现启动完成日志[Server thread/INFO]: Starting minecraft server version 1.21.x [Server thread/INFO]: Done (5.214s)! For help, type help这时在服务端控制台输入list可以看到当前在线玩家列表。7.2 玩家客户端连接玩家打开 Minecraft Java 版客户端选择对应版本或使用支持多版本的启动器在多人游戏界面添加服务器服务器地址happydog.ltd端口默认 25565不需要在地址后额外加冒号。如果服务器修改过端口则需要写成happydog.ltd:25566离线可进的服务器玩家客户端需要选择离线登录模式然后输入任意用户名。如果你的服务器开了白名单用户名必须在白名单列表里否则会被拒绝进入并在客户端显示类似 You are not whitelisted 的提示。7.3 如何判断服务器是否正常除了玩家能进入还可以观察以下几点服务端日志无异常刷屏。延迟稳定没有周期性卡顿。使用/tpsPaper 端查看服务器 TPS 是否接近 20。如果 TPS 长期低于 15就需要考虑减少视野距离、清理实体、限制红石机器或升级配置了。8. 常见问题与排查清单在实际开服过程中下面几个问题几乎每个新手都会遇到。这里整理成排查清单建议收藏备用。问题现象可能原因排查方式解决方案玩家连接超时安全组/防火墙未放行 25565 端口nc -vz 域名 25565放行云安全组和系统防火墙端口能 Ping 通域名但进不去服务端未监听公网 IP 或服务未启动ss -lntp | grep 25565启动服务端确认监听地址提示 Invalid session / 无法验证登录客户端离线登录但服务器开了正版验证查看server.properties的 online-mode统一两侧模式或使用离线登录模式客户端版本与服务端不匹配协议版本不一致检查客户端版本号安装与服务端一致/兼容的版本服务器延迟高、TPS 低内存不足、视野过大、实体太多/tps查看 TPS调低 view-distance、清理实体、升级配置玩家被拒绝进入提示 not whitelisted白名单开启但玩家未加入控制台whitelist list使用whitelist add 玩家名添加地图非常卡、区块加载慢首次生成地图或磁盘 IO 瓶颈观察日志和磁盘 IO预生成地图提升磁盘性能其中 Invalid session 是最常见的理解偏差。很多人在客户端用离线模式玩却连接了一个online-modetrue的服务器服务端必然会拒绝。反过来正版客户端也可能因为登录态失效而被拒绝此时重启客户端重新登录即可。9. 离线服务器的运营最佳实践一个服务器能跑起来只是起点能长期稳定运行才是目标。下面这几点是我认为离线服最值得注意的工程实践。9.1 账号安全白名单加密码登录再强调一次离线服不配置任何身份验证等于把服务器大门完全敞开。白名单是第一道门AuthMe 是第二道门。即便只有几个朋友也建议开启白名单避免被陌生玩家扫描端口后进入造成不必要的破坏。9.2 权限控制原版 op 系统只有 有权限 和 没有权限 两种状态权限粒度太粗。推荐使用 LuckPerms 等权限插件将玩家分成不同权限组例如default、builder、admin按组分配命令和操作权限。这样即使某个玩家的账号被冒用损失范围也可控。9.3 备份策略MC 世界数据是开服者最宝贵的资产。一个简单可靠的备份方式是对world目录做定时压缩#!/bin/bash # 文件路径/opt/mcserver/backup.sh BACKUP_DIR/opt/mcserver/backups WORLD_DIR/opt/mcserver/world mkdir -p ${BACKUP_DIR} tar -czf ${BACKUP_DIR}/world-$(date %Y%m%d-%H%M%S).tar.gz -C ${WORLD_DIR} . find ${BACKUP_DIR} -name world-*.tar.gz -mtime 7 -delete配合 crontab 每天备份一次0 4 * * * /bin/bash /opt/mcserver/backup.sh恢复时将备份解压回world目录重启服务端即可。9.4 使用正版引导虽然离线服不需要正版账号但作为开服者最好在服务器介绍或群公告里明确说明离线模式仅用于技术交流和朋友联机推荐购买正版支持开发者。这样既避免了盗版争议也是对 Minecraft 生态的一种尊重。9.5 运维监控小型服务器不需要上复杂监控但至少要做到三点定期看日志、关注磁盘使用率、在服务崩溃时能自动重启。最简单的做法是用 systemd 托管 java 进程服务异常退出后自动拉起# 文件路径/etc/systemd/system/mcserver.service [Unit] DescriptionMinecraft Server Afternetwork.target [Service] Usermcserver WorkingDirectory/opt/mcserver ExecStart/opt/mcserver/start.sh Restarton-failure RestartSec10 [Install] WantedBymulti-user.target启用服务sudo systemctl daemon-reload sudo systemctl enable --now mcserver之后就能用systemctl status mcserver查看状态用journalctl -u mcserver查看日志了。10. 写在最后的经验回到开头那个邀请帖我开了一个 mc 服务器有人一起玩吗happydog.ltd1.21.11离线可进。现在再看这句话你应该能读出更多信息开服者至少完成了一台服务器从环境到网络的完整配置选定了 1.21.x 的版本线通过域名解析让玩家免记 IP同时主动选择了离线模式来降低进入门槛。除了邀请朋友来玩这个过程本身也是一次很好的服务器运维实践。如果你想从玩家变成开服者我的建议是先跑通一个最小可用服在一台 2 核 4G 的云服务器上用 Paper 或官方服务端搭起 1.21.x 的存活服配好白名单和备份然后叫上两个朋友实际玩一周。这一周里遇到的所有连接问题、卡顿问题、权限问题都是比任何教程都更有价值的经验。服务器只要开着就永远有可以优化的地方。把基础链路理解透之后再继续深入插件开发、模组服搭建、性能调优这些方向你会发现每一层都有新的玩法。