为什么不应该使用WireGuard

最近,WireGuard引起了很多关注,实际上-这是VPN中的新“明星”。但是他看起来和他一样好吗?我想讨论一些观察结果并考虑WireGuard的实现,以解释为什么它不能替代IPsec或OpenVPN。

在本文中,我想揭穿[围绕WireGuard]的一些神话。是的,它需要很长时间才能阅读,因此,如果您还没有泡一杯茶或咖啡,那么该是时候了。我还要感谢彼得校对了我的混乱思想。

我并没有设定让WireGuard开发人员声名狼藉,贬低他们的努力或想法的目的。他们的产品是可行的产品,但我个人认为与实际产品完全不同,它是IPsec和OpenVPN的替代产品,实际上现在根本不存在。

值得注意的是,我想补充说,对WireGuard进行这种定位的责任在于谈论它的媒体,而不是项目本身或其创建者。

最近关于Linux内核的话题还没有太多的好消息。因此,我们被告知了处理器的巨大漏洞,这些漏洞已通过软件进行了升级,Linus Torvalds谈到了它过于粗鲁和枯燥,开发人员的实用语言。计划程序或网络堆栈零级别-对于光泽杂志来说主题也不太清楚。然后出现WireGuard。

一切听起来都很棒:一项令人兴奋的新技术。

但是,让我们更仔细地看着她。

WireGuard技术文档


本文基于Jason Donenfeld编写官方WireGuard文档他在那里解释了Linux内核中[WireGuard]的概念,目的和技术实现。

第一句话是:

WireGuard [...] IPsec , / TLS, OpenVPN, , [].

当然,所有新技术的主要优点是它们的简单性(与以前的技术相比)。但是VPN也必须高效且安全

那么,下一步是什么?

如果您说(从VPN)不需要此功能,则可以结束阅读。但是,我会注意到,此类任务是在任何其他隧道技术之前提出的。

以上引文中最有趣的是“大多数情况下”,这当然是新闻界所忽略的。在这里,由于这种疏忽造成的混乱,最终导致了我们的失败-本文中。



WireGuard是否将替换站点之间的[IPsec] VPN连接?


没有。思科,Juniper等大型厂商几乎没有机会为其产品购买WireGuard。除非有很大的需求,否则他们不会在旅途中“跳火车”。稍后,我将讨论为什么他们可能无法在板上安装WireGuard产品的一些原因。

WireGuard会将我的RoadWarrior从笔记本电脑转移到数据中心吗?


没有。 WireGuard目前尚未实现大量重要功能,因此它可以执行以下操作。例如,它不能在隧道的服务器端使用动态IP地址,这本身就破坏了产品使用类似情况的整个情况。

IPFire通常用于低成本Internet通道,例如DSL或电缆连接。对于不需要快速光纤的中小型企业,这很有意义。[译者注:别忘了在通讯方面,俄罗斯和一些独联体国家远远领先于欧美,因为我们是在很晚以后才开始建立我们的网络,并且随着以太网和光纤网络作为标准的出现,我们的重建工作变得更加容易。在相同的欧盟国家或美国,以3-5 Mbps的速度进行xDSL宽带访问仍然是普遍的标准,按照我们的标准,光纤连接要花一些不切实际的钱。因此,本文的作者说的是DSL或电缆连接是正常的,而不是古老的过去。]但是,DSL,电缆,LTE(和其他无线访问方法)具有动态IP地址。当然,有时它们并不经常更改,但仍会更改。

有一个子项目称为“ wg-dynamic”用户空间守护程序增加了克服此缺点的功能。上述用户场景的一个巨大问题是动态IPv6寻址加剧了这种情况。

从分发者的角度来看,所有这些看起来也不是很好。设计目标之一是保持协议简单和整洁。

不幸的是,所有这些实际上变得太简单和原始,因此我们必须使用其他软件才能使整个设计在现实条件下可行。

WireGuard易于使用吗?


还没。我并不是说WireGuard永远不是在两个点之间转发隧道的好选择,但到目前为止,它只是该产品应成为的Alpha版本。

但是那他到底在做什么呢? IPsec真的难工作得多吗?

明显不是。 IPsec提供商已经考虑了这一点,并且正在交付其产品以及IPFire等接口。

要通过IPsec配置VPN隧道,您需要输入以下五组数据:您自己的公用IP地址,接收方的公用IP地址,要通过此VPN连接公开并预先共享的子网键。因此,只需几分钟即可配置VPN,并且该VPN与任何供应商都兼容。

不幸的是,这个故事有一些例外。每个试图通过IPsec将VPN隧道转发到OpenBSD上的计算机的人都知道我在说什么。有两个更痛苦的例子,但是实际上,使用IPsec的良好实践要多得多。

关于协议复杂度


最终用户不必担心协议的复杂性。

如果我们生活在一个用户真正关心的世界中,那么我们早就摆脱了十多年前创建的SIP,H.323,FTP和其他协议,这些协议不能与NAT很好地兼容。

IPsec比WireGuard复杂的原因有很多:它做的更多。例如,使用登录名/密码或带有EAP的SIM卡进行用户身份验证。它具有添加新的加密原语的扩展功能

但是WireGuard没有。

这意味着WireGuard会在某个时刻中断,因为其中一种加密原语将减弱或完全受损。技术文档的作者这样说:

值得注意的是,WireGuard在密码上是自信的。他故意缺乏密码和协议的灵活性。如果在基础图元中发现严重漏洞,则需要更新所有端点。从持续的SLL / TLS漏洞流中可以看到,加密灵活性现在已大大提高。

最后一句话是绝对正确的。

就使用哪种加密达成共识,使IKE和TLS 协议变得更加复杂。太复杂?是的,漏洞在TLS / SSL中非常普遍,没有其他替代方法。

关于忽略实际问题


想象一下,您有一个VPN服务器,在世界各地有200个战斗客户端。这是一个非常标准的用例。如果必须更改加密,则需要将更新交付给这些便携式计算机,智能手机等上的WireGuard的所有副本。提供在同一时间。这实际上是不可能的。尝试执行此操作的管理员将花费数月时间来部署必要的配置,而中型公司实际上将花费数年时间来主持此类活动。

IPsec和OpenVPN提供密码协商。因此,一段时间后启用新加密,旧加密将起作用。因此,当前客户将能够升级到新版本。推出更新后,您只需关闭易受攻击的加密即可。就这样!做完了!你太美了!客户甚至不会注意到它。

对于大型部署,这实际上是非常常见的情况,甚至OpenVPN也存在一些困难。向后兼容性很重要,尽管使用了较弱的加密,但对于许多情况而言,这不会导致业务关闭。因为由于无法胜任工作,将导致数百名客户瘫痪。

WireGuard团队使他们的协议更简单,但完全不适合无法持续控制其隧道两个对等节点的人们。以我的经验,这是最常见的情况。



密码学!


但是,WireGuard使用的这种有趣的新加密是什么?

WireGuard使用Curve25519进行密钥交换,使用ChaCha20进行加密,并使用Poly1305进行数据身份验证。它还与SipHash一起用于哈希键,而BLAKE2则用于哈希。

ChaCha20-Poly1305已针对IPsec和OpenVPN(通过TLS)进行了标准化。

显然,Daniel Bernstein的开发经常使用。 BLAKE2是SHA-3决赛选手BLAKE的继任者,由于与SHA-2相似,他未能获胜。如果SHA-2被黑客入侵,那么BLAKE很有可能会受到威胁。

IPsec和OpenVPN由于其设计而不需要SipHash。因此,目前唯一不能与他们一起使用的是BLAKE2,并且直到将其标准化为止。这不是一个很大的缺点,因为VPN使用HMAC来创建完整性,即使与MD5结合使用,这也被认为是一个强大的解决方案。

因此,我得出的结论是,所有VPN都使用几乎相同的加密工具集。因此,在加密或数据完整性方面,WireGuard的安全性不亚于任何其他相关产品。

但是,根据项目的官方文档,即使这不是最重要的注意事项。毕竟,最主要的是速度。

WireGuard是否比其他VPN解决方案更快?


简而言之:不,不是更快。

ChaCha20是一种易于在软件中实现的流密码。它一次加密一位。块协议(例如AES)一次加密一个块128位。为了实现硬件支持,将需要更多的晶体管,因此,更大的处理器带有AES-NI,这是对指令集的扩展,该指令集执行加密过程中的某些任务以加快速度。

预计AES-NI永远不会在智能手机上流行[而且,它会-大约跨]。为此,开发了ChaCha20-一种省钱,省钱的简便经济选择。因此,对于您来说可能是个新闻,您今天可以购买的每部智能手机都具有一个或另一种AES加速器,并且与ChaCha20相比,可以更快,功耗更低地使用此加密。

显然,最近几年购买的几乎所有台式机/服务器处理器都具有AES-NI。

因此,我希望在每种情况下AES都能超过ChaCha20。 WireGuard的官方文档中提到,由于使用了AVX512,ChaCha20-Poly1305将超越AES-NI,但是命令集的此扩展将仅在大型处理器上可用,这对于使用AES-可以始终运行得更快的小型移动设备也无济于事。你。

我不确定在WireGuard的开发过程中是否可以预见到这种情况,但是今天,将其钉在一个加密中的事实已经是一个缺点,可能无法很好地影响其工作。

IPsec允许您自由选择最适合您的应用程序的加密。当然,例如,如果您想通过VPN连接传输10 GB或更多的数据,这是必要的。

Linux整合问题


尽管WireGuard选择了现代的加密协议,但这已经引起了很多问题。因此,由于Linux中缺少这些原语,WireGuard集成已被推迟了多年,而不是立即使用内核支持的功能。

我不完全了解其他操作系统的情况,但可能与Linux的情况并没有太大区别。

现实是什么样的?


不幸的是,每当客户要求我为他建立VPN连接时,我都会遇到一个话题,他们使用过时的凭据和加密。与AES-256和SHA1一样,将3DES与MD5结合仍然是一种常见的做法。而且尽管后者稍好一些-这不是在2020年应该使用的东西。

对于密钥交换始终使用RSA-一种缓慢但相当安全的工具。

我的客户与海关当局,其他州组织和机构以及大型公司联系在一起,这些公司的名字享誉全球。他们都使用了几十年前创建的请求表,而从未添加过使用SHA-512的功能。我不能说这显然会影响技术进步,但显然会减慢公司流程。

看到这一点让我很痛苦,因为IPsec自2005年以来一直支持椭圆曲线。Curve25519也是较新的且更易于访问。仍然有AES的替代方案,例如Camellia和ChaCha20,但是,显然,并非所有的替代方案都得到了思科等大型供应商的支持。

人们使用它。有许多思科工具包;有许多旨在与思科配合使用的工具包。他们是该领域的市场领导者,对任何创新都不太感兴趣。

是的,[公司部门]的情况非常糟糕,但是由于WireGuard,我们不会看到任何变化。制造商可能永远不会使用已经使用的工具和加密​​来发现任何性能问题,他们在使用IKEv2时不会看到问题-因此,他们没有在寻找替代方案。

通常,您是否考虑过放弃Cisco?

基准测试


现在,让我们继续WireGuard文档中的基准测试。尽管本文档不是科学文章,但我仍然希望开发人员采用更科学的方法,或使用科学方法作为参考。如果无法复制任何基准,则它们是无用的,甚至在实验室中获得时也无用。

在Linux的WireGuard构建中,他利用了GSO(通用分段卸载)功能。多亏了他,客户端创建了一个大小为64 KB的巨大数据包,并以一种方法对其进行加密/解密。因此,降低了调用和实施密码操作的成本。如果要最大化VPN连接的带宽,这是一个好主意。

但是,像往常一样,实际上并不是那么简单。将如此大的数据包发送到网络适配器需要将其切成许多较小的数据包。典型的发送大小是1,500个字节。也就是说,我们的64 KB巨集将被分为45个数据包(1240字节的信息和20字节的IP报头)。然后,由于必须将它们一起发送并立即发送,因此它们会完全阻止网络适配器的运行。结果,这将导致优先级的跳跃,并且诸如VoIP之类的数据包将排队。

因此,WireGuard大胆宣称的高吞吐量是通过减慢其他应用程序的网络操作来实现的。 WireGuard团队已经证实了我的结论。

但是,让我们继续前进。

根据技术文档中的基准,连接显示的带宽为1011 Mbit / s。

令人印象深刻。

这尤其令人印象深刻,因为一个千兆以太网连接的最大理论带宽为966 Mbit / s,数据包大小为1500字节减去每个IP报头20字节,每个UDP报头8字节和每个有线报头本身16字节。 。封装的数据包中还有另一个IP标头,另一个是20字节TCP。那么,这些额外的带宽从何而来呢?

上面我们已经谈到了GSO的巨大帧和优势,帧大小为9000字节的理论最大值为1014 Mbit / s。通常,这种吞吐量实际上是无法实现的,因为它带来很大的困难。因此,我只能假设测试使用的是更大的粗体帧,其大小超过64 KB,理论最大值为1023 Mbps,只有某些网络适配器才支持。但是,这绝对不能在实际条件下使用,或者只能在两个直接相连的工作站之间(仅在测试台内)使用。

但是,由于VPN隧道是使用完全不支持大型框架的Internet连接在两台主机之间转发的,因此无法将在展位上获得的结果作为标准。这仅仅是不现实的实验室成就,这是不可能的,并且不适用于实际战斗条件。

即使坐在数据中心,我也无法传输大于9000字节的帧。

完全违反了现实生活中的适用性标准,并且我认为,“度量”的作者出于明显的原因而严重贬低了自己。



最后的希望


WireGuard网站讨论了很多有关容器的信息,并且很清楚它的实际用途。

一种简单,快速的VPN,不需要任何配置,可以使用大型编排工具(例如,其云中的Amazon)进行部署和配置。具体来说,Amazon使用了我之前提到的最新硬件功能,例如AVX512。这样做是为了加快工作速度,而不是与x86或任何其他体系结构捆绑在一起。

它们优化带宽和大小超过9000字节的数据包-这将导致巨大的封装帧,以相互之间进行容器通信,或进行备份操作,创建快照或部署这些容器。在上述情况下,即使是动态IP地址也不会影响WireGuard的操作。

还不错。出色的实现和非常薄的,几乎是参考的协议。

但这并不适合您完全控制的数据中心之外的世界。如果您冒着风险开始使用WireGuard,则必须在加密协议的开发和实施中不断做出让步。

结论


我很容易得出结论,WireGuard尚未准备好。

它被认为是解决现有解决方案中许多问题的轻量级且快速的解决方案。不幸的是,为了这些解决方案,他牺牲了许多与大多数用户相关的功能。这就是为什么它不能替代IPsec或OpenVPN。

为了使WireGuard更具竞争力,它至少需要添加IP地址配置以及路由和DNS配置。显然,这就是需要加密通道的目的。

安全是我的重中之重,现在我没有理由相信IKE或TLS受到某种程度的破坏或破坏。它们都支持现代加密,并且已经对它们进行了数十年的测试。如果更新的内容不等于是新的内容,那就更好了。

当您联系不受您控制的站点的第三方时,互操作性至关重要。IPsec是事实上的标准,几乎得到了普遍支持。而且有效。从理论上讲,无论外观如何,即使将来与自己的不同版本兼容,WireGuard也可能不兼容。

任何加密保护迟早都会被黑客入侵,因此,必须对其进行替换或更新。

否认所有这些事实,并且盲目地希望使用WireGuard将iPhone连接到家庭工作站,这仅仅是将您的头埋在沙子里的研讨会。

All Articles