OpenVPN性能:有多less个并发客户端可能?

我正在评估许多OpenVPN客户端连接到OpenVPN服务器的客户端系统。 “多”意味着50000 – 1000000。

为什么要这样做? 客户端是分布式embedded式系统,每个坐在系统所有者之后的dsl路由器。 服务器需要能够发送命令给客户端。 我的第一个天真的做法是使客户端通过openvpnnetworking连接到服务器。 这样,可以在两个方向上使用安全通信隧道。

这意味着所有的客户端总是连接到服务器。 有很多客户总结了多年。

问题是: OpenVPN服务器在达到一定数量的客户端时会爆炸吗? 我已经知道最大的TCP连接数量限制,因此(和其他原因)VPN将不得不使用UDP传输。

OpenVPN大师,你有什么看法?

我怀疑一个以前曾经尝试过的大型设置,所以你尝试时可能会推到极限。 我可以find一篇针对400个客户端的VPN部署的文章,但是从文本来看,作者只是粗略地估计了每个CPU可以运行多less个客户端,而对于他的设置如何执行却缺乏一些了解。

你主要需要考虑这两点:

  1. 您的数据传输将使用的带宽需要在VPN服务器端进行encryption/解密,从而消耗CPU资源

  2. 即使没有数据传输,OpenVPN客户端连接也会消耗服务器上的内存和CPU资源

现在任何体面的PC硬件都可以很容易地使用Blowfish或AES-128来饱和千兆链路,即使是100美元的embedded式设备也能够接近100 Mbps的速率 ,所以由带宽密度造成的CPU瓶颈不应该成为任何问题。

假定默认的更新间隔为3600秒,则1,000,000个客户端的数量意味着服务器平均需要每秒完成278次密钥交换。 虽然密钥交换是一项相当耗费CPU资源的任务,但如果需要的话,可以将其卸载到专用硬件上 – 可用的encryption加速卡很容易达到并超过这个数量的TLS握手。 内存限制也不应该太多 – 64位二进制文​​件应该处理任何虚拟内存限制,否则你可能会遇到这种限制。

但是OpenVPN真正的美妙之处在于你可以很容易地扩展它 – 简单地设置任意数量的OpenVPN服务器,并确保你的客户端正在使用它们(例如通过DNS轮询),configuration一个你select的dynamic路由协议(通常这是简单的RIP),只要你有足够的硬件,你的基础设施就能够支持任意数量的客户端。

实际上,我已经完成了这一工作,尽pipe在DSL路由器后面只有几百个远程连接。 我不能就更新问题提出太多的评论,但是我一路上学到了一些实际的东西:

1)部署客户端时,请确保在客户端conf中指定了多个VPN服务器vpn1.example.com,vpn2.example.com,vpn3 …..即使您现在只提供其中的一个或两个,自己的空间。 configuration得当,客户端会随机地重试,直到find一个可以正常工作的客户端。

2)我们使用自定义的AWS VPN服务器映像,可以根据需要启动额外的容量,Amazon DNS(R53)处理DNS的一面。 它完全脱离了我们其他的基础设施。

3)在服务器端,小心使用networking掩码来限制潜在客户端的数量。 这应该强制客户端到另一台服务器,缓解CPU问题。 我认为我们将服务器限制在300个左右的客户端。 这个select在我们这个方面有点武断 – 如果你喜欢的话,“直觉”。

4)同样在服务器端,你应该小心使用防火墙。 简单地说,我们configuration了我们的configuration,客户端可以连接VPN,但服务器严格禁止所有的ssh连接入站,除了已知的IP地址。 如果偶尔需要,我们可以SSH给客户,他们不能SSH给我们。

5)不要依靠OpenVPN在客户端重新连接。 10次​​中的9次,但有时会卡住。 有一个单独的进程定期重置/重新启动客户端的OpenVPN。

6)您需要一种为客户端生成唯一密钥的方式,以便您有时可以拒绝它们。 我们使用我们的服务器构build(PXEboot)过程在内部生成这些内容。 从来没有发生过我们,但我们知道我们可以做到这一点。

7)您将需要一些pipe理工具,脚本来有效地监控您的VPN服务器连接。

不幸的是,如何做到这一点,没有太多的材料,但有可能,仔细configuration。

我正在研究一个类似的问题,虽然客户的数量可能会达到几百或几千。

我想我无法一直保持所有的客户端连接。

我想随机时间间隔在客户端上启动OpenVPN守护进程,以便他们可以检查它们是否被轮询。 如果他们是发送电子邮件或他们在线的东西,并发送保持活动数据包一段时间,所以我可以连接到他们。

如果有一段时间没有stream量守护进程将被停止。

我现在面临的问题是,似乎不可能获得当前连接的VPN客户端列表…