Releases: layou233/ZBProxy
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
3.0-rc.3 Summer Update
Technoblade never dies.
后续的构建版本都在Actions里面,为了保证您用到最新版本,请登录GitHub后前往Actions页面下载最新的build。
What's Changed
-
新的配置文件格式
注:当前版本仍非 3.0 正式版,故没有向下兼容承诺,这种附加性更新随时都可能出现,也不保证不出现破坏性更新(breaking change)。
我们在此版本增加了与Services
同级的Lists
项,以键值对形式存储各种自定义的列表,并用于 访问控制 和 TLS 嗅探。
同时,在Service Object
中添加了IPAccess
、Outbound
、TLSSniffing
,在Minecraft Object
中添加了OnlineCount
、IgnoreFMLSuffix
、NameAccess
。部分重要功能更新会在下方介绍,更多内容请参阅 ZBProxy Document。
-
访问控制
大伙最期待的 白名单/黑名单 功能,现在放出正式版!
目前筛选条件支持 IP 和 MC玩家名,在测试阶段已被广泛部署,效果良好。
要部署访问控制,请参阅文档!
-
热重载
ZBProxy 会在启动后自动监视 ZBProxy.json
的变化动态,一旦有变更,会自动进行热重载。
注意,热重载只局限于重载 Lists
部分,若需重载 Services
,不妨直接关闭程序然后重新打开。
-
自定义出站协议
现在 ZBProxy 支持走指定出站协议连接远程目标,如通过 SOCKS 4/4A/5 连接服务器。
同时,SOCKS 系出站协议同样支持 Flow
功能,在 Linux 上可以做到零拷贝。
这类似于“前置代理”,方便通过一些隧道程序传输数据。
未来有计划继续支持 HTTP 代理协议,Shadowsocks 等协议暂时不在计划之列。
-
TLS 嗅探
TLSSniffing
即 TLS 嗅探,它可以从连接中嗅探出 TLS Client Hello 并读取其中的 SNI,允许使用 SNI 覆盖此连接的目标地址。
这种行为也称 “SNI 反向代理”,允许通过 SNI 分流进行反代,从而可使一个端口对应多个反代目标。
同时也支持 阻断非 TLS 连接、阻断非白名单连接 等。
出于安全因素考虑,SNI 反代只允许配合 白名单 使用。目前 TLS 嗅探 不能与 Minecraft 类功能 共同使用。详情请参阅文档。
Merged
- New Config with Access Control Support by @layou233 in #29
- Bump actions/upload-artifact from 3.0.0 to 3.1.0 by @dependabot in #24
- Bump github.com/xtls/xray-core from 1.5.5 to 1.5.7 by @dependabot in #30
- Bump github.com/Tnze/go-mc from 1.18.1 to 1.18.2 by @dependabot in #26
- Update readme by @MooreFoss in #35
- Bump github.com/xtls/xray-core from 1.5.7 to 1.5.8 by @dependabot in #34
- Bump github.com/xtls/xray-core from 1.5.7 to 1.5.8 by @dependabot in #36
- Hot reload 2 by @layou233 in #38
- Bump github.com/xtls/xray-core from 1.5.8 to 1.5.9 by @dependabot in #41
- feat: New Hot-Reload implementation by @layou233 in #45
New Contributors
- @MooreFoss made their first contribution in #35
Full Changelog: 3.0-rc.2...3.0-rc.3
3.0-rc.2 Cumulative Updates
本次更新主要为 积累更新,并无功能上的太多改进,主要表现为性能上的优化,同时为新的配置文件设计做准备。
What's New
-
优化的 ZeroCopy 实现
内部优化 ZeroCopy 实现,节省了很多步骤,减少了内存占用。
同时增加 zerocopy
流控,实际上只是 linux-zerocopy
的别名 (Alias)。
-
退出时调用系统停止监听端口
这能防止 Windows 在退出程序后,被监听的端口仍处于 监听 状态而没有释放,导致的无法重新启动程序的问题。
Fixes
- 默认MOTD换号符问题 89610a9
Full Changelog: 3.0-rc.1...3.0-rc.2