Releases: layou233/ZBProxy
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
3.0-rc.1 Evolution4Fastest
我们很荣幸能看到这样一个强大版本的诞生,但是目前还不是 ZBProxy 的终点,甚至3.0版本依然没有达到我的预期。为了让我们的努力更可观,我决定在当前版本发布一个 release,作为一个里程碑树立在前行的路上。
Evolution, also revolution. 进化,同时也是革命。
我们返璞归真,将 ZBProxy 退化为一个普通的反向代理工具,同时加入可选的主机名重写功能来延续原先加速IP的功能。
现在的 ZBProxy 3.0,依然是开箱即用,启动程序便能完成搭建,但是加入了配置功能,便于自定义你的专属代理。
同时,我们加入了流控功能,大幅提升转发速度,减少性能消耗,拥有近乎所有反向代理程序中最高的性能比,值得用户挖掘。
同时,我们也搭建了我们的官方文档,使 ZBProject 的产品更为一体化。
后续的构建版本都在Actions里面,为了保证您用到最新版本,请登录GitHub后前往Actions页面下载最新的build。
2.0 - Optimized&Compatible
In this new version, we fixed some bugs, and optimized our steps of modify the login packets.
MOTD and Config functions are still in developing progress (temporarily put on hold).
What's New
1. Speed Optimized
Packet change detection is only performed when the connection is just established, and it will not judge whether it is the first connection every time it is forwarded.
This will remove only one judge step for CPU in forwarding works, but it seems to decrease about 1-3 ms in game.
2. Version Compatible
Fixed #4
Now ZBProxy can work with all Minecraft versions Mojang has ever published.
这个问题由于一个看起来很易于理解的设计缺陷导致:
协议号为128及以上的数字,在编码为varint时会占用两个字节,但是事实上本程序在编写的时候犯了一个先入为主的错误,即把协议号视为一个字节,导致了定位错误。
由于开发时测试的版本为1.8.9(协议号47),所以问题并没有发生.
协议号128的版本应该是在1.9.4到1.10之间
This bug has been completely solved by an almost perfect solution.
Through the principle characteristics of VarInt, we can now correctly identify the byte length of all existing protocol version numbers.
3. Linux Console
We now use the compilation parameters provided by Golang to avoid compilation errors caused by multi platforms, so it is no longer need to delete non Windows files in the current building process.
And now the Linux console also supports the title display like Windows!
(but I don't think anyone can see the effect XD)
Downloads
Go to https://github.com/layou233/ZBProxy/actions/runs/1224437293
And then download built program you need.
1.0 - First Release
The basic function has been realized, but the MOTD function and further optimization still need to be carried out in next versions.
More component can be found at https://github.com/layou233/ZBProxy/actions/runs/967471733