-
Notifications
You must be signed in to change notification settings - Fork 4.8k
XTLS Vision: Add testpre (outbound pre-connect) and testseed (outbound & inbound)
#5270
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
首先“预连接”这个技术早几年就讨论过了,懒得找链接,我还看过有个项目给 Trojan 搞“预连接”,不过没有 padding 就是强特征 |
|
几年前 REALITY 仓库写下的“XTLS 的下一个主要目标是 0-RTT”对 Vision 而言就是“预连接”,这不更早, 只是以前的 VLESS outbound 有 vnext 多目标、users 多用户,写起来有点麻烦,现在只有一个 end point, |
|
说这些没有别的意思,只是防止有人找角度恶评说抄谁谁谁,并且说实话“预连接”这么简单的东西是个开发者都能自己想出来 至于为什么以前没普及,就是我说的原因,前提是你得有自由 padding 否则强特征,但是用得好的话它还能起到迷惑 GFW 的作用 |
3c6244d to
2dc9729
Compare
|
Is it possible to use this with xhttp? without xhttp padding and separated up-down streams my node get blocked after few days |
|
试了一下就炸掉 goroutine 30 [running]: |
|
@Smallthing 上一次 force-push 前是不会炸的,但是第一个连接关闭后它的 ctx 被 cancel 会导致后面的 dial 不出去 所以换成了 background,我研究下需要 clone ctx 里的哪些值 |
|
看起来似乎把这处 panic 改掉,然后 VLESS outbound 加行代码赋值一下 ob.Conn 就行了,只是底层传输日志中 ctx id 会不一样 |
|
确实可行,e8aecbc 已修,经测试可以正常使用,你们再测测吧 @gfw-killer 这个 pre-connect 是给 RAW REALITY/Encryption 用的,XHTTP 自带复用,体感延迟本身就是 0-RTT,但可以用 Seed |
|
@Fangliding 在群里提到了 senderSettings 简单看了下貌似它用到了 ctx 中的东西,所以这个 pre-connect 目前只适用于非 dialerProxy 的情况 |
|
预连接:https://t.me/projectXtls/143 、#3560 (comment) Seed:#1295 (comment) 、https://t.me/projectXtls/145
现在感觉 pre-connect 潜力很大、会成为标配,如果想要原生 UDP 打游戏,那用 PLUX #3560 (comment) 可以替代,齐活了 |
|
这东西的预连接的超时怎么设置,大规模使用cdn图片后有时候会卡好一会,服务端看经常能产生60多个预连接,感觉复用逻辑是不是有点粗暴了 |
|
@Smallthing 超时是 TODO,还有你 testpre 设的 5 就最多有五个预连接,不会有六十多个 |
This comment was marked as resolved.
This comment was marked as resolved.
|
@Smallthing 连接数不等于预连接数啊,你应用层的连接没断开,代理层是 1:1 的,几十个不是很正常吗 其中有十个是预连接,你填的 5 就表明随时有 5 个预连接备用,如果被使用了就会自动开新的预连接,自动补至 5 个 |
bef3f18 to
e8aecbc
Compare
|
我稍微重写了一下这个池逻辑 1e50e6e |
|
@Fangliding 直接用 channel 的确更方便,不过得补上 sleep,不然可能会疯狂循环,还有直接 go func 就行 |
e3e4993 to
1e50e6e
Compare
|
我把close的逻辑一起做了所以那里会略长 才提前拉出来的 |
|
@Fangliding 改成 channel 倒是方便了多次 go,要不改成 make channel 1 然后起多个 go 吧(实现了 concurrency 的 TODO),不然哪次阻塞了就全堵了,还有 timeout 的 TODO 你也加一下(它可能也需要 customize & randomize?) 然后 TODO 就只剩下了 sleep 的 customize & randomize,还有 vision paddings,至于 ctx mitm 我想了下似乎不需要 |
|
大概以下四个 customize & randomize:
先 sleep 再 dial,不然一下子 dial 出去 n 个,容易失败 Close 可以实现,inactive 我想了下不用管,没人用这个出站的话那些 conn 会自动断开,只是不太利于半小时一次的连接观测 |
|
err我想过了 遇到就让worker死掉 用用户的下一次请求来唤醒 熵更高 还不会出现断网静置反复尝试的问题 就是逻辑会比较复杂 |
|
自定义 timeout 什么的主要是减少特征吧,不然现在这功能直接就能 release 了 for testpre 里面 go 就行了 |
|
为啥要自定义timeout 这和普通的连接是一个超时机制啊 下面的transport基本都设置为 Chrome行为了 |
|
改成 for testpre,加一下 sleep 吧 |
|
|
那别人是怎么写的呢 别人怎么就能解决 开口你就是骂 |
|
|
@Fangliding 不过我承认一点, 后面你改的那一版 拿走一个conn 就通知新建一个conn 是好的,这一点我没想到 |
|
|
他那个写法给了我一个启发,不是像现在这样 就等预连接,开始的时候也不用预热,而是用select 看能不能拿到预连接。没拿到预连接就用正常的连接,同时通知建立一条新的预连接,这个建立的预连接里面也不是for {} ,而是for range n{}, 这样可以避免连接失败还一直dial,同时也能根据网络流量动态开建立预连接的func |
|
我提个pr 看看 |
|
Looks good to me!(作为最简实现) |
testpre (outbound pre-connect) and testseed (outbound & inbound)
|
934beb2 给 VLESS 出入站加了
|
…bound & inbound) (#5270) https://t.me/projectXtls/1034 --------- Co-authored-by: 风扇滑翔翼 <[email protected]>
|
|
|
我捏的时候还专门写了个别的名 生怕不小心给外头盖了 |
|
|
|
能用 |
|
vision 和xhttp试过 |
|
vless自己加密+vision+reality 服务端入站也在settings-clients 里面加了"Testseed": [123,421,512,66],与客户端出站的 "Testseed": [] 不同的值。 都是正常的。 |
|
c123f16 取出来发现是两分钟之前的就直接扔;顺便把等待 200 毫秒改到了 for 的最后,因为我想了一下同时 dial 几个也很正常 Golang channel 应该是先准备好数据再伺机压进去吧,那这个写法就没问题;半小时一次的连接观测不会失败了但吃不到减延迟 |
大侠,预链接的配置是怎么样的?给个样例学习学习。谢谢!找了好几个链接,没有看到详细该如何配置。 |
先前预告:https://t.me/projectXtls/1034
“预连接”像连接复用、Switch 一样可以把实际延迟降至 0-RTT,但是只适合 Vision 这类有自由 padding 的协议,否则会是强特征
具体而言,它可以消除 VLESS Encryption TCP 握手的 1-RTT 延迟,也可以消除 REALITY/TLS 握手共 2-RTT 的延迟(TCP+TLS)
当前的配置方式是在 VLESS outbound 简化配置的 settings 中加
"testpre": 5,即可预留五个握手完毕的空闲连接以供使用下一版 Xray-core,即正式版本中需要在 Vision Seed 中配置,并且会加上一些无数据的 padding 往返以尽量消除“预连接”的特征
934beb2 给 VLESS 出入站加了
testseed,用户可以自行修改 XTLS Vision 的 900 500 900 256 这几个最关键的 padding 相关参数testpre和testseed都是暂时的配置项,还不完善,功能也有限,这个月内会出正式版的 Seed 并加到分享链接中Donation & NFTs
Collect a Project X NFT to support the development of Project X!
TNrDh5VSfwd4RPrwsohr6poyNTfFefNYanUQApeV-u2gm43aC1uP76xAC1m6vCylstaN1gpfBmre_5IyTH1JpqcziZZuqv3QQJhZGNGBVdCBrGgkL6cT4ABHQZ3yJZkBnLoqiKvb3f8eqUnX4iMPb6wdant5ZLGQELctcerceSGEfJnoCk6nnyRZm73wrwSgvZ2WmjYLng6R7sR67nq3x5NuXHzB5APG6vRinPZcsUv5ukWUY1tBGRSJiEJWtZa0xDc3Fe44F0f25D13CACb1C4896CD0D321df3146Ee