一行代码,直连 V2EX

69 天前
 t00t00

TL;DR

仓库:kazutoiris/chromium-no-sni

测试地址:https://www.v2ex.com/cdn-cgi/trace

** DNS 污染自行处理,SmartDNS/DoH/DoT 都行。 **

(图片放不上就算了)

fl=...
h=www.v2ex.com
ip=...
ts=...
visit_scheme=https
uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
colo=LAX
sliver=010-tier1
http=http/1.1
loc=CN
tls=TLSv1.3
sni=plaintext
warp=off
gateway=off
rbi=off
kex=X25519

原理

对于 SNI 字段,RFC6066 有明确规定。 但是,部分软件和云服务对于 SNI 字段的解析存在一些“怪癖”:即使 不指定存在格式错误 时,仍能够正确对 TLS 加密流量进行分流。

下载

基于 Chromium 138 进行修改,只改动了一行代码

仓库中有 5 种变种,可以用来测试自家的云服务是否存在一些“怪癖”。 提供了 Windows 下 32 位、64 位、ARM 版本的预编译安装包/便携包。

仓库:kazutoiris/chromium-no-sni

BTW:记得 Star 和 Fork ,失效不补。

3293 次点击
所在节点    分享创造
28 条回复
mzl980425
69 天前
你在 V 站给一群能正常访问 V 站的人推广直连 V 站的工具?
moefishtang
69 天前
@mzl980425 梯子挂了上不了网的时候还是有需求的,多个备用方案也好
t00t00
69 天前
@mzl980425 思路打开,相同的原理还能够复活节点。
t00t00
69 天前
@moefishtang 当 **几乎所有** 需要的网站都能够直连的时候,也许成了备用方案的是梯子。
ixinshang
69 天前
如果想添加 github docker 这类,应该怎么修改呢
t00t00
69 天前
@ixinshang 开箱即用
arrow629
69 天前
你这个方案不如 https://github.com/SpaceTimee/Sheas-Cealer 其实 Chromium 启动时命令行参数就可以配置 SNI ,有人研究过 https://nicebowl.fun/24_8
fugu37
68 天前
V2 开了 ESNI 和 HTTP/3 ,支持任何一个都能直连 V 站
t00t00
68 天前
@arrow629 如果自己看过以前所有的方案,就会发现以前的都是基于同子域名伪造,不仅麻烦,还不能确保证书完整性。而这个方案巧妙就巧妙在这里:

1. 通杀所有 Cloudflare 、Cloudfront 、Akamai 的 CDN 托管。(这个适用范围有多大我就不说了)
2. 握手证书是权威的,不需要自签。(也就是说握手证书和外网访问的指纹、公钥都是一致的,并没有关闭证书校验)
t00t00
68 天前
@fugu37 很明显,ESNI 在阻断列表上; HTTP/3 基于 UDP ,即使不阻断也会被 QoS 。现在通过 HTTP1.1/2 就足够了,而且证书并没有被破坏。
dhb233
68 天前
没明白不提供 SNI 的情况下怎么做到安全校验的?如果 server 是独立 IP ,只使用固定证书,那是可以校验。如果不是这样,只是校验证书的合法性,那要么是信任部分 SNI ,要么还是会有被劫持的风险。信任部分 SNI 比较麻烦
t00t00
68 天前
@dhb233 部分软件和云服务对于 SNI 字段的解析存在一些“怪癖”,即使 **不指定** 或 **存在格式错误** 时,仍能够正确对 TLS 加密流量进行分流(也能够返回正确证书并完成握手)。所以这个“怪癖”相当有意思。
dhb233
68 天前
@t00t00 #12 那不就是独立 IP 的情况吗,如果 1.1.1.1 对应的服务器只有一个 v2ex.com 的时候,那不管是什么 SNI 都回 v2ex.com 的证书。如果 1.1.1.1 同时有多个域名,比如 v2ex.com v3ex.com v4ex.com 的情况下,服务器只能返回一个证书,你怎么能确定就是你要访问的域名?除非你访问 v4ex.com 的时候,也信任 v2ex.com 的证书
t00t00
68 天前
@dhb233 有没有可能,这句话有两个要点 **不指定** 或 **存在格式错误** 。

但是重点在后面:**存在格式错误**。
dhb233
68 天前
@t00t00 这说了和没说一样,另外 SNI 哪有什么格式要求?
t00t00
68 天前
@dhb233 怎么会没有规定?正文里 RFC6066 不是写了?
t00t00
68 天前
@dhb233 而且 PoC 都已经放出来了,可以自己试试。
Jesmora
68 天前
v2 不是一个境外 doh 就能解决了吗,何必搞这么麻烦
arrow629
68 天前
@t00t00 但你这个方案要对 chromium 打 patch ,这成本不低啊。 而且无 sni 的情况下,服务器只能返回默认证书,不一定是自己想要的。 我不大明白你是怎么做到的,而且据我所知 cloudflare 免费版分配的 ip 是一定要有 sni 的情况下才能返回正确的证书
t00t00
68 天前
@arrow629 就只改动一行代码,而且编译分发全部走的是 GitHub Action ,就算是后期需要随主线更新适配,成本相对来说还是比较低的。

而且,正文有两个要点 **不指定** 或 **存在格式错误** 。

但是重点在后面:**存在格式错误**。有些服务器认为错误就是错误,一遇到错误就不高兴罢工了;而有些服务器认为请求好不容易过来了,有错误给它修一下,当正常的来处理就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1147181

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX