
OpenZiti MC
使用OpenZiti覆盖网络与朋友共享服务器,无需开放防火墙端口。朋友只需服务名称和身份——无需端口转发、公共监听器或公共IP。
查看大图OpenZiti MC
无需开放防火墙端口,即可与好友共享 Java 版服务器。OpenZiti MC 通过 OpenZiti 零信任覆盖网络路由游戏的网络流量。这意味着专用服务器永远不需要公网 IP、公网 DNS 名称或开放的 TCP 端口。通过 OpenZiti 服务名称进行连接。OpenZiti 覆盖网络将在任何数据包到达您的服务器之前,对连接进行身份验证和授权。
功能
- 客户端: 当您在“添加服务器”中输入 OpenZiti 服务名称时,模组会拦截 Netty 拨号,并通过覆盖网络而非 TCP 进行连接。
- 服务端: 在配置中启用后,专用/集成服务器将绑定到 OpenZiti 服务,而不是常规的 TCP 监听器。只有覆盖网络上经过授权的身份才能访问它。
工作原理
整个模组由三个 Mixin 组成,它们挂钩 Netty 的 Bootstrap/ServerBootstrap 调用,并替换为 ZitiChannelFactory + ZitiAddress.Dial / ZitiAddress.Bind。Minecraft 的数据包管道未被改动。OpenZiti JVM SDK 已捆绑在 jar 文件中,无需额外安装。
身份从 config/openziti/identity.json 中的标准 OpenZiti 身份文件加载。放入您的身份文件即可完成配置。
要求
- Java 版 1.20.1
- Fabric Loader 0.16.10+
- Fabric API
- Architectury API
- 一个正在运行的 OpenZiti 控制器和至少一个边缘路由器。如果您没有 OpenZiti 覆盖网络,请按照入门指南进行设置。
OpenZiti 设置
仓库中包含一个 setup-ziti.ps1 脚本,可以交互式地完成所有设置,是设置 OpenZiti 覆盖网络的推荐方式。
- 创建一个服务(默认名称为
openziti-mc) - 为专用服务器创建一个标记为
#minecraft-server的身份,并为每个玩家创建一个或多个标记为#minecraft-clients的身份 - 创建匹配的绑定/拨号服务策略
服务器设置
确保服务器身份已注册,并将注册后的服务器 .json 文件放入 config/openziti/identity.json,然后在 config/openziti.json 文件中设置 "serverBind": { "enabled": true, "serviceName": "openziti-mc" }。
客户端设置
对于每个运行 OpenZiti MC 模组的客户端,确保客户端身份已注册,然后将注册后的客户端身份文件放入 config/openziti/identity.json。
使用模组
启动 Minecraft 后,选择:多人游戏 -> 添加服务器 -> 服务器地址 openziti-mc -> 完成 -> 加入。
更多信息
有关更多信息或更详细的细节,请参阅 GitHub 上的项目主页:https://github.com/dovholuknf/openziti-mc/。您还可以在 SETUP.md 中找到完整的分步指南(包括控制器 + 身份 + 策略 + 开发运行)。
限制
- 此版本仅针对 MC 1.20.1。计划在未来 MC 版本中支持 NeoForge。
- OpenZiti SDK 和 Kotlin 标准库已捆绑,因此 jar 文件约为 28 MB。比大多数实用模组大,比大多数内容模组小。
- 关于 Netty 映射目标的注解处理器警告仅为表面问题,不影响运行时行为。
架构
有关技术深入探讨(Netty 通道工厂挂钩、smuggler InetSocketAddress 模式、三个 Mixin 类、ZitiContext 预热等待、拨号重试循环),请参阅仓库中的 BLOG.md。
致谢
- openziti/ziti -- OpenZiti 覆盖网络
- openziti/ziti-sdk-jvm -- 其
ziti-netty模块使这个模组变得小巧而非庞大。 - vgskye/e4mc-minecraft-architectury -- smuggler-InetSocketAddress 模式以及
Connection/ServerConnectionListener的 Mixin 形态。
采用 Apache-2.0 许可证。源代码位于 github.com/dovholuknf/openziti-mc。
正在加载版本记录…


正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。