游客发表
你兴冲冲地开了一个我的世界服务器,朋友在千里之外,网穿你打算用内网穿透让他连进来。透无frp 配置写好了,界内隧道也显示在线,网穿可朋友那边一直卡在“正在连接服务器…”然后蹦出一行红字:无效会话(Invalid session)。透无你以为是界内朋友网络问题,让他重启路由器、网穿换手机热点,透无折腾半小时,界内最后发现是网穿自己这边的问题——而且跟网络延迟、丢包一点关系都没有。透无
这个报错在 Minecraft 里其实很具体。界内它不是网穿说“连不上”,而是透无说“连上了,但服务端不认你的登录凭证”。正版验证开启时,客户端会拿一个 session token 去向 Mojang 的认证服务器确认身份。服务端收到这个 token 后,也会去 Mojang 那边二次验证。如果验证失败,就直接踢人,报无效会话。
内网穿透在这中间插了一脚,问题就出在“谁去验证”这个环节上。
正常局域网联机,或者公网直连,服务端和客户端都直连 Mojang 的 session 服务器,路径干净。但用了 frp、nps 或者樱花穿透之后,流量走的是中转。有些穿透工具默认只转发游戏数据端口(比如 25565),却把认证相关的 HTTP 请求也一并吞了——准确说,是把服务端发往 sessionserver.mojang.com 的验证请求给拦了,或者因为 DNS 解析走了穿透内网,导致请求超时。
我遇到过一次典型情况:frpc 客户端跑在服务器本地,frps 在公网 VPS 上。服务端配置文件里 online-mode=true,客户端正版登录。朋友连进来,服务端日志显示 com.mojang.authlib.GameProfile 请求超时。一开始我以为是 VPS 防火墙挡了出站 443 端口,查了半天发现 frps 所在的那台机器 DNS 被改成了内网地址,sessionserver.mojang.com 解析到了一个不存在的 IP。
改 DNS 就好了。但这个过程很折磨人,因为无效会话的报错信息根本不告诉你具体哪一步断了。
还有一种更隐蔽的情况:穿透工具自带的“内网 DNS 代理”或者“流量伪装”功能。某些一键脚本为了“优化”连接,会把所有 TCP 流量都走穿透隧道,包括服务端向 Mojang 发起的 HTTPS 请求。结果就是,服务端自己都上不了外网,自然验证不了客户端。你看着隧道状态是绿的,延迟也正常,但认证链路已经断了。
怎么排查?别急着关正版验证。先做一件事:在服务器上直接 curl 一下 Mojang 的 session 接口。
curl -v https://sessionserver.mojang.com/session/minecraft/hasJoined?username=你的ID&serverId=随便填 如果返回 204 或者 200,说明服务器出站没问题。如果卡住或者报错,那就是穿透环境把出站请求搞挂了。这时候要么改穿透配置,放行 443 出站;要么在服务端启动参数里加 -Dhttp.proxyHost= 之类的代理设置——但说实话,大部分穿透工具没这么细的粒度。
另一个常见坑是端口映射错位。frp 的 remote_port 和 local_port 如果写反了,或者 type 用了 tcp 但实际需要 udp(基岩版),也会导致会话无效。Java 版还好,基岩版走 RakNet,UDP 穿透不稳的时候,登录包直接丢,表现也是无效会话。但那个报错文本不一样,会写“无法连接世界”。
我自己的习惯是:内网穿透只用来传游戏数据,认证走直连。具体做法是在服务端 server.properties 里把 online-mode 设成 false,然后用白名单或者 AuthMe 插件补验证。这样穿透工具只转发 25565 端口,不碰认证流量。缺点是正版玩家进服要手动登录,但至少不会卡在无效会话上。
如果你坚持要开正版验证,那就得确保穿透工具不劫持出站 HTTPS。frp 默认不劫持,但有些面板会加 dns_server 参数,把 DNS 查询也走隧道。检查一下 frpc.ini 里有没有 dns_server = 8.8.8.8 这样的行,有的话删掉或者改成公网 DNS。别用运营商默认的,有些地区 DNS 污染严重,解析 sessionserver 直接给个假 IP。
最后说个真事。上周帮一个开服的朋友看这个问题,他用的某品牌内网穿透,后台有个“智能加速”开关,默认开启。关掉之后,无效会话立刻消失。那个开关实际上是把所有 TCP 流量做了透明代理,包括服务端发往 Mojang 的验证请求。代理服务器在国外,延迟 300ms,Mojang 那边等 5 秒没收到完整请求就断开了。你这边看日志就是超时,朋友那边看就是无效会话。
所以下次再看到“无效会话”,别光顾着让朋友重连。登上服务器,curl 一下 Mojang,看看穿透工具是不是把认证请求也吞了。十有八九是这个问题。
```随机阅读
热门排行
友情链接