9 分钟
SNI(Server Name Indication,服务器名称指示)是安全连接第一个数据包里的一个字段,浏览器在其中以明文写出自己要访问哪个域名。加密是在这之后才开始的,所以在保护尚未建立之前,网站名称对路径上的任何设备都是可见的。ECH(Encrypted Client Hello)就是把这个字段藏起来的机制。下面讲清楚:按 SNI 封锁是怎么运作的,ECH 究竟改变了什么,以及为什么打开它有时反而更糟。
因为发送 SNI 的那一刻,还没有东西可以用来加密它。TLS 握手以 ClientHello 消息开始,客户端在其中列出自己支持的算法,并指明域名。服务器要靠这个名称挑出正确的证书——一个 IP 地址上住着成千上万个站点,没有 SNI 它就不知道该交出谁的证书。共享密钥要到下一步才出现。
由此得出一个实际结论:页面地址、密码和请求内容确实被藏住了,域名则没有。这正是「打开 DoH 你就隐身了」这类教程略过的地方:私有 DNS 封住的是 DNS 查询,而 SNI 紧随其后、以明文送出。
设备读取 ClientHello,把域名与名单比对,在连接建立之前就将其掐断。这在技术上比其他所有手段都便宜:既不需要解密,也不需要行为分析,做一次字符串比对就够了。
| 方式 | 读取什么 | 靠什么绕开 | |---|---|---| | 按 IP 地址 | 目标地址 | 换地址、CDN | | 按 DNS | 名称查询 | DoH/DoT | | 按 SNI | ClientHello 里的域名 | ECH、隧道 | | 按协议特征 | 数据包形态 | 没有特征签名的协议 |
前几行的机制另有专文:什么是 DPI。
ECH 把整个 ClientHello 都加密,SNI 也在其中。留在明文里的只有一个外层名称,它由同一家服务商背后的所有站点共用,通常就是 CDN 自己的名字。观察者看到的是一条通向「云」的连接,却看不出请求的是托管在那里的哪一个站点。
客户端从 DNS 取得这把加密密钥:域名会发布一条 HTTPS 类型的记录,其中带有 ech 参数。由此产生两个前提,缺一 ECH 就根本不会启用:
按各浏览器公开的版本说明,Firefox 自 118 版、Chrome 自 117 版起提供支持,两者都发布于 2023 年秋天。
因为稀少的东西最显眼。只要使用 ECH 的连接占比还很小,它的存在本身就是一个可资识别的特征,过滤系统完全可以像当初对付域名那样对付它:不看里面是什么,凡是长得像 ECH 的一律掐断。
它的前身就遭遇过这种处理。ESNI 作为该机制的早期版本,据审查研究机构报告,2020 年在中国被整类切断。后来在其他国家也出现过关于 ECH 连接的类似报告。
由此得出一个不适合写进短建议里的结论:ECH 是正确的机制,但它解决的是对运营商的隐私问题,而不是绕过封锁的问题。在一个会把它掐断的网络里,浏览器上那个勾反而起了反作用。
在隧道里,SNI 的问题就不存在了:与网站的握手发生在出口服务器上,运营商只能看到一条通向某个地址的连接。但这时向外暴露的换成了另一个特征——隧道协议本身,而一切取决于它是否具有可识别的形态。
这里两条路分道扬镳。传统 VPN 藏住了域名,却因数据包形态暴露了自己。带 Reality 伪装的 VLESS 则是与一个真实的热门站点完成握手,并出示它的 SNI——它不是把名称藏起来,而是亮出一个可信的名称。在过滤系统看来,这就是一次普通用户访问普通网站,与域名名单的比对照常通过。机制见通俗讲清 Reality 和 VLESS;在严苛地区由此带来的结果见 BessyConnect 在伊朗、俄罗斯和中国。
用大白话说,SNI 是什么? 它是安全连接第一个数据包里的一个字段,浏览器在其中以明文说出自己要连的域名。服务器需要它来挑选正确的证书,而路径上的所有人都看得见,因为它是在加密出现之前发出的。
HTTPS 会隐藏网站名称吗? 不会。HTTPS 隐藏的是页面地址、查询参数和内容,域名本身则以明文写在 SNI 里送出。能藏住它的只有 ECH 或隧道。
ECH 和 ESNI 有什么区别? ESNI 只加密名称字段,是该机制的早期版本;ECH 加密整个 ClientHello,并取代了它。ESNI 已被视为过时。
打开 ECH 就足以绕过封锁吗? 不够。ECH 减少了运营商能看到的东西,但在过滤严苛的网络里,带 ECH 的连接可能被整类掐断——恰恰因为它们数量少、太显眼。
开着 VPN 时 SNI 还可见吗? 对你的运营商不可见:与网站的握手发生在出口服务器上。运营商只看到一条通向服务器地址的连接,然后依据隧道协议本身的特征来做判断。
Instagram 打不开或频繁卡顿?BessyConnect VPN 采用 VLESS+Reality 协议恢复访问,动态、快拍与 Reels 不再被封锁。 更多
BessyConnect 是专为 Telegram 打造的 VPN:当 Telegram 打不开时恢复聊天与通话,VLESS+Reality 协议在所有设备上绕过封锁与 DPI。 更多
BessyConnect 是 WhatsApp 用的 VPN,在语音和视频通话被封锁时恢复通话。VLESS + Reality 协议抵御 DPI,支持 iOS 与 Android。 更多