Openvpn

用於 2Gbps 的 OpenVPN 多核 CPU

  • January 28, 2022

對於具有 AES-256-CBC 加密、LZ4 壓縮和將流量轉發到 Internet 的 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 實例的消息。

怎麼可能?

OpenVPN 硬體要求

我向 OpenVPN Access Server 支持檢查了以下問題:OpenVPN Access Server 的魔力是什麼,它允許它利用多個 CPU 核心。

根據答案:

  1. Access Server和社區版在這件事上沒有區別,引擎是一樣的。
  2. OpenVPN Access Server 只是打開多個 OpenVPN 實例,並在它們之間進行負載平衡。社區版的標準縮放方法相同。

相關且未記錄的資訊還涉及 Access Server 擴展過程的自動化程度。這有點離題,但我相信閱讀這篇文章的人會很有趣:

  • 負載平衡是使用 iptables 完成的。
  • 使用者需要配置應該使用多少個 OpenVPN 程序。
  • 每個 OpenVPN 實例都有自己的監聽埠、TUN/TAP 介面和虛擬子網。
  • OpenVPN Access Server 維護不同實例之間的路由(每個實例的客戶端之間)
  • 在 Layer2 中,所有 TAP 介面都將橋接在一個介面下,以允許不同實例中的客戶端相互了解。

在 OpenVPN 官方硬體要求中,這個嚴格的每 1Mbps 20MHz、拆分為多個核心的解釋是什麼?OpenVPN Access 有不同的實現方式嗎?

這不是一個嚴格的事情,它是一個經驗法則,一個猜測。

您將無法通過單個 OpenVPN 實例獲得這種吞吐量。您將需要執行多個實例,每個實例都偵聽不同的埠,並讓您的防火牆將新連接從您的主要入站埠隨機重定向到它們。如果您想要單個客戶端連接,這可能沒有用,但應該適用於多個客戶端。

您可能想看看 WireGuard,它內置於最新的 Linux 核心中,可作為核心模組用於許多核心 >= 3.10 的發行版。WireGuard 的 CPU 效率非常高,可以輕鬆地使 1Gbps 鏈路(甚至更多)飽和。

引用自:https://serverfault.com/questions/1023779