Releases: XTLS/Xray-core
Xray-core v24.11.5
XHTTP client: Enable XMUX for download in U-D-S #3965
虽然 v24.10.31 刚发布不久,但这几天积累的 changes 已经值得发一个新版,主要是懒得 review,请大家测试
XHTTP 上下行分离时的 XMUX 特性说明:#3965
别忘了支持一下 Project X NFT:Announcement of NFTs by Project X #3633
What's Changed
- Wireguard inbound: Do not use kernel TUN by @Fangliding @RPRX in #3960
- API: Add new Get Inbound User by @yuhan6665 in #3644
- XHTTP client: Enable XMUX for download in U-D-S by @RPRX in #3965
- API: Add user online stats by @hossinasaadi @mmmray in #3637
- XHTTP client: Move
dest2
intoMemoryStreamConfig
as well by @RPRX in 9fbb6fb - Test: Fix incorrect output format by @tcpdumppy in #3968
- UDS: Prevent crash when proxying UDP by @Fangliding in #3967
New Contributors
- @tcpdumppy made their first contribution in #3968
Full Changelog: v24.10.31...v24.11.5
Xray-core v24.10.31
XHTTP: The real upload / download splitting #3955 🎃
v1.8.16 第一版 SplitHTTP 发布时,有提到 拆分连接 也有助于反审查,但当时的 SplitHTTP 只是逻辑拆分而没有实际拆分。
现在,#3955 正式将 SplitHTTP 升级为 XHTTP,实现了真正的上下行分离,给 GFW 针对单个连接的分析带来了麻烦。
XHTTP 也已正式支持 REALITY,所以,发挥你的想象力,上下行随意组合,万圣节 have fun!
别急,分离下行的 XMUX #3965、XHTTP 的分享、对 HTTP 传输层的合并等一系列更新也会在接下来的版本中到来。
毫无疑问,XHTTP 又开启了一个崭新的时代。
此外,XMUX 有了非无限复用的默认值,这可以提升默认配置下 XHTTP 的使用体验。REALITY 服务端的 dest
已更名为 target
,XHTTP 的示例均已采用新名,包括 RAW。WireGuard 出站的 kernelMode
已改为 noKernelTun
。
别忘了支持一下 Project X NFT:Announcement of NFTs by Project X #3633
What's Changed
- REALITY config: Add
target
as an alias ofdest
by @RPRX in 75729ce - Chore: Lint common/errors/feature_errors.go by @RPRX in c30f5d4
- Routing: Fix regexp syntax support in UserMatcher by @vnxme in #3900
- Browser Dialer: Revert changes to event listeners by @mmmray in #3906
- HTTP transport: Fix an issue when HTTP client start fail with 403 by @yuhan6665 @RPRX in #3910
- WireGuard kernelTun: Check Capabilities instead of checking UID by @chise0713 @RPRX in #3871
- Refactor: Use struct
Int32Range
widely by @Fangliding in #3867 - Routing: Add mutex for
Attributes
temporarily by @Fangliding in #3908 - XMUX: Change to non-infinity-reuse default values by @RPRX in #3919
- Chore: Generate *.pb.go files with protoc v5.28.2 by @RPRX in 47fad1f
- WireGuard config: Replace
kernelMode
withnoKernelTun
by @RPRX in 9bdf72d - Transport: Remove GUN (an alias of gRPC) by @RPRX in 8809cbd
- Config: Prefer newer alias (REALITY
target
, RAW) by @RPRX in e4939dc - WireGuard createTun: Add more logs by @RPRX in ceb6eac
- Fix: Apply mutex when visiting
Attributes
as well by @Fangliding in #3921 - REALITY: Unblock SplitHTTP transport by @mmmray in #3816
- XHTTP: The real upload / download splitting by @RPRX in #3955
以及更新 README,升级一些依赖,使用 Go 1.23.2 进行编译。
Full Changelog: v24.9.30...v24.10.31
Xray-core v24.10.16
Xray-core v24.9.30
XMUX (multiplex controller) for SplitHTTP
这是 Xray-core 改变版本号规则后的首个 stable 版本,正如 v1.8.24 所预告的,该版本的重要更新主要有:
- SplitHTTP 传输层的 XMUX:https://xtls.github.io/config/transports/splithttp.html
- HTTP 传输层的 H3:https://xtls.github.io/config/transports/http.html
- TCP 传输层更名为 RAW:https://xtls.github.io/config/transports/raw.html
- Freedom 出站的 UDP noises:https://xtls.github.io/config/outbounds/freedom.html
以及 SplitHTTP 仅兼容 v1.8.24(移除了 ok
),移除 QUIC、DomainSocket 传输层,移除对远古配置的兼容代码。
若想引入 Xray-core 作为 lib,参考 2dust/AndroidLibXrayLite#58
下个版本我们会为 XMUX 预设非无限的默认值,把 SplitHTTP 和 HTTP 合并为 XHTTP 传输层(相当于 SplitHTTP 支持了 REALITY,HTTP 也有了默认的 header padding 和 XMUX),XHTTP 允许通过 path 配置参数以方便 GUI 客户端与分享。
What's Changed
- SplitHTTP: Remove
ok
compatibility logic by @mmmray in #3753 - Transport: Remove QUIC by @mmmray in #3754
- Transport: Remove DomainSocket by @mmmray in #3757
- Config: Remove global
transport
by @mmmray @Fangliding in #3751 - Config: Remove legacy
inbound/outbound/detours
by @mmmray in #3769 - Config: Remove some legacy fields from V2Ray 3.x era by @KobeArthurScofield in #3776
- Fix: Return error when Fingerprint does not support TLS 1.3 by @Fangliding in #3774
- Fix: RPC call causes xray panic problem using wrong account type by @bestwishCT in #3744
- Config: Remove legacy config fields again by @KobeArthurScofield in #3782
- Log: Add MaskAddress option to hide IP addresses by @Fangliding in #3783
- Remove remnants of global
transport
by @KobeArthurScofield in #3792 - DNS: do not use cache when returned DNS result has errors by @Fangliding in #3784
- Log: Improve feature deprecation/removal logs by @KobeArthurScofield in #3793
- Routing: Add regexp syntax support to UserMatcher by @vnxme in #3799
- Allow to inject custom validator in VLESS controller by @torikki-tou in #3453
- Sniff: Routing “attrs” support non http inbound by @Fangliding in #3808
- Log: show the matching rule tag by @Fangliding in #3809
- QUIC sniffer: handle multiple initial packets by @Fangliding @Vigilans in #3802
- Fix int overflow on x32 processors causing panic using burstObservatory by @tekig in #3810
- DNS outbound: Add blockTypes by @Fangliding in #3812
- Errors: Add PrintRemovedFeatureError & PrintDeprecatedFeatureWarning by @KobeArthurScofield in #3804
- SplitHTTP: Read and validate HTTP/1.1 responses by @4nd3r5on in #3797
- SplitHTTP client: Add xmux (multiplex controller) for H3 & H2 by @ll11l1lIllIl1lll @mmmray in #3613
- UDP noises: Add base64 and multi-packet support by @dragonbreath2000 @Fangliding @mmmray in #3794
- SplitHTTP client: Fix xmux config deserialization by @mmmray in #3827
- Config: Remove more legacy fields by @KobeArthurScofield in #3817
- Browser Dialer: Change from ES5 to ES6+ for performance by @PoneyClairDeLune in #3832
- Xmux: Value of 0 is treated the same as no value by @mmmray in #3835
- SplitHTTP server: Add global CORS headers for browser dialer by @PoneyClairDeLune in #3830
- Remove legacy code by @KobeArthurScofield in #3838
- Transport: Add HTTP3 to HTTP by @yuhan6665 in #3819
- Transport: Add RAW as an alias of TCP by @RPRX in #3852
- SplitHTTP Config: Add capability to parse int in string format by @Fangliding in #3855
以及更新 README,升级一些依赖,使用 Go 1.23.1 进行编译。
New Contributors
- @bestwishCT made their first contribution in #3744
- @vnxme made their first contribution in #3799
- @torikki-tou made their first contribution in #3453
- @tekig made their first contribution in #3810
- @4nd3r5on made their first contribution in #3797
Full Changelog: v1.8.24...v24.9.30
Xray-core v24.9.19
懒得列详细 changes,总之小白鼠们测试下这个版本有没有问题吧,你们是好人
SplitHTTP xmux:https://xtls.github.io/config/transports/splithttp.html @ll11l1lIllIl1lll @mmmray
UDP noises:https://xtls.github.io/config/outbounds/freedom.html @dragonbreath2000 @Fangliding @mmmray
Xray-core v24.9.16
Xray-core v24.9.7
SplitHTTP 仅兼容 v1.8.24(移除了 ok
),移除 QUIC、DomainSocket 传输层,移除对远古配置的兼容代码。@mmmray
升级一些依赖,使用 Go 1.23.1 进行编译。二进制大小比 v1.8.24 减小了 1MB。
目前计划月中发 pre-release,月底发 latest-release,这句话的意思是 #3812 (comment)
Import 参考 2dust/AndroidLibXrayLite#58
Xray-core v1.8.24
Donation & NFTs
在等待 SplitHTTP multiplex controller 期间,main 分支已经积累了大量重要更新,所以我们决定先发一个版本,主要有:
- SplitHTTP 的 header padding,H3 支持 dialerProxy,以及一些修复
- Socks 入站默认兼容 HTTP 代理请求(mixed)
- Fragment 支持 tlshello 被分片后在同一个 TCP 帧中发送
- UDP noise(preview,下个版本可能会改)
And we have created Project VLESS for non-Chinese participants (Russian mainly).
此外,我们开始通过 NFT 的形式接受捐款,详见 Announcement of NFTs by Project X #3633
正如大家所看到的,Xray-core v1.8 已经不小心持续了一年多的时间,我们发现流式更新是一个不错的形式。然而由于传统版本号的存在,为每个版本规划功能、进行排期已经严重阻碍了新功能的开发、合并、发布。就像这次本来在等 multiplex controller,以及已经有很多 PR 在等 v1.9,并且我们还给 v1.10 及以后的版本号规划了更多功能,要很久才能排到。
所以我们决定从下个版本开始弃用传统的版本号,改用发版日期作为版本号,如 v24.8.30,并取消版本规划,全面采用流式更新,写好的功能直接合并,不再等待,预计每月月底发一个版本。 毕竟对于反审查软件来说,相较于传统的版本号,新功能的及时性、每月更新更为重要,而不是发一个功能确定的版本并长期维护,我们也没有过这样的习惯。
补充:并不一定按月更新,changes 突然积累多了同样可以发版,如果新版有 bug 的话应当给至少一天冷静期,不会同一天发两个版本。下个版本会移除一些历史久远的代码,以后日常积累新代码、提醒迁移,跨年新版删代码、breaking。
我们相信有了各位的捐款以及对发版形式的革新,Xray-core 这个项目会发展得更好。
Changes
- Freedom: Add UDP noise #3711 @dragonbreath2000 @mmmray
- DNS: Support queryStrategy config for UDP NameServer #3728 @xiaorouji
- Mux server: Fix data leak between connections #3718 @mmmray
- Issues template: Add require for latest version 34e0a2f @Fangliding
- SplitHTTP: Fix connection leaks and crashes #3710 @mmmray
- Pin protobuf packages #3715 @mmmray
- Chore: Fix some comment typos #3716 @curlwget
- Wireguard inbound: Fix no route when bind to interface #3698 @chise0713
- SplitHTTP client: Do not produce too large upload #3691 @mmmray
- Config: Combine filename and format into a new struct #3687 @jadeydi
- Log: Add "from" before source address 11b0480 @RPRX
- Socks inbound: Support HTTP inbound by default #3682 @Fangliding @RPRX
- Commands: Use creflect.MarshalToJson() as output #3674 @yuhan6665
- DialerProxy: Fix SplitHTTP H3 dialerProxy #3570 @mmmray
- SplitHTTP server: Add "Cache-Control: no-store" to GET response #3652 @PoneyClairDeLune
- SplitHTTP server: Only "ok" to older clients #3671 @mmmray
- SplitHTTP: Replace responseOkPadding with xPaddingBytes #3643 @mmmray
- Commands: Add convert with two sub-commands #3661 @vrnobody
- SplitHTTP client: Raise idle timeout to 5 minutes, Add h*KeepalivePeriod #3624 @mmmray
- Freedom: Combine fragmented tlshello if interval is 0 #3663 @Fangliding @RPRX @radioactiveAHM
- API: Improve MarshalToJson() in common/reflect/marshal.go #3655 @vrnobody
- Docker: Fix permissions of geosite and geodat #3634 @definitio
- Socks4a server: Check if the client sends an IP address as domain #3628 @Fangliding
以及更新 README,升级一些依赖,使用 Go 1.23 进行编译。
Xray-core v1.8.23
SplitHTTP Upload Optimization
正如 v1.8.21 所预告的,SplitHTTP 现已引入 scMinPostsIntervalMs
选项,优化了上行的稳定性。
scMinPostsIntervalMs
为客户端独有参数,默认值为 30
,即单个子连接内每 30 毫秒 POST 一次,你可以将它设为 10
以降低游戏延迟,或者设为 10-50
以减少特征。注意:服务端必须升级到该版本以支持新版客户端,兼容旧版客户端。
下个版本主要会引入 multiplex controller,以及支持 H3 dialerProxy。目前我们计划等到 uQuic v0.1.0 时用其替换 quic-go。
Changes
- SplitHTTP: Rename three options & Reduce server defaults #3611 @mmmray
- SplitHTTP: Fix wrong config deserialization #3610 @mmmray
- Docker: Add multi-arch builds and Loyalsoldier flavor #3589 @mayampi01 @RPRX
- CertificateObject: Enable auto-reload for cacert & Add buildChain & Fixes #3607 @lelemka0
- WireGuard client: Fix a nil pointer in logging #3608 @yuhan6665
- SplitHTTP server: Add noSSEHeader 60553a6 @RPRX
- SplitHTTP: More range options, change defaults, enforce maxUploadSize, fix querystring behavior #3603 @mmmray
- SplitHTTP client: Add minUploadInterval #3592 @mmmray
- WS, HU: Remove unnecessary sleep from test #3600 @mmmray
- SplitHTTP server: Fix panic during concurrent Close and Push #3593 @mmmray
- Freedom: Don't do raw/splice copy in case of MITM #3604 @yuhan6665
- SplitHTTP sever: Fix Unix domain socket support #3577 @hellokindle @mmmray
- docker.yml: Set latest to auto to tag release version #3581 @mayampi01
恭喜 @mmmray 贡献了 Xray-core 的第 1000 个 commit!
Xray-core v1.8.21
SplitHTTP for HTTP/3, the last hope of *ray's QUIC
正如 v1.8.16 所预告的,SplitHTTP 现已初步支持 HTTP/3(QUIC)。
尽管你可以直接设置并连接 SplitHTTP H3 服务端,但更推荐的做法是 在服务端前套一个反代软件,这样才可以使用 BBR。
当然你也可以套一个 CDN,值得一提的是,在近期的 UDP 封锁潮中,尚未有人报告 CDN 的 QUIC 端口也会被封锁。
对于客户端,ALPN 选择“h3”即可。 已知问题:上行待优化、尚未支持 dialerProxy 和 uQuic,预计下个版本解决。
若你需要浏览器指纹,Browser Dialer 现已全面支持 SplitHTTP H1 H2 H3,由浏览器决定用哪个 HTTP 版本。
总之,SplitHTTP H3 是第一个完全基于标准 H3、支持套 CDN 的 QUIC 类代理,亦可用反代、Browser Dialer 来隐蔽自身。
毫无疑问,SplitHTTP H3 已经开启了一个崭新的时代。
Features
SplitHTTP
服务端支持 HTTP/3 #3554 @ll11l1lIllIl1lll @mmmraySplitHTTP
客户端支持 HTTP/3 #3543 @ll11l1lIllIl1lll @Fangliding @mmmray- 添加了基于 Go 1.21.4 的 Win7 构建 #3530 @mmmray @RPRX
SplitHTTP
支持 Browser Dialer 浏览器转发 #3484 @mmmray- 新增自定义
sockopt
选项 #3517 @Fangliding SplitHTTP
服务端支持 H2C,客户端支持 HTTP/1.1+TLS #3465 @mmmray- 优化 Browser Dialer 浏览器转发效率 #3468 @mmmray
Fixes
- 修复
SplitHTTP
H3 下行状态 200 后才开始上行的问题 0f65aa8 @RPRX - 修复
SplitHTTP
H3 没有复用 QUIC 连接的问题 22535d8 @RPRX - 修复
SplitHTTP
H1 H2 的服务端 TLS 支持 #3567 @mmmray - 移除
SplitHTTP
H3 不必要的 KeepAlivePeriod #3565 @chise0713 @Fangliding @xqzr @ll11l1lIllIl1lll - 修复
SplitHTTP
H3 在 v2rayNG 上的崩溃 #3559 @ll11l1lIllIl1lll - 修复
SplitHTTP
极小概率为同一个 sessionId 生成多个 uploadQueue 的问题 #3533 @vrnobody @mmmray - 修复
WebSocket
读取了 HTTP 头 X-Forwarded-For 但未传递的问题 #3546 @Fangliding @mmmray - 修复日志等级为 debug 的问题 #3535 @abvf
- REALITY 跟随 dest 调用
CloseWrite()
XTLS/REALITY@48f0b2d @Fangliding @RPRX - HTTP 相关传输(
WS
H2
HTTPUpgrade
SplitHTTP
)host 容许客户端发送端口 #3222 (comment) @cute @yuhan6665 - 修复一些
SplitHTTP
HTTP/1.1 连接复用的问题 #3485 @mmmray SplitHTTP
ok 回包的长度混淆预留 #3479 (comment) @RPRX- 修复
SplitHTTP
被一些 CDN 挂起连接的问题 #3479 @mmmray @Fangliding - 修复
SplitHTTP
接收第一个数据包时长度为 0 的问题 #3473 @maskedeken @mmmray