Releases: layou233/ZBProxy
3.1-beta.4
This release includes new features, bug fixes and code cleanup. This release is built with Go 1.24.2, while we (expect to) remain compatible with Go 1.20+.
Please note that Go 1.24 requires Linux kernel version 3.2 or later. If you want to restore support for ancient kernels, build with an older version of Go. Please note that due to the Go language team's decision to automate go directive maintenance in golang.org/x repositories, we may have to follow the latest maintained Go version in the near future (for example, Go 1.23.x when the latest Go version is Go 1.24.x), which means we will have to periodically deprecate old Go versions and invalidate the Go 1.20 compatibility promise.
Change
- Add support for case-insensitive matching.
- Domain matchers are case-insensitive now.
Fixes
- Bug: Newly added/deleted lists are not visible to reloading. #165
Full Changelog: v3.1-beta.3...v3.1-beta.4
3.1-beta.3
This release includes code cleanup, bug fixes and performance improvements. This release is built with Go 1.24.0, while we (expect to) remain compatible with Go 1.20+.
Please note that Go 1.24 requires Linux kernel version 3.2 or later. If you want to restore support for ancient kernels, build with an older version of Go.
Fixes
- Bug: DoS vulnerability on packet length sniff
- Chore: Remove unused ReadV/WriteV code
Full Changelog: v3.1-beta.2...v3.1-beta.3
3.1-beta.2
This release includes new features, bug fixes and performance improvements.
Change
- Add PROXY protocol support.
- Add DNS SRV support for outbound protocols.
- TCP Keep alive can now be disabled.
Fixes
- Bug(?): Random crash when reloading configuration.
- Bug: Incompatible with newer FML network markers.
- Improve: Buffer pool now allocates arrays instead of slices.
- Improve: VarInt write.
Full Changelog: v3.1-beta.1...v3.1-beta.2
3.1-beta.1
Go 1.23 has been released. We recommend that you upgrade to the latest Go version as soon as possible.
Change
- The keep alive options in socket options has been changed to be in sync with the Go 1.23 update.
- New Minecraft status rule to match all incoming Minecraft server list MOTD request.
- Add custom local address support to outbound. (by @OOPSgary in #141)
Fixes
- Bug: Wrong log level for connection logs.
- Improve & Fix: Connection copy logic.
Full Changelog: v3.1-alpha.3...v3.1-beta.1
v3.1-alpha.3
Change
- New source port rule.
Fixes
- Bug: Minecraft player number limiter does not work
- Performance: Listen loop is transitorily blocked when receiving new connections.
Full Changelog: v3.1-alpha.2...v3.1-alpha.3
3.1-alpha.2
Change
- Update sniff/rule registry interfaces to give them logger. This is expected to be stable since then.
- New service name rule.
Fixes
- Bug: Minecraft 1.19-1.20.1 sniff error
- Bug: Minecraft player number limiter allows 1 more player to join than expected
Full Changelog: v3.1-alpha.1...v3.1-alpha.2
3.1-alpha.1
Experimental release of the next minor version.
ZBProxy is fully refactored in 3.1.
3.0.0 New beginning
🎉在经过大量生产环境部署试验后,终于释出 ZBProxy 3.0 正式版。ZBProxy 问世后的两年半时光,它成为了最受欢迎的 Hypixel 中继程序,被大量业界闭源中继程序作为基础代码,同时也推动 Go 成为加速IP业界最被广泛使用的编程语言。
🤺ZBProxy 的故事还会继续。在发布 ZBProxy 3.0 之后,3.0 版本会进入仅维护状态,不增加新的功能仅接受漏洞修复。我们的工作重心会移到 ZBProxy 3.1 版本的开发中。
🔮3.1 版本预计加入新的配置格式和结构,保持旧配置格式兼容,解决单入口多出口问题,支持更灵活的访问控制以及分流。更多内容仍在计划中!
该版本的 ZBProxy 支持使用 Go 1.20+ 编译,建议保持使用 Go 最新正式版本。
What's Changed
-
🔁重新引入基于进程信号的重载
曾经在 #45,我们在引入基于监视文件修改的重载的同时移除了原先基于进程信号的重载。这样做很大的一个原因是基于进程信号的重载基于 Unix 进程信号,对 Windows 等非类 Unix 系统支持不好。当前版本重新引入了这一重载触发方法,同时支持两种触发方法,方便运维人员通过 systemctl reload
轻松地进行计划外的重载。
-
📃更详细的错误描述
现在每一个连接在完成处理后都会打印处理结果,无论是“响应了 MOTD”、“被访问控制中断”,还是正确处理后一个小巧可爱的“√”。🥰
-
📚支持自定义 Minecraft 多人游戏玩家样本显示
当鼠标停留在服务器列表显示的人数上时,你就能看到这些消息。它可以被自定义为服务器介绍,使你的服务更加出彩。
使用方法详见 #99 介绍。未来补充到文档。
-
🔌支持套接字 SocketOptions 设置
为极客设计,可以深度定制套接字参数,从而支持走特定网络接口、指定拥塞控制算法、打防火墙标记、启用多路径 TCP 等功能。具体支持视操作系统而定。
-
🛠️性能优化与错误修复
优化了随机数生成以及 Minecraft VarInt 写入的性能,以及其他微小性能改进。修复了 MCProtocol 布尔类型值等问题。
Merged
- refactor: custom serialization and deserialization by @lycorisor in #78
- fix: RHEL compatibility for systemd service ordering by @ThrRip in #100
And a lot by @dependabot 😊
New Contributors
- @lycorisor made their first contribution in #78
- @ThrRip made their first contribution in #100
Full Changelog: 3.0-rc.5...3.0.0
3.0-rc.5 Security Enhancement
🏮 Happy Lunar New Year of Rabbit! 🐇
后续的构建版本都在Actions里面,为了保证您用到最新版本,请登录GitHub后前往Actions页面下载最新的build。
What's Changed
-
⚠重要漏洞修复
我们修复了一个由旧版 go-mc 引起的 DoS 攻击漏洞,该漏洞允许恶意攻击者通过发送一个声明超大长度的伪造数据包导致 ZBProxy 因内存不足而崩溃。该漏洞影响范围为 ZBProxy 3.0-rc.1 到当前版本之间的所有版本,请所有用户尽快更新到最新版本以免受到安全威胁。
-
全新设计的高灵活 MCProtocol 框架
在漏洞修复的同时,我们认识到 go-mc 的编程目的与我们不尽相同。因此,我们在 go-mc 开发经验的基础上重新开发了一套 Minecraft 网络框架。该框架轻量简单,支持灵活的数据处理,具有更少的 alloc ,更少的 IO 次数,从而拥有更高的性能比。我们尽可能多地使用 Go 标准库和 Go 语言特性而非反复造轮子,以此提高框架代码的清晰性和可读性。由于其高灵活的 API 设计,开发人员可以更容易地应对不同类型的内容攻击。
我们支持更多同类转发程序使用我们的框架,该框架主要遵循 ZBProxy 主体开源协议开源(具体见代码),再发行/引用时请注意协议相关要求。
注:由于与 go-mc 开发与优化方向不同,我们的框架不是 go-mc 的替代品/竞争对手/潜在竞争对手。此框架只为 Minecraft 多人游戏协议包的简单处理而设计,并未完整实现整个协议。
-
更小的编译体积
在上一个版本,我们把 ZBProxy 的体积减小了 2~3 MiB。在这一版本,我们移除了对 go-mc 的依赖,同时也无需再编译 crypto/tls 标准库(通过移除不怎么有用的版本更新检查)。我们的最终体积减小到了 2 MiB 左右。这对正常编译的 Go 语言程序来说已经是较为极限的体积,代码利用率达到很高水平,符合简单高效的预期。
Merged
- chore: Bump golang.org/x/sys from 0.3.0 to 0.4.0 by @dependabot in #74
- chore: Bump actions/upload-artifact from 3.1.1 to 3.1.2 by @dependabot in #75
Full Changelog: 3.0-rc.4...3.0-rc.5
3.0-rc.4 New Year Update 2023
🎄 Happy New Year! 🌟
很遗憾,由于 GitHub 停用了我的 Action 权限,故本次更新预编译的二进制程序放在此 release 下。带来不便敬请谅解!
Pre-built binary file is moved to this release since GitHub disabled my Action permission. Sorry for the inconvenience!
What's Changed
-
重构的 multiple 流控实现
先前的 multiple
流控依赖于 Xray-core 的相关实现。现在,我们重写了该部分代码,分离独立实现了 ReadV 以及 WriteV ,简化了代码并且小幅提升了性能。
由于移除了对 Xray-core 的依赖,我们全平台的二进制发行文件都减少了 2~3 MiB ,现在的 ZBProxy 更小、更灵活。
-
新的日志设计
原有的日志存在太多无用信息、杂乱、可读性低、难以追踪连接的问题。现在,我们引入 会话 ID
的设计,每个连接都对应一个 会话 ID
,这个 ID 与该连接的生命周期绑定,便于在日志的上下文追踪连接事件。
同时,我们为 会话 ID
在终端中的显示上色,在 Windows 命令提示符、终端、 Powershell 上,以及其他支持 xterm256 的终端上皆可正常显示颜色,便于阅读。
-
Minecraft 在线玩家数统计
现在,我们支持实时统计在线的玩家数量,并且支持实时显示在 服务器列表 上。
与此同时,我们支持限制最大玩家数量上限,方便限制服务器负载。
更多内容请参阅 ZBProxy Document。
-
Minecraft 新的 Ping 模式
现在,我们支持多种 服务器列表 Ping 的显示模式。
当不填写 PingMode
字段时,则与旧版本行为相同,显示从客户端到 ZBProxy 之间的延迟。
当 PingMode
为 disconnect
时,显示无连接( no connection )。
当 PingMode
为 0ms
时,延迟将始终显示为 0 ms 。
Merged
- fix: Unexpected panic when list not found by @PCD-01 in #59
- chore: Bump github.com/fsnotify/fsnotify from 1.5.4 to 1.6.0 by @dependabot in #51
- chore: Bump actions/upload-artifact from 3.1.0 to 3.1.1 by @dependabot in #54
New Contributors
Full Changelog: 3.0-rc.3...3.0-rc.4