Repository navigation
Wiki zh cn
- 首页
- 安装
- Velocity 与 BungeeCord
- 防火墙与路由器配置
- 兼容性
- 有序模式
- 自动转服
- UDP 转发与 PROXY 协议
- Simple Voice Chat
- 故障排查
- 模组集成
- UDP 代理
通过 RakNet 连接 Minecraft 客户端和服务端。
| Minecraft | Raknetify2 | 客户端 / 服务端 |
|---|---|---|
| Fabric | mods/raknetify2-fabric-*.jar |
客户端 / 服务端 |
| Forge | mods/raknetify2-forge-*.jar |
客户端 / 服务端 |
| NeoForge | mods/raknetify2-neoforge-*.jar |
客户端 / 服务端 |
| Spigot / Paper | plugins/raknetify2-spigot-*.jar |
服务端 |
| Velocity | plugins/raknetify2-velocity-*.jar |
Velocity |
| BungeeCord | plugins/raknetify2-bungee-*.jar |
BungeeCord |
-
多人游戏
-
添加服务器
-
服务器地址
服务器地址 RakNet · UDP raknet;play.example.com:25565TCP play.example.com:25565 -
完成
-
加入服务器
| F3 | |
|---|---|
| RakNet · UDP | 已启用 · MTU 1400 |
| TCP | 未启用 |
- 客户端 · Raknetify2 → UDP → Velocity / BungeeCord · Raknetify2
- Velocity / BungeeCord → TCP → 服务端
| 端口号 · UDP | Java | |
|---|---|---|
| Fabric / Forge / NeoForge | 1–65534 | -Draknetify.fabric.portOverride=25570 |
| Spigot / Paper ≥ 0.1.0-beta.1.431 | 1–65535 | -Draknetify.spigot.portOverride=25570 |
| Velocity | 1–65534 | -Draknetify.velocity.portOverride=25570 |
| BungeeCord | 1–65534 | -Draknetify.bungee.portOverride=25570 |
| 服务器地址 | UDP |
|---|---|
raknet;play.example.com:25580 |
play.example.com:25580 → NAT → 192.0.2.10:25570
|
服务端 · 192.0.2.10
|
25570/udp |
服务端 / Velocity / BungeeCord
| JSON | |
|---|---|
| ① ② ③ | {"mode":"ordered"} |
| ① ∥ ② ∥ ③ | {"mode":"multichannel"} |
| 服务端 | Raknetify2 · UDP 25565 | Simple Voice Chat |
|---|---|---|
| Fabric / Forge / NeoForge |
config/raknetify2-voicechat.json · {"enabled":true}
|
config/voicechat/voicechat-server.properties · port=-1
|
| Spigot / Paper |
config/raknetify2-voicechat.json · {"enabled":true}
|
plugins/voicechat/voicechat-server.properties · port=-1
|
Simple Voice Chat · Velocity / BungeeCord
| 服务器地址 | trustedProxies |
RakNet |
|---|---|---|
192.0.2.10 · PROXY v2 / UDP |
["192.0.2.10"] |
✓ |
192.0.2.11 · PROXY v2 / UDP |
["192.0.2.10"] |
✗ |
| 客户端 → RakNet / UDP | ["192.0.2.10"] |
✗ |
config/raknetify2-proxy-protocol.json
{"trustedProxies":["192.0.2.10"]}-
服务端 A · Fabric / Forge / NeoForge ·
config/raknetify2-transfers.json{"destinations":[{"host":"play.example.com","tcpPort":25565,"udpPort":25570}]} -
服务端 B ·
play.example.com·server.properties→accepts-transfers=true -
服务端 A ·
/transfer play.example.com 25565 Alex→ 客户端 (Alex) → RakNet ·play.example.com:25570
| Minecraft | |
|---|---|
ui |
选项 |
entity |
骷髅 |
world_interaction |
物品栏 |
effects |
粒子效果 |
chunk |
方块 |
- Fabric ·
compatibility.json·gameVersions/runtimes/depends - Forge / NeoForge / Spigot / Paper · GitHub Releases
Raknetify2 让 Minecraft 多人游戏通过 UDP 上的 RakNet 通信。它将数据分到多个各自保证顺序的通道。某个通道丢包时,其他通道中无关的数据仍能继续传输。因此,即使正在补发丢失的数据或传输区块,游戏也有机会及时响应你的操作。
Raknetify2 是 Raknetify 的一个分支,原项目由 ishland 开发。该分支独立维护,支持更新的 Minecraft 版本,并持续维护底层传输、各平台的适配和兼容性测试。
- 查看 Minecraft 版本和模组兼容性。
- 选择下载文件并安装。
- 使用类似
raknet;play.example.com的地址连接。
模组作者可以用数据包排序接口声明自定义负载与 Minecraft 网络数据之间的先后关系。
Raknetify2 使用 MIT 许可证,并保留原有的版权声明。其网络实现基于 Raknetify 和 netty-raknet。
从 GitHub Releases 下载发行版。安装前请核对该版本要求的 Minecraft 版本与模组加载器。
| 安装位置 | 文件 | 文件夹 |
|---|---|---|
| Fabric 客户端或服务器 | raknetify2-fabric-*.jar |
mods |
| Forge 客户端或服务器 | raknetify2-forge-*.jar |
mods |
| NeoForge 客户端或服务器 | raknetify2-neoforge-*.jar |
mods |
| Spigot 或 Paper 服务器 | raknetify2-spigot-*.jar |
plugins |
| Velocity 代理 | raknetify2-velocity-*.jar |
plugins |
| BungeeCord 代理 | raknetify2-bungee-*.jar |
plugins |
更换 JAR 文件前,先关闭客户端或停止服务器。在同一安装目录中,先移除原版 Raknetify 及旧版 Raknetify2 的 JAR,再放入新文件。
客户端的文件夹位于你实际启动的 Minecraft 实例或整合包内;服务器和代理的文件夹分别位于各自的安装目录。如果加载器尚未创建相应文件夹,请自行创建。
- 在客户端安装适用于你的加载器的模组。
- 在服务器上安装匹配的模组。如果是兼容 Spigot/Paper 的服务器,则安装相应插件。
- 按照防火墙与路由器配置操作,允许 UDP 连接到服务器。
- 重启客户端和服务器。
- 在“添加服务器”中输入地址,例如
raknet;play.example.com或raknet;play.example.com:25565。
地址没有 raknet; 前缀时,连接使用 TCP。
只在客户端安装模组,远程服务器仍无法接受 RakNet 连接。服主也要提供 RakNet 接入点。加入其他人服务器的玩家通常无需在自己的路由器上设置入站端口转发。
安装配套的代理插件和客户端模组。Velocity 与 BungeeCord 介绍了监听设置、到后端的转发、访问限制以及应提供给玩家的地址。
如果玩家直接连接 Minecraft 服务器,按下表设置对应的 Java 参数。代理服管理员请参阅 Velocity 与 BungeeCord 的监听设置。
| 平台 | Java 参数 | 可用端口范围 |
|---|---|---|
| Fabric、Forge 或 NeoForge 服务器 | -Draknetify.fabric.portOverride=25570 |
1 到 65534
|
| Spigot 或 Paper 服务器 | -Draknetify.spigot.portOverride=25570 |
1 到 65535
|
Forge 和 NeoForge 共用同一套监听代码,所以它们的属性名也含有 fabric。请将 25570 替换为你希望使用的 UDP 端口。
Spigot / Paper ≥ 0.1.0-beta.1.431
在 Java 启动命令的 -jar 前加上参数,或将其填入主机面板的 JVM 参数栏。重启服务器,并放行所选监听端口的 UDP 流量。如果公网端口也是 25570,请用 raknet;play.example.com:25570 连接。如果路由器转换了端口,则客户端地址应填写公网端口。TCP 端口沿用原值。
在 Spigot/Paper 上,UDP 使用 Minecraft TCP 监听器绑定的本地地址。如果指定的端口无效或已被占用,RakNet 将无法启动。可在启动日志中核对实际绑定的 UDP 地址与端口。若要改回与 TCP 相同的端口号,移除该参数并重启即可。
也可以在路由器或 UDP 代理上另设公网 UDP 端口,转发到现有监听端口,无需修改服务器的 Java 参数。
在 GitHub Actions 中打开一次成功的 main 分支运行记录,下载 Artifacts 中的压缩包。下载工作流产物需要登录 GitHub。根据上方安装表,从压缩包中选择合适的 JAR。
Velocity 和 BungeeCord 位于玩家与 Minecraft 后端服务器之间。在代理上以及每个使用 RakNet 连接的客户端上安装 Raknetify2。
Raknetify2 客户端 --UDP--> Velocity 或 BungeeCord --TCP--> 后端服务器
这种连接方式无需在后端安装 Raknetify2。你的网络原本需要哪些模组、插件和转发功能,后端仍须具备。Raknetify2 不负责 Minecraft 版本转换,也不改变代理的账号验证方式。
- 先确认普通 TCP 连接可以通过代理正常登录,也能在后端服务器间切换。
- 停止代理,然后从 GitHub Releases 下载匹配的插件。
- 将
raknetify2-velocity-*-all.jar或raknetify2-bungee-*-all.jar放入代理的plugins文件夹。移除同一目录中的旧版 Raknetify 或 Raknetify2 插件。 - 按照安装指南安装相应的 Raknetify2 客户端模组。
- 检查下方的监听设置,重启代理,并查看日志中是否有 RakNet 监听错误。
- 允许公网 UDP 流量到达代理,并依照防火墙与路由器配置限制后端游戏端口的访问。
客户端与代理要使用相互兼容的 Raknetify2 发行版。混用版本前请查阅兼容性说明。
velocity.toml 中的 bind 指定 Velocity 接受 Minecraft 连接的地址和 TCP 端口。Raknetify2 默认在相同端口号上监听 UDP。[servers] 各项对应后端服务器,应继续填写后端的 TCP 地址。详见 Velocity 的配置参考。
若要单独指定 UDP 端口,请在 Velocity 启动命令的 -jar 前加入以下 JVM 参数:
-Draknetify.velocity.portOverride=25570
将 25570 换成所选端口。此设置只改变 RakNet 的 UDP 端口,Velocity 的 TCP 端口和后端地址仍沿用原值。修改后重启 Velocity。
在 Velocity 和后端上都要配置玩家信息转发。后端支持时,请使用现代转发模式,并妥善保管转发密钥。按 Velocity 的玩家信息转发指南中适用于该后端的步骤操作。启用转发后,仍须保留后端的防火墙限制。
在 BungeeCord 的 config.yml 中,每个 listeners 项下的 host 值指定一个 Minecraft 监听地址与 TCP 端口。Raknetify2 默认在同一端口号上增加 UDP 监听。servers 各项保存后端 TCP 地址。详见 BungeeCord 配置指南。
若要单独指定 UDP 端口,请在 BungeeCord 启动命令的 -jar 前加入以下 JVM 参数:
-Draknetify.bungee.portOverride=25570
这个参数对整个代理进程生效。如果配置了多个 Minecraft 监听器,请先在启动日志中核对实际的 RakNet 监听地址和端口,再添加防火墙规则。修改参数后重启 BungeeCord。
保留代理上的账号验证。如果后端是 Spigot,请按照 BungeeCord 的 IP 转发指南,在代理上设置 ip_forward: true,同时在后端设置 settings.bungeecord: true。仅启用转发无法阻止玩家绕过代理直接连接后端。请按防火墙配置说明限制后端访问。
两种代理的端口参数都接受 1 到 65534。无效值会被忽略,所以要在启动日志中核对实际绑定的 UDP 端口。移除参数并重启,即可恢复为 Minecraft 监听器的端口号。
玩家连接代理的公网主机名与 UDP 端口,例如 raknet;play.example.com:25570。如果路由器转换了端口,客户端地址应填写转换前的公网 UDP 端口。省略 raknet; 前缀的地址仍使用代理的 TCP 监听端口。
Query、Geyser 等其他 UDP 服务应各用单独的 UDP 端口。另改 TCP 端口无法解决 UDP 套接字冲突。
在 Velocity 和 BungeeCord 上,Simple Voice Chat 使用自己的代理插件和 UDP 端口。请按语音聊天代理说明配置。
如果 Minecraft 代理前面还有一层 UDP 中继,且中继会发送 PROXY 协议 v2 标头,请按 UDP 转发与 PROXY 协议配置 Raknetify2。单独使用 Velocity 或 BungeeCord 不需要这项配置。
在局域网外使用 Raknetify2 客户端测试。通过代理加入,并在你使用的后端之间切换,确认玩家身份和权限始终正确。
- 如果经过代理的 TCP 连接正常,但 RakNet 超时,请检查代理的 UDP 监听、公网端口、IPv4 与 IPv6 路由及防火墙规则。
- 如果两种传输方式都在代理连接后端时失败,请检查该后端的 TCP 地址、访问规则及玩家信息转发配置。
- 如果代理报告 UDP 端口已占用,请检查是否有 Query、Geyser、语音代理或其他进程绑定了该端口。
报告问题时,请同时附上同一次连接尝试的代理日志和后端日志。需要注明哪些版本,见故障排查。
本指南面向服主。玩家发出的 UDP 流量必须能到达接受 RakNet 连接的服务器或代理。默认情况下,Raknetify2 使用与 Minecraft 的 TCP 监听端口相同的端口号。
同一局域网内的玩家应使用服务器的内网地址,并在服务器主机防火墙中放行 UDP。外网流量需要经过路由器的 IPv4 NAT 时,才需要在路由器上设置端口转发。
将公网 UDP 流量转发到运行 Minecraft 服务器并已安装 Raknetify2 的主机,目标端口为这台服务器的 RakNet UDP 监听端口。在主机防火墙中放行该端口,并保留现有 TCP 路由供普通 Minecraft 连接使用。
例如,若 Raknetify2 在 UDP 25570 上监听,就将公网 UDP 端口转发到服务器内网地址的 25570 端口。服务器的 TCP 端口可以保留为 25565。如需另选 UDP 端口,请参阅直连服务器的监听设置。
将公网 UDP 流量转发到运行 Velocity 或 BungeeCord 并已安装 Raknetify2 插件的主机。转发目标应为代理的 RakNet UDP 监听端口。保留代理原有的公网 TCP 路由,供普通 Minecraft 连接使用。
代理通过 TCP 连接 Minecraft 后端服务器。在代理上安装 Raknetify2,无需向玩家开放后端的游戏 UDP 端口。
| 连接方向 | 应允许的访问 |
|---|---|
| 玩家到代理 | 允许公网 UDP 到达 RakNet 监听端口,并保留现有的公网 TCP 监听端口 |
| 代理到后端服务器 | 后端 Minecraft TCP 端口仅对指定的代理主机开放 |
| 玩家直接访问后端游戏端口 | 保持阻止,包括 IPv6 访问 |
如果代理与后端直接运行在你管理的同一台专用机器上,后端可以只监听回环地址,并在代理上填写这个地址。跨主机部署时,使用防火墙或隔离的专用网络,使后端 TCP 端口仅对代理主机开放。容器和托管主机也应根据网络布局设置等效的访问限制。可参考 Velocity 后端安全指南和 BungeeCord 防火墙指南。
玩家信息转发与防火墙限制需要配合使用。允许直接访问后端可能让人绕过代理的登录检查。插件安装、转发设置与 UDP 端口参数见 Velocity 与 BungeeCord。
路由器可以转换端口,因此公网端口号和监听端口号可能不同:
| 设置项 | 应填端口 |
|---|---|
| 客户端填写的服务器地址 | 公网 UDP 端口 |
| 路由器转发规则的外部端口 | 公网 UDP 端口 |
| 路由器转发规则的内部端口 | RakNet 监听的 UDP 端口 |
| 主机防火墙规则的本地端口 | RakNet 监听的 UDP 端口 |
在 IPv4 路由器后架设服务器时:
- 找到接受 RakNet 连接的那台机器的局域网 IPv4 地址。使用 DHCP 地址保留或合适的静态地址,以免日后地址变动导致转发到其他机器。
- 为玩家使用的公网端口添加 UDP 转发规则。
- 将规则的目标设为该主机的内网地址,以及 RakNet 正在监听的 UDP 端口。
- 在主机防火墙上允许 UDP 流量进入监听端口。
例如,服务器在 UDP 25565 上监听,可以设置公网端口 25565、目标地址 192.168.1.100、目标端口 25565。请将示例地址换成你服务器实际的内网地址。
保留现有的 TCP 规则以供普通 Minecraft 连接使用。仅有 TCP 转发规则无法转发 UDP。
检查流量到达你的路由器之前,是否已经过另一台路由器或运营商的 NAT。如果两台路由器都由你管理,两台都要配置转发。如果运营商使用运营商级 NAT,可询问能否分配公网 IPv4 地址,也可使用支持入站 UDP 的托管服务或隧道。本机路由器上的转发规则无法更改运营商的 NAT 设置。公网 WAN 地址的要求见 TP-Link 端口转发说明。
在路由器的 IPv6 防火墙和主机防火墙上都放行所选 UDP 端口。规则应指向接受 RakNet 连接的主机的 IPv6 地址。
检查主机名对应的 IPv6 地址确实指向该主机。如果机器的 IPv6 地址发生变化,应更新 DNS 记录以及引用该地址的防火墙规则。
同时发布 IPv4 和 IPv6 地址的主机名,两个地址都要有可用路由。如果有的玩家能连接,有的不能,请检查两套规则。
如果 IPv4 转发时更改了端口号,要确认玩家填写的端口通过 IPv6 也能到达监听器。IPv4 的端口转换不会自动配置 IPv6 路由。
托管商或隧道服务必须在提供给玩家的公网接入点上支持 UDP。除服务器自己的防火墙外,也要检查服务商分配的端口和网络防火墙规则。
如果前面还有一层 UDP 代理,用 PROXY 协议 v2 转发客户端地址,请遵循 UDP 转发与 PROXY 协议的说明,并将接收端的 UDP 监听端口限制为仅允许受信任的代理访问。
从服务器局域网以外的网络,用更新后的 Raknetify2 客户端连接,例如 raknet;play.example.com:25565。这个地址要填写公网 UDP 端口。
用真正的 RakNet 连接验证路由。正常工作的 UDP 服务也可能丢弃无法识别的探测包,因此 UDP 扫描没有收到响应时,结果并不确定。详见 Nmap 的 UDP 扫描文档。
TCP 连接成功只能说明 TCP 路由正常。如果 RakNet 超时,请按故障排查指南检查监听器、转发目标、UDP 端口和防火墙规则。
请按你要下载的具体发行版核对兼容性。开发分支上已经支持的版本或功能,可能尚未包含在发行版中。
如果使用 Fabric,请从 JAR 所在的同一发行版下载 compatibility.json。先在 gameVersions 中找到你的 Minecraft 版本,再查看 runtimes 中对应条目的 depends 要求。该 JSON 文件仅供查阅,无需放入 mods 文件夹。
如果使用 Forge、NeoForge 或 Spigot/Paper,请查看下载文件及其发布页面声明的版本要求。某个加载器支持某版本,不表示其他加载器也支持。
Raknetify2 声明的是它所需的最低 Java 版本。Minecraft 或加载器可能要求更高的版本。请选择能同时满足三方要求的 Java 版本。
客户端和接受连接的服务器或代理,请尽量使用同一 Raknetify2 发行版。混用前先阅读发行说明。RakNet 加密连接要求两端都支持认证加密协议。原版 Raknetify,以及在引入该协议之前发布的 Raknetify2,均无法通过这种加密方式与新版连接。
Raknetify2 承载 Minecraft 现有的游戏协议。不同 Minecraft 版本之间要互联,仍需配备兼容的协议转换方案。
构建工作流会针对 Polymer、Krypton、PacketFixer 和 Fast IP Ping 运行兼容性检查。结果适用于工作流实际选择的版本和组合。排查某一组合时,请查看对应发行版的构建结果。
如果大型整合包出错,请按故障排查指南操作,报告中附上完整的模组版本信息。
默认情况下,某个通道等待补包时,Raknetify2 允许其他独立通道继续传输。有序模式将所有 Minecraft 数据包放在同一通道中。一个包丢失后,该方向后续的所有包都会等待重传完成。这能保持某些反作弊软件要求的顺序,但在等待期间,无关的游戏数据也无法继续传输。
-
在接受 RakNet 连接的服务器或代理上,以及每个 RakNet 客户端上,安装支持有序模式的 Raknetify2 版本。
-
在该服务器或代理的工作目录下创建
config/raknetify2-compatibility.json。如果没有config目录,请先创建。 -
写入以下内容:
{"mode": "ordered"} -
重启服务器或代理。
客户端会自动采用服务器的设置。玩家无需创建配置文件,也无需修改原有的 RakNet 服务器地址。
两个方向各使用一个可靠有序通道传输全部 Minecraft 数据包,包括包组分隔标记与切换世界时的数据包。
玩家通过 Velocity 或 BungeeCord 连接时,有序模式应在代理上配置,即使反作弊软件运行在后端服务器上也是如此。
切换后端后,此设置仍然生效。在有序模式下,后端发来的保活请求会由代理转发给真正的客户端,代理不会就地代答。
首次建立 RakNet 连接时,控制台会显示:
Raknetify2 compatibility: ordered (updated clients required, genuine acknowledgements)
兼容性协商成功时,日志还会出现 ordered compatibility negotiated,后面是对端地址。
保持反作弊检查开启,并在你实际使用的配置上验证。
不支持有序模式的 RakNet 客户端无法加入强制使用该模式的服务器。请更新客户端的 Raknetify2,或者使用服务器或代理正常的 TCP 地址与端口连接,地址开头不要加 raknet;。
将文件内容改为:
{"mode": "multichannel"}然后重启服务器或代理。也可以删除配置文件,重启后同样会恢复多通道模式。
文件中只能有一项名为 mode 的设置。它的值必须是 "ordered" 或 "multichannel",区分大小写。
如果配置无效或文件无法读取,RakNet 连接将被拒绝。更正文件后重启相应进程。
如果控制台仍显示 multichannel,请检查文件是否位于实际接受 RakNet 连接的服务器或代理的工作目录中,然后重启对应进程。
Fabric、Forge 和 NeoForge 服务器可以按配置将支持此功能的客户端通过 RakNet 转移到目标服务器。此功能依赖 Minecraft 从 Java 版 1.20.5 起提供的原生转服机制。请核对 Raknetify2 发行版是否支持两端的 Minecraft 版本与加载器。
在发起转服的服务器与客户端上安装 Raknetify2。目标端必须提供兼容的 RakNet 监听端口,并接受 Minecraft 转入请求。
此配置仅作用于上述三个模组加载器发起的转服。Spigot/Paper、Velocity 和 BungeeCord 插件不会读取这份转服配置文件。
在发起转服的服务器目录下创建 config/raknetify2-transfers.json:
{
"destinations": [
{
"host": "play.example.com",
"tcpPort": 25565,
"udpPort": 25570
}
]
}将示例中的主机名与端口替换为实际的目标值,再重启发起转服的服务器。其他目标也添加在同一个数组内。
| 字段 | 含义 |
|---|---|
host |
目标主机名或 IP 地址,不含传输协议前缀和端口号 |
tcpPort |
原始转服请求指定的目标端口 |
udpPort |
转入的客户端应连接的公网 RakNet 端口 |
TCP 和 UDP 可以使用同一端口号。如果路由器转换了 UDP 端口,此文件中应填公网端口。端口号用 JSON 数字表示。
发起转服时,目标仍填写普通主机名和 TCP 端口。Raknetify2 会检查客户端是否声明支持自动转服。如果客户端支持且目标匹配,则改用配置的 UDP 端口。其他客户端或未匹配的目标继续使用原始转服地址。
匹配依据是转服请求中的主机名和 TCP 端口。比较前会统一主机名大小写、末尾的 DNS 点号以及 IPv6 的等价写法。不通过 DNS 查询进行匹配,因此即使两个不同的主机名解析到同一地址,也需分别配置。不能使用通配符。
如果目标使用 Minecraft 的 server.properties,请设置 accepts-transfers=true 并重启。目标若为代理,可能有单独的转服设置。Minecraft 默认拒绝转入,即使玩家能正常直连该服。
必须先配置好目标端的 RakNet 监听、公网 UDP 转发和主机防火墙。发起转服一方的配置文件只决定发送给客户端的地址。
如果目标主机名同时发布 IPv4 和 IPv6 地址,请检查两条路由。排查自动转服前,先试一次到目标端的普通 RakNet 直连。
保留目标端原有的登录与准入检查。此配置不会授予玩家访问权限,也不能替代服务器身份验证。
字段缺失、字段名未知、端口无效或目标重复,都会在初始化时报配置错误。请根据服务器日志定位错误,修正 JSON 后重启。
要关闭自动选择,请移除配置文件或将内容改成 {"destinations": []},然后重启发起转服的服务器。此后转服请求将保留原始地址。
UDP 代理可以转发 RakNet 流量,并通过 PROXY 协议 v2 保留客户端的原始地址。只有上游 UDP 代理会向监听器发送此类标头时,才应启用本功能。普通路由器端口转发无需启用。
在接收转发 UDP 流量的服务器或 Minecraft 代理上创建 config/raknetify2-proxy-protocol.json:
{
"trustedProxies": ["192.0.2.10"]
}将示例替换为 UDP 代理的实际源 IP 地址,或你能控制的 CIDR 网段。若中途经过 NAT,以接收端实际看到的源地址为准。可以直接填写 IPv4 或 IPv6 地址,不能填写 DNS 主机名。配置后重启接收端的服务器或代理。
将转发代理配置为给 UDP 流量添加 PROXY 协议 v2 标头。Raknetify2 仅接受来自所列来源的转发客户端地址。启用本设置时,没有此类标头的 RakNet 直连会被拒绝。TCP 监听器继续使用原有配置。
列出的每个代理都受信任,可以声明客户端的地址。在后端的防火墙中限制 UDP 端口,只允许指定的代理访问。在网络条件允许的范围内,尽量缩小信任网段。
文件中只能有 trustedProxies 一项,且必须至少包含一个条目。空数组会报错。如果文件无效,RakNet 监听器将无法启动。
要恢复 UDP 直连,请移除该文件并重启监听器,同时按新的连接路径更新上游代理的转发方式和防火墙规则。
启用后若无法连接,请检查后端看到的代理实际源地址、配置的受信任网段,以及代理是否为 UDP 发出了 PROXY 协议 v2 标头。
Minecraft 代理的安装与后端配置见 Velocity 与 BungeeCord。
在 Fabric、Forge、NeoForge、Spigot 和 Paper 上,Raknetify2 可以和 Simple Voice Chat 共用服务器的 UDP 监听端口。
在服务器和所有需要语音聊天的客户端上安装 Simple Voice Chat。其余语音配置请参阅该模组的服务器设置指南。
Raknetify2 的配置文件放在服务器顶层的 config 目录,Spigot/Paper 也一样。Simple Voice Chat 自己的配置文件沿用下述各平台的位置。
-
在服务器目录下创建
config/raknetify2-voicechat.json,写入以下内容:{"enabled": true} -
在 Simple Voice Chat 的服务器配置中设置
port=-1。模组服务器的文件是config/voicechat/voicechat-server.properties;Spigot/Paper 上是plugins/voicechat/voicechat-server.properties。 -
如果只有一个匹配的 RakNet 监听器,让
bind_address保持空白。如果服务器在该 UDP 端口上有多个监听器,将它设为你希望共用的那个监听器的本地地址。 -
重启服务器,然后对一名已连接的玩家运行
/voicechat test <PLAYERNAME>。
如果 RakNet 监听器与 Minecraft 使用不同的端口,请将语音 port 明确设为本地 RakNet UDP 端口,不要使用 -1。例如,若本地 RakNet UDP 端口为 25570,应设置 port=25570。
如果客户端需要使用不同的公网地址或端口,请设置 voice_host。例如路由器将公网 UDP 25580 转发到本地 UDP 25570,则配置 port=25570 和 voice_host=play.example.com:25580。公网地址应填在 voice_host 中,bind_address 则用于选择本地监听器。
Raknetify2 通过 Simple Voice Chat 的 API 提供共用的 UDP 套接字。语音身份验证与加密仍由 Simple Voice Chat 处理。无论游戏连接走 TCP 还是 RakNet,玩家都可以使用语音聊天。
Query 和 Geyser 仍需使用不同的 UDP 端口。共用套接字的集成仅支持 Simple Voice Chat。
此功能不能在 Velocity 或 BungeeCord 上共用语音代理的套接字。请按 Simple Voice Chat 的代理设置指南为语音代理分配独立的 UDP 端口。如果使用官方语音代理插件,要指定公网 voice_host,须在代理的语音配置中设置。该插件会忽略后端服务器上的 voice_host。
使用通用 UDP 隧道时,将 voice_host 设为实际向本服务器转发的公网主机名与 UDP 端口。
如果日志显示 No RakNet listener matches the voice bind address and port,请确认 RakNet 已启动,并核对语音配置的端口与绑定地址是否和本地 RakNet 监听器一致。
如果显示 Multiple RakNet listeners match the voice bind address,在 bind_address 中明确指定一个匹配的本地地址,然后重启。
只能由一个 Simple Voice Chat 插件提供它的 UDP 套接字。如果启动时提示已有其他插件提供套接字,请从这些集成中选择一个使用。
要关闭 Raknetify2 的语音集成,请在它的语音配置中设置 {"enabled": false},或删除这份文件。为 Simple Voice Chat 分配单独的 UDP 端口,更新相应的防火墙或转发规则,然后重启服务器。
按以下顺序检查:
- 客户端安装了适用于其加载器与 Minecraft 版本的 Raknetify2 模组。
- 接受连接的服务器或代理已安装 Raknetify2,且启动时没有监听错误。
- 地址以
raknet;开头,填写的是公网 UDP 端口。 - 托管服务商、路由器及主机防火墙都允许通过该端口的 UDP 流量。
- 主机名的 IPv4 和 IPv6 地址都指向预期的主机,且相应的防火墙规则有效。
TCP 连接成功只能说明 TCP 路由可用。按防火墙与路由器配置检查 UDP 转发与 IPv6 访问。如果启用了 PROXY 协议,客户端必须经配置中受信任的代理才能到达监听端。
检查是否有其他进程占用该 UDP 端口。Query、Geyser 等 UDP 服务都需要自己的端口。Simple Voice Chat 可使用共用端口功能。
可以按直连服务器监听设置或 Velocity 与 BungeeCord 设置另选本地 UDP 端口。请核对 Spigot/Paper 对此设置的版本要求。只修改路由器的公网端口,无法解决本地套接字冲突。
使用目标的 raknet; 地址尝试直连。如果直连失败,请先修复目标监听器或网络路由。
如果能直连,请检查目标端是否接受转服。使用 server.properties 的 Minecraft 服务器需要设置 accepts-transfers=true。普通直连不会验证该设置。
将转服请求中的主机名和 TCP 端口,与发起转服一方的 config/raknetify2-transfers.json 对照。确认重启后已加载此文件,且客户端支持 RakNet 自动转服。详见自动转服。
核对连接两端的 Raknetify2 版本。如果发行版更改了加密协议,应同时更新客户端与接受连接的服务器或代理。排查期间请保留服务器原有的身份验证设置。
记录触发问题的具体操作,例如打开物品栏、接收资源包、切换世界或生成实体。条件允许时,在独立的测试环境中分别通过 TCP 和 RakNet 执行同一操作并对比结果。
某些自定义负载依赖原版数据包的顺序。模组作者可以通过数据包排序接口声明这些依赖。
请在 Raknetify2 问题跟踪页新建问题,并附上:
- 两端的 Minecraft、Java、加载器和 Raknetify2 版本。
- 服务器与代理软件版本,包括所有 UDP 转发代理。
- 安装的其他模组及其版本。
- 复现问题的步骤,以及你预期看到的结果。
- 通过 TCP 执行相同步骤是否正常。
- 同一次尝试所产生的客户端、服务器及代理日志相关片段。
上传日志前请移除访问令牌、密码及其他隐私信息。保留诊断所需的异常消息和堆栈跟踪。
Raknetify2 允许模组声明,哪些 Minecraft 数据需要与其自定义负载按顺序传输。如果处理负载前必须由先到的数据包建立实体、区块、物品栏或其他状态,就应使用此接口。
| 分组 | 相关流量 |
|---|---|
ui |
不依赖世界状态的菜单与交互 |
entity |
实体生成、移除与移动 |
world_interaction |
物品栏以及其他依赖世界状态的交互 |
effects |
声音和粒子 |
chunk |
地形、方块与光照更新 |
每个组在自己的通道内都保持可靠、有序传输。不同组之间的数据包抵达时,相对顺序可能与发出时不同。请按负载实际依赖的数据选择分组。
在模组的 fabric.mod.json 中,为 raknetify:packet_channels 入口添加提供者。提供者使用 JDK 类型实现 Consumer<BiConsumer<String, String>>。它收到的注册函数接受自定义负载标识符与排序组两个参数。
将下列条目合并到已有的元数据中,并将类名替换为提供者类的完全限定名:
{
"entrypoints": {
"raknetify:packet_channels": [
"com.example.mod.OrderingProvider"
]
}
}这里展示的是元数据文件的一个片段。请保留 fabric.mod.json 中的其余内容,包括原有入口。
例如,扩展实体移动的模组可将 example:entity_path 注册到 entity 组。提供者实现示例见 PacketOrdering API 文档。
未安装 Raknetify2 时,Fabric 不会调用此入口。提供者应在初始化阶段声明标识符与分组,不应假设其他模组已经完成初始化。
Raknetify2 可用时,Forge、NeoForge 模组以及服务器或代理插件可在初始化阶段调用 PacketOrdering.register(identifier, group)。类名是 com.ishland.raknetify.api.PacketOrdering。请在接受玩家连接前注册。对于可选集成,确保缺少 Raknetify2 依赖时不会加载其类。
声明对新连接生效。已建立的连接继续使用建立时收到的规则。允许重复提交相同的声明;同一标识符对应冲突分组的声明会被拒绝。
负载标识符必须使用有效的自定义命名空间。minecraft 为保留命名空间。每个端点总计最多 128 条声明,其中包括内置规则和其他模组的注册。标识符遵循 API 的带命名空间语法,最长为 255 个 ASCII 字符。
新版 RakNet 两端在建立连接时交换声明。服务器或代理若没有某个负载的本地规则,可采用对端的声明。本地规则优先;对端声明的作用范围仅限于当前连接。
UDP 中继及客户端地址转发见 UDP 转发与 PROXY 协议。
Minecraft 代理的设置见 Velocity 与 BungeeCord。