VPN(虚拟专用网络)已经有 24 年的历史了。这个概念——使用加密安全隧道作为网络虚拟线路——是为与我们今天所知的互联网截然不同的互联网而创建的。随着互联网的成长和变化,VPN 用户和应用也在不断发展。在 2000 年代的互联网中,VPN 经历了一个尴尬的青春期,与其他广泛流行的抽象概念(如多用户操作系统)交互不良。在过去的十年里,互联网再次发生了变化,这个新的互联网为 VPN 提供了新的用途。一种全新的协议 WireGuard 的开发,为构建这些新的 VPN 提供了技术基础。
本文是对 VPN 的叙事史。所有的叙事都必然是概括性的,无法捕捉到每一个细微之处,但这是一次真诚的努力,旨在(批判性地)庆祝近期网络技术发展史上的某些成就,并捕捉软件工程师和网络管理员对 VPN 的情绪和态度。
在互联网出现之前,就有了网络:企业网络、大学网络、政府网络。这些网络由相对昂贵的计算机组成,拥有相对较少的受信任人员(至少以今天数十亿用户的互联网标准来看),由专职网络管理员管理,并且在地理上聚集在建筑物或校园内。
当一个组织分布在多个地点时,它会使用租用线路连接其网络。在 1970 年代,这是由电话网络提供的专用非交换铜线,用于运行专有协议,如 DECnet。3 租用数百或数千英里的物理线路并不便宜。随着电话网络变得更加复杂,租用线路演变为帧中继和 ATM(异步传输模式)网络的连接。这些网络将租用线路的成本从只有最大型企业才能负担得起的天文数字价格降低到只有更多大型公司才能负担得起的高昂价格。
安全模型是物理和合同式的。现场网络的安全由网络插孔的警卫和门禁卡来保障。理论上,租用线路也同样由电话公司保障安全。大型合同当然让人感到安全。
在整个 1980 年代和 1990 年代,互联网正在忙于建设,以各种名称和在不同的地方,由使用租用线路互连网络的组织和 ISP(互联网服务提供商)提供相对便宜的拨号接入到这些对等网络之一。许多分布在多个地点的小型组织无法负担租用线路,但可以负担得起将其每个站点连接到本地 ISP。
这引发了一个有趣的可能:小型组织能否通过互联网连接其站点的租用线路获得好处?VPN 由此诞生。
20 世纪 90 年代初的几个项目致力于 IP 层安全。第一个可以称为 VPN 的是 swIPe。6 标准草案将其日期定为 1993 年。在 swIPe 中,IP 数据报被封装用于加密,然后通过另一个网络传输,因此你可以声称这是一个 VPN。但它从未被广泛部署。
第一个明确的 VPN 是 PPTP(点对点隧道协议)。它创建于 1996 年,并于 1999 年在 RFC 2637 中标准化。5
恰如其分的是,PPTP 是当时一家生产小型企业使用的网络软件的公司:微软的产品。(尽管今天微软在收入方面是第二大云提供商,但在 20 世纪 90 年代,微软作为一家网络公司的声誉并不高。)
PPTP 以其方式工作。它玩了一个很棒的假装游戏,打包了 PPP(点对点协议),加密了流,并通过 TCP(传输控制协议)套接字运行它。作为虚拟 PPP,PPTP 能够封装几种网络协议,包括当时在小型组织中流行的 TCP/IP 替代方案:IPX(互联网包交换),Novell 的 NetWare 使用的协议。
PPTP 采用的加密算法——RC4(Rivest Cipher 4)和 DES(数据加密标准)——早已过时,但即使在这些算法被认为是足够的时候,PPTP 实现中的几个缺陷也造成了安全漏洞。这些漏洞将成为 VPN 挥之不去的痛点。
20 世纪 90 年代是忙碌的。在 1993 年的迷雾中(当年最热门的歌曲:“Achy Breaky Heart”),IETF(互联网工程任务组),一个刚刚在 TCP/IP 版本 4 标准化中取得胜利的开放标准组织,成立了一个 IPSec(IP 安全)委员会。IETF 的目标是将安全性带给 IP。这比创建我们今天所知的 VPN 具有更广泛的关注点,结果是一个可以做很多事情的标准。
IETF 于 1995 年发布了通用安全 IP 封装标准的第一个草案 RFC(征求意见稿)。工作原型在 PPTP 之后出现,规范于 1998 年在 RFC 24017 中发布,实现方案也在此后不久开始出现。
一个历史题外话:IPSec 的第一个草案规范早于 PPTP,而第一个原型晚于 PPTP,这引出了这两个项目之间是否存在任何联系的问题。似乎不太可能;相反,这似乎是历史同时发生的一个案例。事实上,在 PPTP 于 1996 年创建和 1999 年标准化之间,又开发了两个 VPN 协议。L2F(第二层转发)是思科在 1997 年开发的 PPP-over-IP 协议,并在 RFC 234111 中标准化。L2TP(第二层隧道协议)是另一个借鉴了 L2F 和 PPTP 的协议,尽管它直到后来才被标准化。更令人困惑的是,第一个使用术语VPN 的 RFC 是 RFC 2194,发布于 1997 年。1 此时 VPN 仅存在了一年,但此 RFC 提到了三种不同的协议:PPTP、L2F 和 L2TP(但不包括 IPSec)。
IPSec 可以做所有事情,并且它所做的每一件事都是可配置的。它有两种操作模式——隧道和传输——多种加密套件和多个独立的实现。其结果是构建网络的通用工具包,至今仍在使用。然而,像所有试图成为万能事物的东西一样,对于我们许多人来说,设置它(更重要的是,维护它)的前景令人望而生畏。
到 21 世纪初,在美国,几乎所有台式机和笔记本电脑都可以连接到互联网,尽管许多电脑由于政策、价格敏感性或缺乏足够的网络软件而仍然断开连接。(通常,这种软件的缺乏并不是指无法将本地网络路由到互联网,而是这样做需要专家进行大量人工干预,而专家供不应求。)
更多的人希望将办公室连接在一起;小型企业希望他们的员工能够从卫星办公室访问他们的 Exchange 服务器;早期的(当时很少见的)远程工作人员希望在家中或旅途中获得与在办公室相同的体验。VPN 必须变得更易于配置,并与用户友好的身份验证方案集成。
在另一项发展中,Web 浏览器开发了一种强大的流量加密方式:SSL(安全套接字层),后来是 TLS(传输层安全),它涉及将一组受信任的根证书分发给客户端,用于识别服务器。随着 Web 浏览器进入所有计算机,将这些证书重用于 VPN 提供了一种简便的方法来部署 VPN 网关,远程用户和卫星办公室可以以中心辐射型方式连接到这些网关。
一个基于这些原则构建的著名的开源 VPN 产品是 OpenVPN,它允许用户使用用户名/密码进行身份验证,并连接到使用 TLS 证书进行身份验证的 VPN 网关。该项目非常活跃,是当今许多企业和消费者 VPN 的基础。
随着越来越多的消费者活动转移到互联网上,依赖于限制消费者跨地域访问以最大化收入的传统企业开始引入锁定到地区的服务,通过查看用户的 IP 地址机械地强制执行。与此同时,一个新的定向广告行业发展起来,该行业通过使用用户的 IP 地址来确定兴趣和消费习惯来跟踪用户。
为了应对这些行业,消费者 VPN 产品被开发出来并变得相当流行。这些与企业 VPN 非常不同,企业 VPN 的目标是在两个受信任的端点之间移动数据包,而不会将其泄露给中间运营商。另一方面,消费者 VPN 将流量从消费者隐藏到 VPN 网关,然后作为消费者的代理将数据包发送到公共服务器。这隐藏了消费者的 IP 地址,混淆了这些新兴行业。
当谈论 VPN 时,这种新产品引入了一个有趣的术语挑战。技术是相同的——封装的 IP 隧道——但应用却截然不同。消费者 VPN 仅确保在消费者设备和 VPN 网关之间传输的流量的“隐私”;之后它再次公开。但是消费者 VPN 广泛且有用,因此该行业现在将这两种产品都称为 VPN。
VPN 在公共网络上加密流量方面做得不错,但传统模型的弱点之一是 IP 地址与授权身份不一致。这个问题有两种变体。
首先,单台计算机上的多个用户都共享一个 IP 地址。网络堆栈传统上被认为是操作系统内核提供的计算机范围的服务。因此,计算机上的任何用户都可以充当 VPN 隧道的 IP 地址。
其次,如果使用 VPN 网关将两个机器子网连接在一起,则无法将用于建立 VPN 的凭据映射到识别它路由的子网上的机器。你已经扩展了你的网络,使其包含 VPN 另一端的所有网络。如果你自己不管理这两个网络,那么你就创建了一个新的网络管理员。
这些局限性令人沮丧,因为这意味着传统的企业 VPN 不提供用户安全。在 VPN 两端管理凭据所做的所有努力都必须在更高的一层(VPN 上的用户之间)再次完成。
互联网的规模使第二代 VPN 的安全模型不堪重负。较小的组织使用 VPN 作为更便宜的租用线路,然后让他们的出差员工从任何酒店房间使用该租用线路,正面临着一个日益严重的问题:与大型组织相比,资源少得多的小型组织需要保护其网络的访问点,而攻击该访问点的成本越来越低。随着互联网用户从数百万增加到数十亿,企业 VPN 网关从数千个增加到(可能)数百万个。这些网关中的每一个都运行少数几种实现方案之一,使用通用的用户名,缺乏双因素身份验证,并且具有通用的非托管密码。随着目标数量的增长,编写用于查找现有目标中一部分漏洞的攻击变得更具成本效益。
日益增长的威胁与传统企业 VPN 的“蛋壳”安全模型(坚硬的外壳,柔软的黏糊糊的内部)相互作用不良:VPN 使你的网络安全,因此你可以对你传输的内容放松警惕。随着 VPN 因数量增长而成为更具成本效益的目标,企业 VPN 被攻破的频率也越来越高。
这导致一些安全专家呼吁拆除 VPN。10 人们提出了新的安全模型来取代 VPN。两种值得注意的方法是 BeyondCorp12,谷歌为保护其企业网络基础设施而实施的项目;以及一个正在发展中的行业理念,称为零信任网络。
BeyondCorp 和零信任在概念上有很多重叠之处,最好将其概括为计算机网络中历史悠久的端到端原则的应用。具体而言,当任何两个服务进行通信时,每个服务都必须相互验证与之对话的对象,并确保该服务被授权进行通信。
这种相互身份验证的概念与传统的企业 VPN“网关”或“集中器”(一种位于网络上并通过其路由所有流量的设备)不兼容,因为网关两侧的设备无法确定它们是否是它们所声称的那样。
企业 VPN 的第二时代即将结束。它的安全模型与现代互联网规模不兼容。然而,现在宣布 VPN 的死亡还为时过早。消费者 VPN 继续是有用的工具,虽然配置企业 VPN 的传统方式显然已经过时,但封装 IP 数据包的底层概念仍然有效。换句话说,企业应用需要重新思考,但该技术可能仍然有用途。
过去几年中令人兴奋的 VPN 发展是 WireGuard4,这是一种全新的 IP 封装实现,使用了最新的加密算法和原则。
WireGuard 是 Jason A. Donenfeld 的作品,它建立在加密原语 curve25519 和 chacha2013 之上。该协议在两个对等方之间创建隧道,每个对等方都使用公钥/私钥对而不是 VPN 的常见客户端-服务器架构(带有网关和集中器)来识别。它采用了 Noise 协议9 的握手技术和原则,使对手几乎不可能知道机器正在运行 WireGuard 端点。网络上没有要扫描的标准端口。
然而,使 WireGuard 具有革命性意义的不是它采用了最新的加密算法(许多人会认为这是从头开始开发产品的经典优点)。WireGuard 非常简单。它只有一个加密套件。协议没有版本协商阶段,多个实现方案在其中尝试就如何对话达成一致。它试图只做一件事:两个端点之间的安全加密隧道。
在一个网络软件试图成为万能的世界里,配置语言需要它们自己的独立标准委员会2,WireGuard 是一股清新的空气。它将加密隧道简化到你可以停止将其视为最终产品,而是将其视为可以围绕其设计软件和网络的基本抽象。
除了令人兴奋的新 VPN 协议外,计算机的使用方式也发生了根本性的转变,这为 VPN 创造了新的用途,并解决了旧的安全问题。
过去十年网络计算中最重大的技术转变是单用途设备的兴起。这主要是由计算方面的两个变化驱动的。
首先,交互式用户设备实际上是单用户操作系统,因为它们一次只允许一个用户。最极端的例子是 iOS——超过十亿个活跃设备——它甚至不支持单台设备上的多个用户帐户。但即使是更传统的台式机和笔记本电脑通常也只有一个登录用户。支持快速用户切换的较少见的设备可以配置为在切换时断开一个用户的 VPN 并以另一个用户的身份连接。带有终端的大型共享 Unix 小型计算机现在是有趣的业余爱好项目,而不是典型的企业设置。
第二个变化是使用虚拟机或容器技术(如 Linux 命名空间)对服务器进行近乎普遍的虚拟化。有几个力量推动了这种变化,并且有几种实现方式,但结果是相同的:服务器最终在多用户、多任务 Unix 操作系统上运行,实际上只有一个用途的进程和一个用户。
在这两种情况下,结果是操作系统的虚拟隧道 IP 地址现在与用于授权的服务身份相一致。在最终用户设备上,IP 地址是用户,而在数据中心,每个服务实例都有自己的 IP。借助 WireGuard 确保具有特定 IP 源的每个数据包都以加密方式链接到可验证的身份,我们可以开始安全地做出诸如“地址a 是用户u”之类的声明,这简化了软件开发。Tailscale8 是一个基于 WireGuard 构建的 VPN 标识网络的实现方案。
最终用户设备数量的增长和数据中心中新的虚拟化层已经微妙但深刻地改变了 VPN 抽象如何适应网络。在现代环境中稍加注意,VPN 传统上笨拙且无益的安全模型突然变得完美契合,并解决了问题而不是制造问题。这就是第三代 VPN 如此令人兴奋的原因:笨拙的 90 年代孩子,一个经常被认为笨拙和格格不入的千禧一代,突然让计算变得更容易、更好。
1. Aboba, B., et al. 1997. 漫游实现方案回顾. IETF 网络工作组; https://tools.ietf.org/html/rfc2194.
2. Ben-Kiki, O., Evans, C., döt Net, I. 2009. YAML 规范索引; https://yaml.org/spec/.
3. Digital Equipment Corporation. 1978. 数字设备公司:1957 年至今, 第 53 页. 计算机历史博物馆; https://www.computerhistory.org/pdp-1/8a9cb4c9f949fbb3e577016d174499ca/.
4. Finley, K. 2020. WireGuard 为 Linux 带来更快、更安全的 VPN. Wired (3 月 2 日); https://www.wired.com/story/wireguard-gives-linux-faster-secure-vpn/.
5. Hamzeh, K., et al. 1999. 点对点隧道协议. IETF 网络工作组; https://tools.ietf.org/html/rfc2637.
6. Ioannidis, J., Blaze, M. 1993. swIPe 安全协议. 互联网草案; https://www.mattblaze.org/papers/swipe.id.txt.
7. Kent, S., Atkinson, R. 1998. 互联网协议的安全架构. IETF 网络工作组; https://tools.ietf.org/html/rfc2401.
8. Pennarun, A. 2020. Tailscale 的工作原理. Tailscale; https://tailscale.com/blog/how-tailscale-works/.
9. Perrin, T. 2018. Noise 协议框架; http://noiseprotocol.org/noise.pdf.
10. Sullivan, P. 2019. VPN 的消亡——是时候说再见了. SC Magazine (3 月 21 日); https://www.scmagazine.com/home/opinion/the-death-of-the-vpn-its-time-to-say-goodbye/.
11. Valencia, A., et al. 1998. 思科第二层转发协议. IETF 网络工作组; https://tools.ietf.org/html/rfc2341.
12. Ward, R., Beyer, B. 2014. BeyondCorp:企业安全的新方法. ;login; 39(6), 6-11; https://research.google/pubs/pub43231/.
13. WireGuard; https://www.wireguard.com/protocol/.
David Crawshaw 是 Tailscale 的联合创始人兼首席技术官。在此之前,他曾参与各种软件项目,包括 Go 编程语言。
版权 © 2020 归所有者/作者所有。出版权已授权给 。
最初发表于 Queue 杂志第 18 卷,第 5 期—
在 数字图书馆 中评论本文
David Collier-Brown - 你对带宽一窍不通
当你的员工或客户说他们的互联网性能很差时,带宽可能不是问题。一旦他们拥有 50 到 100 Mbps 范围内的带宽,问题就是延迟,即 ISP 的路由器处理他们的流量所需的时间。如果你是一家 ISP,并且你的所有客户都讨厌你,请振作起来。这现在是一个可以解决的问题,这要归功于一群执着的人,他们追查到这个问题,解决了它,然后在家庭路由器中验证了他们的解决方案。
Geoffrey H. Cooper - 使用 FDO 和不受信任的安装程序模型进行设备载入
设备的自动载入是处理正在安装的越来越多的“边缘”和 IoT 设备的重要技术。设备的载入与大多数设备管理功能不同,因为设备的信任从工厂和供应链转移到目标应用程序。为了加快自动载入过程,供应链中的信任关系必须在设备中正式化,以允许自动化过渡。
Brian Eaton, Jeff Stewart, Jon Tedesco, N. Cihan Tas - 通过关键路径跟踪进行分布式延迟分析
低延迟是许多 Google 应用程序(如搜索)的重要功能,延迟分析工具在维持大规模低延迟方面发挥着关键作用。对于包括功能和数据不断演变的服务在内的复杂分布式系统,将总体延迟保持在最低限度是一项具有挑战性的任务。在大型真实世界的分布式系统中,现有的工具(如 RPC 遥测、CPU 性能分析和分布式跟踪)对于理解整个系统的子组件很有价值,但不足以在实践中执行端到端延迟分析。
Yonatan Sompolinsky, Aviv Zohar - 比特币的潜在激励机制
激励机制对于比特币协议的安全至关重要,并有效地驱动其日常运行。矿工们不遗余力地最大化他们的收入,并且经常找到创造性的方法来实现这一目标,这些方法有时与协议相悖。加密货币协议应建立在更强大的激励机制基础上。还有许多领域有待改进,从挖矿奖励的基础知识及其如何与共识机制交互,到矿池中的奖励,一直到交易费用市场本身。