V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
t00t00
V2EX  ›  分享创造

一行代码,直连 V2EX

  •  
  •   t00t00 · 40 天前 · 3183 次点击
    这是一个创建于 40 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 ,失效不补。

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

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

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

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

    但是重点在后面:**存在格式错误**。有些服务器认为错误就是错误,一遇到错误就不高兴罢工了;而有些服务器认为请求好不容易过来了,有错误给它修一下,当正常的来处理就好了。
    t00t00
        21
    t00t00  
    OP
       39 天前
    @Jesmora 有没有一种可能,不止 v2 ?
    pagxir
        22
    pagxir  
       39 天前 via Android
    域名前置那一套?
    t00t00
        23
    t00t00  
    OP
       39 天前
    @pagxir 域名前置需要云控规则,甚至得把证书校验关了。这些怎么说一行代码也做不到吧。
    realpg
        24
    realpg  
    PRO
       36 天前
    在 sni 的域名后面发送额外的点?
    tdb11039gg
        25
    tdb11039gg  
       36 天前
    没懂,是不用梯子就能访问吗,试了访问不了呢
    t00t00
        26
    t00t00  
    OP
       35 天前   ❤️ 1
    @realpg bingo
    t00t00
        27
    t00t00  
    OP
       35 天前
    @tdb11039gg DNS 污染需要自己处理,比如使用内置的 DoH 功能进行解析。可用的干净 DoH 服务器现在有挺多的。
    realpg
        28
    realpg  
    PRO
       35 天前
    @t00t00 #26
    这思路真棒!
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4689 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:03 · PVG 12:03 · LAX 21:03 · JFK 00:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.