Minecraft 连不上认证 Mojang 认证服务器的一种解决方案:HTTP 转发

背景

由于众所周知的网络环境,国内连接 Mojang 的官方认证服务时,总容易遇到抽风情况,包括但不限于正版登录时出现“认证服务器宕机”之类的报错。 万一遇到 Mojang 使用的微软云被区域性 DNS 污染,那影响范围就更大了

宕机x,连不上√

您可能是正版软件的受害者

解决方案

目前常见的,用于解决 Mojang 认证服务器无法访问的方案,有如下几种

  1. 借助魔法来访问 Mojang 认证服务器

    1. 优势:专业的事情交给专业的工具做,跑起来效果好
    2. 缺点:获取 / 搭设魔法存在门槛;服务端不一定支持
  2. 使用修改 DNS / host 文件 的方式来加速

    1. 优点:无需额外资源设备;操作较为方便;对任意 MC 客户端 / 服务端均生效
    2. 缺点:仅能有效解决 DNS 污染问题,无法较好解决网络连接质量不佳的问题;硬编码的 DNS 解析向可能具有时效性
  3. 搭设 Mojang 认证服务器的 http 转发服务器,并让 MC 使用这一转发服务器

    1. 优点:类似魔法,搭起来效果很好
    2. 缺点:搭设转发存在门槛;低版本 MC / 特殊的服务端不一定支持;需信任转发服务器

对于第一种方案,原版 mc 的客户端可以用参数指定 authlib 走 socks,但服务端不支持; 至于 velocity bungeecord 这俩代理端,之前我搞过两个 fork,给他们增加了相关魔法能力, 若有需要可以参考下:https://github.com/TISUnion/Velocity, https://github.com/Fallen-Breath/BungeeCord

对于第二种方案,可以参考 cv12264962cv15851058 这两篇专栏

对于第三种方案,我以前水过一个 相关的动态。同时,这也是下文会提到的方案

麻将服务器列表

先看看有哪些 Mojang 服务是需要转发的

从 1.14 开始统计,原版 MC 里,会使用 authlib 访问如下几个 Mojang 提供的服务

  1. auth,https://authserver.mojang.com,可使用 -Dminecraft.api.auth.host 配置。用于正版登录相关。高版本已不再使用,且此地址也目前也无法访问
  2. account,https://api.mojang.com,可使用 -Dminecraft.api.account.host 配置。用来查询玩家信息等
  3. session,https://sessionserver.mojang.com,可使用 -Dminecraft.api.session.host 配置。正版验证入服必备
  4. 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
2
3
https://account.msp.fallenbreath.me
https://session.msp.fallenbreath.me
https://services.msp.fallenbreath.me

若有需要,尽管拿去用

公益服务,尽力而为。合理使用,切勿滥用

食用方式

仅需在启动 MC 的命令行参数里,在 -jar 参数前,加入以下参数即可。无需修改游戏

Minecraft 服务端 / 客户端

1
2
3
-Dminecraft.api.account.host=https://account.msp.fallenbreath.me
-Dminecraft.api.session.host=https://session.msp.fallenbreath.me
-Dminecraft.api.services.host=https://services.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 认证服务器时,使用的地址仍是硬编码在代码里的,因此该方案暂时无法兼容

BC硬编码

若真想用,得自己改 Bungeecord 代码

为 Java 添加系统参数

如何给 Java 添加参数的操作方式?

这取决于 MC 是怎么启动的了。本文仅简单抛砖引玉一下

如果是开 Minecraft 服务端的话,直接改一下 java 的启动命令即可。只需要在 -jar 前插入要添加的参数,例如:

1
2
java -Daaa=bbbb -Dxxxx=yyyy -Xmx2G -jar server.jar
# ^^^^^^^^^^^^^^^^^^^^^^ 这是一行用于指示关键代码段的注释

想必能开 MC 服务器的腐竹们定能找到服务端启动命令在哪+要咋改的

客户端的话,需自行根据所使用的启动器,寻找诸如“JVM 参数”、“Java 参数”什么的配置项,比如:

MMC

HMCL

PCL

值得一提

作为一个转发服务器,是完全有能力截获并篡改转发并请求明文内容的。若你不信任此服务器,请不要使用这一转发服务器

当然,对我而言,我定然是不会干这些坏事的。转发服务器上处理的各种转发请求,也不会持久化于于服务器的日志/文件里,确保数据安全不泄密

至于这套转发服务是怎么实现+部署起来的,目前相关代码还比较乱,还不适合开源发出来。不过,这也就是个 http 转发而已,并没有太多特别的。下次一定!(饼 +1)