Move Browser Dialer to sockopt.dialerProxy browser:// URL usage, with UUID path validation, startup-time conflict checks, instance-lifecycle listen/serve control, XHTTP mode constraints, and static initialization simplification#6016
Conversation
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/56665ec5-84ea-4bc3-a812-2e699e0e880d Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/56665ec5-84ea-4bc3-a812-2e699e0e880d Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
|
原始提示
|
…adata Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/e3502f01-e171-4e6f-9ae7-dc29b6682951 Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
已按要求处理:去掉了环境变量回退与 |
|
@copilot 环境变量提示迁移,使用 errors.PrintRemoved 那啥 |
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/d30a26b2-60aa-4f86-b2ed-3c6997652bfb Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
已加上环境变量迁移/移除提示:检测到 |
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
|
我想了一下这里的设计,当监听同一个端口时,按 path/query 来区分不同的浏览器的话其实也行 @copilot 你改一下改成 path 区分吧,未提供 csrfToken 时就返回 page,同时也防止了其它软件探测出 Browser Dialer 的存在 |
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/b6b47cc0-5a64-49d5-9447-22c9c202c95d Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
已改成 path 区分:WebSocket CSRF 校验从 query |
|
@copilot 我的意思是比如:
|
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/d3d25e7b-e62f-49e0-90be-0ca7f974e115 Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
已按这 4 点实现: |
sockopt (per-outbound) and wire transport usagesockopt (per-outbound) and wire path-scoped transport usage
|
|
|
@Fangliding 我没理解你说的那个是啥问题,这个 xray.go Build() 不应该只会被执行一次吗?没有多 instance |
|
你指的是这里 |
|
不是 解析config的时候就部署这些服务很dirty的 你强行让它解析config的时候拉起来结果就是用它当lib的时候关了没法回收 api加的出站不会过这个 那个streamsettings是没状态的 这个矛盾没法调和 要么注册成一个 出入站一样的feature 然后走我之前说的出站用一个小选项选择 |
是, 问题点也主要在这里: 所以核心矛盾不是 |
|
那就加 Xray instance 控制那里 start 并实现 stop @copilot |
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/b8c640ab-f93c-4609-8e34-a8e14e2be9e7 Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/b8c640ab-f93c-4609-8e34-a8e14e2be9e7 Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/b8c640ab-f93c-4609-8e34-a8e14e2be9e7 Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
按这个改了:配置构建阶段现在只做 browser dialer URL 的收集/校验,listener start 挪到 已验证: |
sockopt.dialerProxy browser:// URL usage, with UUID path validation, startup-time conflict checks, explicit post-collection listen/serve startup, XHTTP mode constraints, and static initialization simplificationsockopt.dialerProxy browser:// URL usage, with UUID path validation, startup-time conflict checks, instance-lifecycle listen/serve control, XHTTP mode constraints, and static initialization simplification
|
为了 "简单些、不加锁" 那最好的办法还是之前那样单例 开几个例除了能控制某个出站稳定使用某个不同的浏览器这个很边缘的用法就没啥用了 绕过连接数限制这点之前已经说了不存在 |
|
不同出站使用不同的浏览器是有必要的,比如上下行分离可以上下行用不同的浏览器,甚至两台设备的浏览器,这样更彻底 并且 listen 的需求可能也不同,比如有的想 listen 10.x 啥的,就需要两个端口,总之现在这样能 cover 最多需求
|
|
前段时间chrome的大手已经默认禁止网页再fetch到本地IP了 还导致了部分人的fake dns炸掉 |
|
@copilot 你自己给自己打分 这样是否dirty 有没有打破封装 和其他模块(比如API添加出站)的协作性是什么情况 |
|
总之现在功能是完善了,如果按之前的环境变量开单例大概是 sockopt 只指定路径,重新弄 instance 的话需要 reload 但是这个 PR 还有另一点是推动 Browser Dialer 普及,多填个 dialerProxy 就行了, |
|
自评:比之前在
所以结论就是:比 parse-time side effect 版好很多,但如果按最严格标准看,仍然不是最干净的最终形态。 |
|
它不好用的原因不是env 是需要单开一个浏览器网页还得让它绕过代理系统还得一直活着不让他被回收掉以及不能指定IP必须指定可以正确解析的域名 |
這個是受限於browser dialer本身最開始的設計吧 |
按这么说的话就是还是要改成前所未有的顶级模块,这个模块能自动改 DNS IP,并且具有在 HTTP/Socks/Tunnel/TUN 入站自动识别请求并 direct 出去的能力,就像 TUN 的 autoOutboundsInterface, @fish4terrisa-MSDSM 感觉可能最终会设计成那样,我的建议还是先别等这个 PR 了,先按 v26.4.25 的代码给 v2rayNG 加上 |
行吧 我這幾天看下, 主要是如果使用v26.4.25, v2rayNG用的AndroidLibXrayLite那邊還要改,不單是v2rayNG的部分, 而且這邊改完後還得revert AndroidLibXrayLite的改動, 畢竟等改完browserDialer的配置肯定在配置文件裡,不會再是單獨調用一個Reload函數讓它讀環境變量 |
|
|
This PR moves Browser Dialer usage to
sockopt.dialerProxywithbrowser://host:port/uuidURLs and removes the earlier parse-time listener startup side effects.What changed
dialerProxynow usesbrowser://host:port/uuidauto/packet-up, and REALITY rejectedcore.Instance.Start()core.Instance.Close()Scope
The change keeps the simplified non-dynamic model, but ties listener lifetime to the actual Xray instance instead of starting listeners while only parsing/building config.