Minecraft 连不上认证 Mojang 认证服务器的一种解决方案:HTTP 转发
背景
由于众所周知的网络环境,国内连接 Mojang 的官方认证服务时,总容易遇到抽风情况,包括但不限于正版登录时出现“认证服务器宕机”之类的报错。 万一遇到 Mojang 使用的微软云被区域性 DNS 污染,那影响范围就更大了
您可能是正版软件的受害者
解决方案
目前常见的,用于解决 Mojang 认证服务器无法访问的方案,有如下几种
-
借助魔法来访问 Mojang 认证服务器
- 优势:专业的事情交给专业的工具做,跑起来效果好
- 缺点:获取 / 搭设魔法存在门槛;服务端不一定支持
-
使用修改 DNS / host 文件 的方式来加速
- 优点:无需额外资源设备;操作较为方便;对任意 MC 客户端 / 服务端均生效
- 缺点:仅能有效解决 DNS 污染问题,无法较好解决网络连接质量不佳的问题;硬编码的 DNS 解析向可能具有时效性
-
搭设 Mojang 认证服务器的 http 转发服务器,并让 MC 使用这一转发服务器
- 优点:类似魔法,搭起来效果很好
- 缺点:搭设转发存在门槛;低版本 MC / 特殊的服务端不一定支持;需信任转发服务器
对于第一种方案,原版 mc 的客户端可以用参数指定 authlib 走 socks,但服务端不支持; 至于 velocity bungeecord 这俩代理端,之前我搞过两个 fork,给他们增加了相关魔法能力, 若有需要可以参考下:https://github.com/TISUnion/Velocity, https://github.com/Fallen-Breath/BungeeCord
对于第二种方案,可以参考 cv12264962、 cv15851058 这两篇专栏
对于第三种方案,我以前水过一个 相关的动态。同时,这也是下文会提到的方案
麻将服务器列表
先看看有哪些 Mojang 服务是需要转发的
从 1.14 开始统计,原版 MC 里,会使用 authlib 访问如下几个 Mojang 提供的服务
- auth,https://authserver.mojang.com,可使用
-Dminecraft.api.auth.host
配置。用于正版登录相关。高版本已不再使用,且此地址也目前也无法访问 - account,https://api.mojang.com,可使用
-Dminecraft.api.account.host
配置。用来查询玩家信息等 - session,https://sessionserver.mojang.com,可使用
-Dminecraft.api.session.host
配置。正版验证入服必备 - services,https://api.minecraftservices.com,可使用
-Dminecraft.api.services.host
配置。聊天举报等东西
下表涵括了上面这些服务随着 MC 版本更新的一些变化
mc | authlib | 使用的服务 | 变化、特点 |
---|---|---|---|
1.14.4 | 1.5.25 | auth、account、session | 硬编码地址,不可修改 |
1.16 | 1.6.25 | auth、account、session | 可通过环境变量调整地址 |
1.16.4 | 2.1.28 | auth、account、session、services | 增加 services |
1.20.2 | 5.0.46 | account、session、services | 移除 auth |
1.20.3 | 6.0.52 | session、services | 移除 account |
这些服务,相对来说最主要的就是 session 服务了。不过如果搞都搞了,那不如全搞上
那咋整呢
为了造福社区,我搭了一套麻将服务的 http 转发服务器,转发了 account session services 这三个 Minecraft 目前会用的 Mojang 服务,分别对应着下面这几个地址
1 | https://account.msp.fallenbreath.me |
若有需要,尽管拿去用
公益服务,尽力而为。合理使用,切勿滥用
食用方式
仅需在启动 MC 的命令行参数里,在 -jar 参数前,加入以下参数即可。无需修改游戏
Minecraft 服务端 / 客户端
1 | -Dminecraft.api.account.host=https://account.msp.fallenbreath.me |
适用于 mc1.16+,也大概率适用于 paper 等非原版端
如果是 1.14 / 1.15 的客户端,把这个 mod 打上应该也能用 https://github.com/Fallen-Breath/AuthlibEnvBackport
Velocity
仅需在启动 velocity 的命令行参数里,在 -jar 参数前,加入以下参数即可
1 | -Dmojang.sessionserver=https://session.msp.fallenbreath.me/session/minecraft/hasJoined |
Bungeecord
截止今日(2025.3.23,commit 687c302610caca480a332755210be4fb851c4d6e), Bungeecord 访问 Mojang 认证服务器时,使用的地址仍是硬编码在代码里的,因此该方案暂时无法兼容
若真想用,得自己改 Bungeecord 代码
为 Java 添加系统参数
如何给 Java 添加参数的操作方式?
这取决于 MC 是怎么启动的了。本文仅简单抛砖引玉一下
如果是开 Minecraft 服务端的话,直接改一下 java 的启动命令即可。只需要在 -jar 前插入要添加的参数,例如:
1 | java -Daaa=bbbb -Dxxxx=yyyy -Xmx2G -jar server.jar |
想必能开 MC 服务器的腐竹们定能找到服务端启动命令在哪+要咋改的
客户端的话,需自行根据所使用的启动器,寻找诸如“JVM 参数”、“Java 参数”什么的配置项,比如:
值得一提
作为一个转发服务器,是完全有能力截获并篡改转发并请求明文内容的。若你不信任此服务器,请不要使用这一转发服务器
当然,对我而言,我定然是不会干这些坏事的。转发服务器上处理的各种转发请求,也不会持久化于于服务器的日志/文件里,确保数据安全不泄密
至于这套转发服务是怎么实现+部署起来的,目前相关代码还比较乱,还不适合开源发出来。不过,这也就是个 http 转发而已,并没有太多特别的。下次一定!(饼 +1)