Browser Dialer | Project X (original) (raw)

背景

通过 uTLS,Xray 可以模拟主流浏览器的 TLS 握手指纹(具体参见 TLS 中 fingerprint 选项)。但是仍然不能保证在任意时刻 uTLS 模拟浏览器行为完全一致。

对此 浏览器转发(browser dialer)应运而生。用户在自己的浏览器中打开一个页面至 localhost:8080,这个页面利用原生 JS 充当 Xray 的网络栈,与代理服务端建立 TLS,HTTP 连接。

这个方法简洁的实现了真实的浏览器的 TLS 指纹、行为特征。最大程度抗检测与抗封锁。

不过目前的浏览器转发有以下缺点:

配置方法

  1. 准备一份 WebSocket 或 XHTTP 配置,注意 address 必须填域名,若需要指定 IP,请配置 DNS 或系统 hosts
  2. 使用环境变量启动 Xray XRAY_BROWSER_DIALER=127.0.0.1:8080。Windows 上命令为 set XRAY_BROWSER_DIALER=127.0.0.1:8080 Linux 上命令为 XRAY_BROWSER_DIALER=127.0.0.1:8080 ./xray -c config.json
  3. 确保浏览器直连(或者在路由中将服务端地址直接由 freedom 发出),打开页面 localhost:8080,还可以 F12ConsoleNetwork
  4. 浏览器会限制发出的连接数,所以建议开启 Mux.Cool

内部通信机制

WebSocket

v1.4.1+

根据浏览器的需求,对 early data 机制进行了如下调整:

XHTTP

v1.8.19+

XHTTP 本身支持 QUIC,如果想使用浏览器自己的 QUIC 网络栈,Chrome 可以在 chrome://flags 中设定。其它浏览器也有相关选项。

原理上说 tlsSettings 项会被忽略,使用哪个 HTTP 版本将完全由浏览器决定。

贡献者 (4)