开启 3 天免费试用
注册即可免费体验全部高级功能。
*仅限新用户;每位用户只能获得一次试用。


SNI 过滤是一种网络控制方法:设备读取 TLS 连接开头携带的服务器名称,再把它与规则匹配。名称命中封锁项后,设备可以丢包、重置连接,或让握手无法完成,而无须解密之后的 HTTPS 正文。
完整 VPN 指南区分了路由元数据与受保护内容。本文只讨论 TLS server_name 信号、执行决定,以及加密客户端问候(ECH)带来的边界变化。
关键要点
- 多个 HTTPS 网站共用一个 IP 时,SNI 告诉服务器客户端想访问哪个主机名。
- 传统 SNI 位于可见的 TLS ClientHello 中,路径上的设备可以将它与规则表比较。
- DNS 与 TCP 可能成功,而连接仍在 TLS 握手阶段被重置或超时。
- ECH 可加密真实 ClientHello,但不会隐藏目的 IP,也不保证连接一定可达。
- 一次失败只能证明路径没有完成,不能单凭现象断言发生了 SNI 过滤。
TLS 只有在客户端和服务器商定安全参数之后,才会保护应用数据。在受保护的会话建立之前,客户端要先发送 ClientHello。RFC 6066 定义了 server_name 扩展,让客户端告诉服务器它打算使用哪个主机名。[1]当许多虚拟主机共享一个 IP 地址、服务器必须选择正确的证书和配置时,这是必需的。
在传统 TLS 1.2 与 TLS 1.3 握手中,能检查 ClientHello 的设备可以看到这个名称。它通常只是 example.com 这样的主机名,不是完整 URL;HTTPS 路径、查询参数、页面文字、密码,以及加密开始后发送的消息,都不在其中。
这个区别很重要。网络可以在不知道具体页面的情况下,作出主机名层面的政策决定。反过来,当无关的主机名共享同一个 CDN 边缘节点时,只看到 IP 地址可能无法确定目标。SNI 为政策引擎提供了一个更精确的名称来比对。
| 可观察项 | 过滤前通常可见吗 | 不能说明什么 |
|---|---|---|
| 目的 IP 与端口 | 是 | 共享主机上的准确名称 |
TLS server_name | 传统 ClientHello 中可见 | URL 路径或页面内容 |
| TLS 版本与扩展 | 是 | 已解密的应用消息 |
| HTTPS 请求路径 | 否 | 被动 SNI 过滤器无法据此判断 |
| 账户凭据 | 否,在 TLS 成功后传输 | 不能仅凭 SNI 获得 |
路径上的设备先识别 TLS ClientHello,解析出足以找到 server_name 扩展的内容,按其实现规则规范化主机名,再与允许名单、阻止名单或政策类别比较,然后放行握手或进行干扰。执行点可能位于企业网关、学校网络、接入运营商或其他受管路径上。
匹配可能是精确名称、域名后缀或类别。精确规则只处理一个名称;后缀规则还可能覆盖子域名;粗糙的子字符串规则容易误伤无关名称。列表过期也会遗漏新域名,或封锁已更换所有者的域名。
图例:1 是客户端 ClientHello;2 是提取可见服务器名称;3 是政策比较;4 是获准继续的 TLS 握手;5 是丢包、重置或其他阻断结果。连线表示决定流程,不代表 TLS 的每一个数据包。
过滤设备不必返回说明原因的网页。它可以静默丢弃 ClientHello 或之后的握手包;在所用传输支持时注入 TCP reset;也可以把请求导向政策响应。不同机制会在应用层表现出不同症状。
执行设备需要处在客户端与目的地之间,并在 ClientHello 到达服务器前观察它。本地网关、学校或企业网络、接入运营商都可能处于这个位置。安装组织证书、终止并重建 TLS 的企业检查系统权限更大,不能与只读明文 SNI 的被动匹配混为一谈。
服务器或反向代理也能按名称拒绝握手。不受支持的名称被服务端拒绝,属于端点虚拟主机或访问控制,不足以证明中间网络进行了过滤。数据包与服务器日志要一起确定决定发生在哪里。
DNS 过滤是另一层。DNS 决定名称怎样解析,SNI 过滤则评估之后 TLS 交换携带的名称。客户端可能拿到正确 IP,却在 ClientHello 阶段失败;加密 DNS 也可能保护解析查询,而传统 SNI 仍然可见。加密 DNS 边界解释了为何保护一类信号不等于隐藏整条连接。
常见表现包括浏览器提示安全连接失败、TCP 已建立但之后停住,或 ClientHello 发出不久便收到 reset。同一 IP 在换用另一个获准名称后可能正常,非 TLS 服务也可能不受影响。
这些现象都不是 SNI 过滤的唯一指纹。丢包、路由故障、TLS 版本不兼容、证书问题、服务器拒绝名称或端点封锁都可能相似。可靠排查要找出第一个不同阶段,而不是从“超时”直接命名原因。
在授权环境中,可以固定设备、软件版本、目的 IP 和时间,只更换网络;服务器日志可确认 ClientHello 是否抵达。抓包可以显示 TCP 是否建立及 reset 出现的位置,但其中含地址、时间和主机名,应按敏感记录处理。
当两个主机名共享一个 IP 时,仅针对地址的规则会同时影响两者。能识别名称的规则则可以放行一个 SNI 值、封锁另一个。这种差异是调查主机名政策的有力理由,但仍需排除服务器端虚拟主机行为的影响。
反过来也可能:网络封锁了共享 IP,导致其上每个主机名都失败,与 SNI 无关。这种方式更粗放,也可能造成更多附带损害。网站封锁概览对比了名称、地址、路由和应用层控制。
ECH 把真实服务器名称所在的内部 ClientHello 加密给能够解密它的服务。RFC 9849 定义当前 ECH 协议,RFC 9505 则说明 SNI 等标识暴露造成的隐私问题。[2][3] 只理解外层交换的被动中间设备不再直接获得真实内部名称。
ECH 不会让连接消失。目的 IP、传输类型、包尺寸、时间和外部 ClientHello 仍然可见。外层名称由 ECH 部署选定,可能指向一个由许多受保护源站共用的公开服务。网络可以封锁该地址、干扰 ECH 发现,或按外层信号执行规则,只是这类做法可能误伤许多无关网站。
部署还是一条链:客户端、DNS 发现、前端服务与源站路由都要兼容。若连接回退到非 ECH 握手,传统 SNI 可能再次暴露,具体取决于客户端政策和服务器可用性。因此“浏览器支持 ECH”不等于这一次连接已经保护内部名称。
当 ECH 成功协商时,直接按真实明文 SNI 进行过滤就不那么可行了,但这并没有消除所有基于名称的政策机制。端点在解密内部 ClientHello 后仍可执行政策,受管理设备也可能在流量离开主机之前就执行规则。
网络可能转而使用 IP 信誉、DNS 控制、端点政策、流量分类或粗粒度封锁。这些方法的准确度和附带成本各不相同。ECH 改变的是可观察面,并不承诺普遍可访问。
系统隧道正确建立后,本地接入网络通常看到的是外层 VPN 连接,而不是每个内部目的地的 TLS 握手。随后由 VPN 出口一侧建立或转发到目的地的连接,因此观察点移到了路径的另一段。浏览器扩展、分流、泄漏、未进入隧道的应用,或隧道尚未建立都会改变这个结论。
这只是观察边界,不是绕过所有政策的保证。网络仍可封锁 VPN 端点、限制其传输方式,或对外层连接进行分类,而无须读取内部目的地的 SNI。
想在自己的连接上验证这个观察位置,可以在 AethoVPN 中开启全局模式,让所有应用的流量进入隧道,并在加载要测试的目标之前先连接;此时本地网络看到的是外层 VPN 连接,而不是该网站的握手。关闭全局模式后,访问你所在地区网站的流量不经 AethoVPN,这有助于把本地网站的问题与被过滤的境外目标区分开。只在允许使用 VPN 的地方这样做,并记住它无法对出口一侧隐藏目的 IP,也不能让所有过滤系统消失。可用邮箱开始 3 天免费试用来做这项对照。
排查时先证明失败连接走了哪个接口,再区分外层隧道失败与隧道建立后的目的站失败。否则很容易把一次应用请求失败误写成“SNI 过滤封锁了 VPN”。
不是。DNS 把名称解析为地址信息;SNI 在 TLS 握手中告诉服务器应选择哪个虚拟主机,两者可以分别受控。
不能仅靠 SNI 做到。传统 SNI 暴露主机名,路径、查询、请求头与内容位于握手后的 TLS 保护中。
不能。中间设备、服务器、防火墙和故障路径都可能重置连接,需要结合时序、抓包与对照试验判断。
更换解析器可能解决 DNS 层故障,却不会删除之后传统 TLS ClientHello 中的明文 SNI。
不会。TLS 1.3 比早期版本加密了更多握手内容,但要保护真实 ClientHello 中的名称,还需要 ECH 和兼容的部署。
可能。封锁整个地址比名称匹配粗糙,也更容易影响该地址上的无关服务。
只有实际进入已建立隧道的流量才有这条边界。分流、泄漏、仅浏览器保护或隧道失败都会产生不同结果。
免责声明:本文仅供一般信息参考,不构成法律、技术或其他专业建议。我们不保证内容的准确性、完整性或时效性。
来源:
Sources checked 2026 年 9 月 12 日。
延伸阅读:
注册即可免费体验全部高级功能。
*仅限新用户;每位用户只能获得一次试用。