Skip to content

Conversation

Meo597
Copy link
Contributor

@Meo597 Meo597 commented Mar 26, 2025

如题,fallback时限速,不影响正常reality

比自己搭nginx过滤SNI的方案更好,更简单

仅demo因此速率写死,欢迎PR我再弄config


对于reality最佳实践虽然是偷同ASN,但考虑到实际情况,大多还是找个知名网站莽就完事了
即便target现在不是CF,可能以后也会用CF等CDN

自己搭nginx限SNI对小白来说不友好,因为需要探测出目标站的所有SNI并放行,哪天target证书更新可能又有新的域
我都嫌费劲,而且流量从nginx绕了一下,感觉怪怪的

此PR使能所有reality握手失败的分别针对上下行限速,允许brust
达成效果:调大after并严格限制rate和brust,使能勉强可开个正常网页应付探测,但想把小鸡拿来中转白嫖流量基本可杜绝

效果图
image

@RPRX
Copy link
Member

RPRX commented Mar 26, 2025

@Meo597 Meo597 force-pushed the feat-fallback-ratelimit branch from 4c13194 to 1b088ad Compare June 7, 2025 11:30
@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

我想了一下先设计得简单点吧,只给 fallback 下行限速即可,而且看描述 burst 和 after 有点重复,不过 burst 实际上是 capacity?

还有你 burst 拼成了 brust,这要是我没仔细看就很搞笑了

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

我当时考虑的是上行不限,香港优选节点可能被拿来跑直播之类的啥用途。
不过删就删随你,我个人觉得是放在那里,用户用不用看他自己

现在上行的删不删?

after的作用主要是为了防止探测,
因为考虑到如果用户想要突发小一点。那就搞得限速特征很明显,after此时能很好的解决问题
限速三参数是参考nginx做的

奶子的问题我现在改

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

我在想怎么设计,请保持在线,这样我就不用自己改代码了

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

我在想怎么设计,请保持在线,这样我就不用自己改代码了

ok

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

burst 你这个描述应该改成“突发倍数”更合适吧,且 0 应该默认相当于 1

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

还有,其实我想搞个范围机制,不过感觉又复杂了

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

burst本质就是个令牌桶的容量
rate是装令牌的速率

after是单独加的,消耗完了开始用桶算法

nginx是这么干的

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

看明白一些了,令牌数就是 byte

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

yes

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

下列六个 limit**** 为选填,可对回落的 REALITY 连接限速。默认为 0 即不启用。

原理:当传输了after减去burst字节后开启限速算法。
限速采用令牌桶算法,桶的容量是burst,每传输一个字节用掉一个token,初始burst是满的。
每秒以rate个token填充桶,直到容量满。

举例:after=10485760, burst=5242880, rate=1048576 代表传输10mb后开始限速为1mb/s,如果暂停传输,5秒后能突发到5mb/s,然后又恢复到1mb/s

建议:过大的afterburst将起不到限速效果,过小的rateburst则十分容易被探测。
应结合被偷网站的资源大小合理设置参数,如果不允许突发,可以把burst设为和rate一样。

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

可以保留上行限速,参数设计成这样:

"limitFallbackUpload": {
    "afterBytes": 0,
    "bytesPerSec": 0,
    "burstBytesPerSec": 0
}

"burstBytesPerSec" 小于 "bytesPerSec" 时自动等于它

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

话说 Nginx 没有 "afterSeconds" 这种东西吗

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

还有虽然单连接上行被限速了,但 XHTTP 上行分包可破此局

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

话说 Nginx 没有 "afterSeconds" 这种东西吗

我刚翻了下文档nginx的确没有按时间限速的
可以限ip并发连接数,然后每个连接限速

还有虽然单连接上行被限速了,但 XHTTP 上行分包可破此局

下个PR按IP限连接数?

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

总之先按我说的参数格式改一下吧

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

总之先按我说的参数格式改一下吧

ok

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

你这改的是个啥?完全没按我说的格式,README 也是不该动的地方都动了,还是放下个版本吧

@Meo597 Meo597 force-pushed the feat-fallback-ratelimit branch from caf5f23 to 377d9dc Compare June 8, 2025 09:21
@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

RatelimitedConn 的 Read() 有个问题,如果数据量大要等很久,或者直接卡死

应该改成 Write() 里有多少 token 就 write 多少数据

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

把返回值改成 net.Conn,然后对 BytesPerSec 是否为 0 的判断放这个函数里就行

这个,还有你的 conn 写成 con 了

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

README 的问题主要在于你的 IDE 把整个 README 给重构了,你只加新参数的部分就行,其它的别改

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

还剩个0,稍等

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

等下,我看了下,似乎改成 net.Conn 会使 splice 失效?

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

貌似不会,你改吧

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

可能本来搞成 CloseWriteConn 就会使 splice 失效了

@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

不晓得,golang我是散装的
我其他语言的经验是这玩意在缓冲区就不要读出来,所以我刚开始才拦截的read

@RPRX
Copy link
Member

RPRX commented Jun 8, 2025

我写了个函数试了一下,原代码把 underlying 先断言成 CloseWriteConn 仍能继续断言成 io.WriterTo

这个 PR 可以合了,然后我会再加一个 commit,你再更新 Xray-core 那里的 PR

@RPRX RPRX merged commit 4fd34dd into XTLS:main Jun 8, 2025
@Meo597
Copy link
Contributor Author

Meo597 commented Jun 8, 2025

ok,好了

不过core也要求代码写这么漂亮吗

RPRX pushed a commit to XTLS/Xray-core that referenced this pull request Jun 8, 2025
@Meo597 Meo597 deleted the feat-fallback-ratelimit branch June 8, 2025 14:23
maoxikun pushed a commit to maoxikun/Xray-core that referenced this pull request Aug 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants