对于具有 AES-256-CBC 加密、LZ4 压缩和将流量转发到互联网的 OpenVPN 服务器,官方要求如下:
根据经验法则,你应该假设在具有 AES-NI 芯片组的现代 CPU 上,每秒每兆比特的数据流量(单向)需要大约 20MHz
这意味着对于 6Gbps(两个方向),服务器的硬件要求总共为:
6Gbps x 2 = 12Gbps
12 x 1000 / 20 = 600GHz(假设 1Gb = 1000Mb)。
OpenVPN 的示例为(250 个活跃用户,每个用户 10Mbps):
2500Mbps 乘以 20MHz 大约等于 50000MHz 或 50GHz。例如,双八核配置的 3.5GHz 处理器可以满足这些要求。
这意味着 OpenVPN 将使用 16 个 3.5GHz 的 CPU 核心来获得总共 50GHz 的频率。
它违反了“互联网论坛规则”,例如“OpenVPN 仅使用单个核心”。
OpenVPN 官方硬件要求中明确指出多个 CPU 核心,解决扩展问题,这该如何解释?
他们称 2.5 Gbps 为“相当要求的设置”,但并未提及必须将负载分割到不同端口上的多个 VPN 实例。
怎么可能?
答案1
OpenVPN 官方硬件要求中如何解释这种每 1Mbps 严格 20MHz 分割到多个核心的情况?OpenVPN Access 是否有不同的实现?
这不是一个严格的事,而是一个经验法则、一个估计。
单个 OpenVPN 实例无法实现这种吞吐量。您需要运行多个实例,每个实例监听不同的端口,并让防火墙从主入站端口随机将新连接重定向到这些实例。如果您想要单个客户端连接,这可能没什么用,但对于多个客户端来说应该很好用。
您可能想要了解一下 WireGuard,它内置于最新的 Linux 内核中,并且可作为内核模块用于许多内核 >= 3.10 的发行版。WireGuard 的 CPU 效率非常高,可以轻松饱和 1Gbps 的链接(甚至更多)。
答案2
我向 OpenVPN Access Server 支持人员咨询了这个问题:OpenVPN Access Server 的魔力是什么,让它能够利用多个 CPU 核心。
根据答案:
在这方面,Access Server 和社区版没有区别,引擎是相同的。
OpenVPN Access Server 只需打开多个 OpenVPN 实例,并在它们之间进行负载平衡。社区版采用相同的标准扩展方法。
另外,还有一些相关且未记录的信息涉及 Access Server 扩展过程的自动化程度。这有点离题,但我相信阅读这篇文章的人会对此感兴趣:
- 负载平衡是通过 iptables 完成的。
- 用户需要配置使用多少个OpenVPN进程。
- 每个 OpenVPN 实例都有自己的监听端口、TUN/TAP 接口和虚拟子网。
- OpenVPN Access Server 维护不同实例之间的路由(每个实例的客户端之间)
- 在第 2 层中,所有 TAP 接口将在单个接口下桥接,以允许不同实例中的客户端相互了解。
答案3
此链接(OpenVPN 硬件要求)似乎适用于非社区产品。
在这篇旧文档中,我可以参考异步/多线程的 V3。 https://community.openvpn.net/openvpn/wiki/RoadMap
带有标签 v3 的 Linux 新客户端 https://github.com/OpenVPN/openvpn3-linux。
答案4
我不是工程师,但对此很感兴趣。为什么 OpenVPN 2.6 在当今的核心 CPU 上的表现不如 Wireguard?大多数企业 VPN 路由器都可以使用 OpenVPN 实现 200Mb/s。如果 Wireguard 可以作为升级选项,那么在同样的硬件上,2Gbps 的性能是否会受到限制?