深度解析
VPN 协议由谁提供,又是怎样暴露身份的

在 Windows 设置中添加 VPN 连接时,系统会让您选择类型:PPTP、L2TP/IPsec、SSTP 或 IKEv2。这些是操作系统自带的 VPN 协议,无需额外软件。VPN 服务的应用通常用的是另一些协议。协议是系统自带还是由应用提供,决定了由谁来设置它、它能通过哪些网络,以及它会怎样被识别出来。
协议不等于加密算法
加密算法负责把数据变成没有密钥就无法使用的字节。最常见的是 AES 或 ChaCha20,也就是通过 HTTPS 保护普通网站的那些算法。其余的一切都由协议负责:双方如何证明自己的身份(用密码、证书还是密钥),如何商定本次会话的密钥,数据包走哪个端口,以及未加密的包头里写着什么。
所以,加密算法相同的两个协议,在网络上的表现可能截然不同。差别通常不在算法本身,而在它周围的一切。加密的请求如何到达网站,请看我们介绍什么是 VPN 的文章。
系统内置的协议
内置协议不需要安装任何东西。服务器地址、登录信息和密钥都直接填进系统设置,所以公司常用这类连接,由管理员分发 VPN 配置文件。每个系统支持的协议各不相同。
| 系统 | 无需应用即可添加的协议 | 备注 |
|---|---|---|
| Windows | PPTP、L2TP/IPsec、SSTP、IKEv2 | 在自动模式下,Windows 会从较安全的协议开始逐个尝试 |
| iPhone、iPad 和 Mac | L2TP、IPsec、IKEv2 | Apple 于 2016 年从 iOS 10 和 macOS Sierra 起移除了 PPTP |
| Android 12 或更高版本 | 仅限几种 IKEv2/IPsec 变体 | 在系统设置中已无法再创建 PPTP 或 L2TP 连接 |
强密码也救不了的 PPTP
PPTP 于 1999 年作为 RFC 2637 发布,它的安全性依赖 MS-CHAPv2 认证。2012 年,这种认证方式在 DEF CON 大会上被攻破。要破解一次截获的认证数据,只需找出一个 56 位的 DES 密钥,密码再长、再复杂也没有区别。研究人员的建议很直接:把 PPTP 流量当作未加密的流量。四年后,Apple 从自家系统中移除了 PPTP。Windows 仍保留着客户端,不过微软在 2024 年把 PPTP 列入了 Windows Server 的弃用功能清单。
L2TP/IPsec 与 NAT 的麻烦
L2TP(RFC 2661,同样发布于 1999 年)只负责建立隧道,加密由 IPsec 替它完成,所以在设置里它们总是成对出现(RFC 3193,2001 年)。Windows 提供这一组合的两个版本,一个使用证书,一个使用预共享密钥。它最棘手的问题是 NAT,也就是让多台设备共用一个地址的路由器。这时 IPsec 数据包必须封装进 UDP,走 4500 端口。如果服务器本身位于 NAT 之后,Windows 默认不会建立连接,微软支持文章 926179 给出的办法是修改注册表来允许这种连接。
只属于 Windows 的 SSTP
SSTP 随 Windows Vista SP1 和 Windows Server 2008 推出。它把 PPP(PPTP 所基于的那个链路层协议)放在 TCP 443 端口的 HTTPS 中传输。Apple 的系统和 Android 都没有内置 SSTP 客户端。它也是基于 TCP 的隧道,在丢包的线路上会变慢(原因见下文)。
所有系统都有的 IKEv2
在内置协议中,只有 IKEv2 出现在表中的每一个系统上。它由 RFC 7296(2014 年)定义。服务器通常用证书证明自己的身份,您则用证书登录,或者通过 EAP 用用户名和密码登录。协商从 UDP 500 端口开始,如果双方在途中检测到 NAT,就会切换到 4500 端口。MOBIKE 扩展(RFC 4555)让会话在设备 IP 地址变化后无需重新登录也能继续。代价是,没有 UDP,IKEv2 就完全无法工作。
需要应用的协议
其余的协议,系统本身并不支持,需要由单独的程序提供,比如 OpenVPN 客户端、VPN 服务的应用或路由器固件。好处是,这些协议可以随着程序的每次更新而变化,不必等系统出新版本。
OpenVPN
OpenVPN 是 James Yonan 开发的开源软件,2001 年首次发布。与服务器的连接通常写在一个 .ovpn 文件里,包括地址、端口和密钥,把它导入电脑、手机或路由器上的客户端即可。密钥通过 TLS 协商,数据通过 UDP 或 TCP 传输,标准端口是 1194。在 2022 年 USENIX Security 会议发表的一篇论文中,研究人员与一家拥有百万用户的网络运营商合作,识别出了 85% 以上的 OpenVPN 流量,几乎没有误报。他们只需要字节特征、数据包大小和服务器的响应,就这样在标榜“混淆”的 41 种配置中抓出了 34 种。
WireGuard
WireGuard 是一种现代协议,设计目标是成为比 IPsec 和 OpenVPN 更快、更简单的替代方案。密钥交换使用 Curve25519,数据用 ChaCha20 和 Poly1305 保护,数据包只走 UDP。WireGuard 从 5.6 版起成为 Linux 内核的一部分,该版本于 2020 年春季发布。OpenWrt 和 KeeneticOS(3.3 或更高版本)等路由器固件都支持它,Windows、macOS、iOS 和 Android 也都有官方应用。每次会话的第一条消息类型和大小总是相同的,所以在网络上很容易被发现。在俄罗斯,WireGuard 自 2023 年起遭到封锁。那年 8 月,它和 OpenVPN 一起在移动网络上连不上了大约一天,9 月底又开始了第二波封锁。
Shadowsocks
Shadowsocks 出现于 2012 年,是 SOCKS 代理的加密替代品(代理和 VPN 有什么不同,我们在 VPN 和代理的区别一文中讲过)。它几乎不需要设置,只要地址、端口、密码和加密算法。它的数据流里没有任何未加密的包头,而在过滤系统看来,这与其说是伪装,不如说是破绽。普通流量里几乎总有一些可读的文本,所以一串纯随机的字节反而显眼。2023 年 USENIX Security 的一篇论文描述了中国的一套过滤系统:从 2021 年 11 月起,它按取值为 1 的比特所占比例和可打印字符的比例筛除这类数据流,Shadowsocks 也在其列。
VLESS + REALITY
VLESS 协议于 2020 年 8 月随 V2Ray 4.27.0 推出。它用 UUID(一长串字母和数字)来识别每个用户,在典型配置中它自身的加密是关闭的,由外层的 TLS 保护数据。REALITY 决定这一外层看起来是什么样子。服务器持有一对 X25519 密钥,客户端知道公钥和一个名为 shortId 的短 ID。服务器的设置里指定了别人的一个真实网站,TLS 握手看起来就像访问那个网站。如果某个连接没通过密钥校验,服务器会把它转交给那个网站,由网站自己应答。
XHTTP
XHTTP 是 Xray 项目的一种数据传输方式,2024 年时叫作 SplitHTTP。从外部看,它就像与网站之间普通的 HTTP 请求和响应,而大多数 HTTP 中间设备和许多 CDN 都会放行这类流量。上传和下载甚至可以走不同的路径,比如一路经过 CDN,另一路直连。
Hysteria2
Hysteria2 基于 UDP,运行在自己改造的 QUIC 之上。从外部看,它像是 HTTP/3,也就是网站加载所用协议的最新版本。客户端用一个 HTTP/3 请求登录,密码放在请求头里。如果密码不对,服务器理应表现得像普通网站服务器,或者返回某个真实网站的响应,这样就看不出这是代理。开发者设计 Hysteria2 时针对的是丢包严重的线路,但在 UDP 被彻底封锁的地方,它和 IKEv2 一样过不去。
什么会妨碍连接
网络只放行网页流量
酒店、会议场馆和一些办公室只允许网页流量出去,也就是 TCP 80 和 443 端口。使用 UDP 500 和 4500 端口的 IKEv2 和 L2TP/IPsec 在那里连不上,使用标准端口 1194 的 OpenVPN 也不行。能通过的是 SSTP、设为 TCP 443 的 OpenVPN,以及使用同一端口、看起来像 HTTPS 的协议。微软设计 SSTP,正是为了这类网络。
协议因特征被识别
为办公网络设计的协议使用固定端口,建立会话的方式也很好认。运营商的深度包检测(DPI)设备会实时检查这些特征,可以只封掉一个协议,而不影响互联网的其余部分。正如那篇 OpenVPN 论文所示,这样做根本不需要解密。所以较新的协议都尽量让自己看起来像访问知名网站的 HTTPS,或者像 HTTP/3,而 Shadowsocks 如上文所述,恰恰因为随机得太均匀而被抓住。
丢包与 TCP
TCP 确保每个数据包都能送达,并重发丢失的数据包。当隧道本身跑在 TCP 上时(比如 SSTP 和 TCP 模式的 OpenVPN),它承载的其他 TCP 连接也有各自的重传。在丢包的线路上,两层都会等待并重发同样的数据,延迟就会阶梯式上升。所以传统隧道最好用 UDP,TCP 留给封锁 UDP 的网络。
较新的协议传输的是数据流,而不是数据包。设备上的应用会自己接管各个程序的 TCP 连接,只把其中的内容送进隧道,因此不会出现双重重传。不过,游戏和通话的 UDP 流量如果放在 VLESS + REALITY 这类基于 TCP 的传输里,仍然要等丢失的那一块重新送达。在这样的线路上,Hysteria2 这类基于 UDP 的传输会更顺畅。
Bebra 用的是哪些协议
Bebra 通过 VLESS + REALITY、XHTTP、Hysteria2 和 Shadowsocks 连接。应用会自动选择协议和线路,某条线路失效时会换到另一条,所以您不必自己选协议。技术页面上有更多介绍。
Keenetic、OpenWrt 和 MikroTik 路由器可以安装直接在路由器上运行的 Bebra 应用。只支持内置协议的型号,可以使用本站个人中心“路由器”部分的“其他路由器”标签页,那里提供 OpenVPN(UDP 和 TCP)和 PPTP。两者之中,只有 OpenVPN 能可靠地加密您的数据。
每个套餐都包含全部 187 个国家。通过 10 ₽ 的试用,可以看看连接在您自己的网络上表现如何。3 天完整访问权限,之后每月 500 ₽。订阅会自动续订。
常见问题
协议和加密算法是一回事吗?
不是。AES 或 ChaCha20 这样的加密算法让数据在没有密钥时无法读取。协议则规定它周围的一切:双方如何相互识别、如何商定密钥、数据包走哪个端口以及看起来是什么样子。所以使用同一种加密算法的协议,在网络上的表现可能截然不同。
为什么在家能用的 VPN 到了酒店就连不上?
访客网络常常只放行网页流量,即 TCP 80 和 443 端口。使用 UDP 500 和 4500 端口的 IKEv2 和 L2TP/IPsec,以及使用 1194 端口的 OpenVPN,在那里都过不去。SSTP、走 TCP 443 的 OpenVPN 以及看起来像 HTTPS 的协议通常可以。
为什么在 Android 上无法添加 PPTP 或 L2TP?
从 Android 12 开始,系统设置只允许创建 IKEv2/IPsec 连接。要使用 OpenVPN 和其他协议,需要单独的应用。
用长密码能让 PPTP 变得安全吗?
不能。PPTP 的弱点在于 MS-CHAPv2 认证本身。截获的认证数据可以通过穷举所有 56 位密钥来破解,密码强度并不影响所需的时间。最好把 PPTP 流量当作别人可以读取的流量。




