Minecraft

Geyser 互通服

用 Geyser 让基岩版玩家加入 Java 版服务器,NetherNet 传输的隧道与配置
本教程适用于 Minecraft Java Edition(国际版)的独立服务器与衍生版本(如 Paper / Forge / Fabric 等),搭配 Geyser 使用。

一、Geyser 是什么

Geyser 是运行在 Java 版服务端旁边的翻译层:

  • 基岩版玩家连的是 Geyser,Geyser 把数据转成 Java 版协议后再发给服务端
  • Java 版玩家直接连服务端,不经过 Geyser

本教程假设您已经按 Java 版独立服务器 把服务端跑起来了。

二、为什么需要两条隧道

NetherNet 把一次连接拆成两步:

步骤作用协议
信令客户端先问「这个服务器要怎么连」TCP,HTTP(S)
游戏按信令给出的地址建立连接UDP,WebRTC

所以 Geyser 需要对外开放两个端口,一个 TCP 给信令,一个 UDP 给游戏。两者端口号不需要相同:客户端只填写信令的地址,游戏地址由信令下发。

三、修改 Geyser 配置

打开 config.yml,把 bedrock 段改为:

bedrock:
  address: 0.0.0.0
  port: 19132
  webrtc-port: 0
  transport: nethernet
  signaling:
    mode: builtin
    advertise-addresses: ['cn-frp-1.qwq.fan:14514']
项说明
address必须是 0.0.0.0,NetherNet 不接受 127.0.0.1 这类回环地址
port本地监听端口,信令(TCP)与游戏(UDP)都用它
webrtc-port填 0 表示跟随 port
transportnethernet
signaling.modebuiltin,由 Geyser 自己运行信令
advertise-addresses信令告诉客户端去连的地址,填节点域名 + UDP 隧道的远程端口;域名解析不了时信令不会启动
stun-discovery 只在 advertise-addresses 为空时才生效,填了地址就不用管它。

改完重启 Geyser。

四、创建两条隧道

4.1 信令隧道

字段填写
隧道类型HTTPS
本地 IP127.0.0.1
本地端口19132
域名绑定自己的域名,例如 mc.example.com
AutoTLS开启
HTTPS 隧道必须使用客户端信任的证书。自签名证书会被 Minecraft 拒绝并回落到 HTTP,玩家照样会看到「是否信任此服务器」的提示,所以这里用 AutoTLS。

4.2 游戏隧道

字段填写
隧道类型UDP
本地 IP127.0.0.1
本地端口19132
远程端口任意,例如 14514

记下这个远程端口,它就是 advertise-addresses 里写的端口。

五、让玩家加入

  1. 打开基岩版,进入 服务器 页面,点击 添加服务器
  2. 服务器名称自行填写,服务器地址填 mc.example.com,端口填 443
  3. 点击 保存 并加入
地址要填域名,不要填 IP,否则一定会弹出「是否信任此服务器」的提示。

六、回源 Java 的真实 IP

Geyser 连 Java 服务端时同样会把访客地址换成自己的地址。需要真实 IP 时,在 Geyser 的 config.yml 中打开:

advanced:
  java:
    use-haproxy-protocol: true

Java 侧要同步开启:Paper 改 paper-global.yml,Velocity 改 velocity.toml,BungeeCord 改 config.yml,具体写法见 Java 版独立服务器 与 PROXY protocol。

七、常见问题

服务器列表能看到,但进不去

先确认 UDP 隧道已经启动,再核对 advertise-addresses 里的端口与 UDP 隧道的远程端口是否一致。

进服时提示「是否信任此服务器」

说明信令没有走 HTTPS,检查信令隧道是否绑定了域名并开启了 AutoTLS,以及玩家填写的是不是域名。

八、旧版

基岩版 26.60 起官方客户端改用 NetherNet,旧版客户端与服务端的配置见 旧版基岩版(RakNet) 与 旧版 Geyser(RakNet)。