Minecraft Launcher 无法连接至服务器的问题

Author Avatar
黎明余光 2月9日
  • 在其它设备中阅读本文章

实际上 Minecraft Launcher (Windows) (Java Edition) 第一个新版本是没有问题的,最近一次 UI 改动(从竖版变成横版)后才出现了这个问题,Proxifier (v3.42) 和 Netch (v1.3.7) 都会与之冲突。

update@2020.2.20 感谢评论区 @搞黄色专业户 的解决方案,对于 Proxifier 可以关闭「DNS Processing on UDP Level」,这样 Minecraft Launcher 就可以正常完成 DNS 解析了

至于 Netch?反正不是我主力,关我啥事(

004a1b5dfe343f2edd50f884a4165211.png

ac727b9f9c4f0dc88c7794c9038fd16b.png


据某群友反馈,Proxifier v3.31 是没有问题的,emmmm...

现象

如果你正在使用 Proxifier / Netch 或者其他类似原理的 Windows 全局代理程序,无论 Minecraft Launcher 是否在程序的代理规则内,都会导致 Minecraft Launcher 无法完成 DNS 解析,初次启动无法正常下载依赖文件或非初次启动无法完成正版认证等。

作为一个 Proxifier 常驻用户,实在没想到这玩意会和 Minecraft Launcher 冲突,之前重装一遍系统都没解决问题,差不多都要放弃了...

初次启动

Can't load launcher core From C:\Program Files (x86)\Minecraft Launcher\game\launcher.dll: LoadErrorNotPresent
Unable to start Minecraft Runtime Environment. This is most likely caused by corruption. Please try to reinstall Minecraft.

a6872ff749e287ac2cf97e97baeb485e.png

be771d23591355775e140247824fd0a6.png

非初次启动

1bce3777ff1e8cd47b5c43f9f8a4d78a.png

Log

大体就是 DNS 解析失败之类的,然而之前用 Wireshark 抓包时可以看到这个 DNS 请求是正常完成的,手动 dig 也可以证明我的 DNS 服务器正常,但是 Launcher 并没有拿到解析结果。实际上通过 Hosts 绕过这个 DNS 解析是可以正常连接到服务器的,但是 Mojang 那么多域名总不能一个个加进 Hosts 里...

[Info: 2020-02-09 03:31:00.5954015: NetQueue.cpp(568)] NetQueue: worker thread started.
[Info: 2020-02-09 03:31:00.6045354: NetQueue.cpp(583)] NetQueue: Starting net action https://launchermeta.mojang.com/v1/products/launcher/d03cf0cf95cce259fa9ea3ab54b65bd28bb0ae82/windows-x86.json
[Error: 2020-02-09 03:31:10.6546320: NetQueue.cpp(444)] NetQueue: No ip address available. Error code 6, Url: launchermeta.mojang.com
[Info: 2020-02-09 03:20:28.5630543: NetQueue.cpp(480)] NetQueue: Action failed with result "Could not resolve: launchermeta.mojang.com (Timeout while contacting DNS servers)" (6) : https://launchermeta.mojang.com/v1/products/launcher/d03cf0cf95cce259fa9ea3ab54b65bd28bb0ae82/windows-x86.json
> dig launchermeta.mojang.com

; <<>> DiG 9.14.9 <<>> launchermeta.mojang.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38140
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;launchermeta.mojang.com.       IN      A

;; ANSWER SECTION:
launchermeta.mojang.com. 26     IN      CNAME   d1dulol58c5ch1.cloudfront.net.
d1dulol58c5ch1.cloudfront.net. 26 IN    A       99.84.139.139

;; Query time: 20 msec
;; SERVER: 192.168.2.1#53(192.168.2.1)
;; WHEN: Sun Feb 09 12:15:38 CST 2020
;; MSG SIZE  rcvd: 100

原因

因为并不知道具体 Proxifier 和 Netch 究竟是怎么实现的,所以随便复制点(

有人说 Proxifier 是通过改变 winsock 在 R0 层实现的劫持,而 Netch Mode 1 的 Redirector.exe 并不开源,也不清楚是否是相同的原理。但是 netsh winsock show catalog 只有 Proxifier 没有 Netch,所以原理不一定相同。

他们的共同点是都会导致 Minecraft Launcher DNS 解析失败。至于他们这样为什么会导致 Minecraft Launcher 拿不到 DNS 解析结果,这我就真的不知道了(

解决方案

大概并没有解决方案,可以尝试下第三方启动器,例如 HMCL 等。如果坚持用 Minecraft Launcher 的话,可以尝试通过虚拟 TUN/TAP 实现的 SSTap,SSTap 可以正常转发代理。

这 bug 也不知道应该提给谁,如果你有兴趣可以给各家都提交一下(

参考

[1]: Couldn't load launcher core - Java Edition Support - Support - Minecraft Forum
[2]: [MCL-11754] Launcher.dll not present - Jira
[3]: 请问下 Proxifier 的原理是什么? - 知乎

本文链接:https://blog.lim-light.com/archives/can-not-start-minecraft-launcher-with-proxy-enabled.html
本文采用 CC BY-NC-SA 3.0 CN 协议进行许可,阅读 相关说明