用於 2Gbps 的 OpenVPN 多核 CPU
對於具有 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 Access Server 支持檢查了以下問題:OpenVPN Access Server 的魔力是什麼,它允許它利用多個 CPU 核心。
根據答案:
- Access Server和社區版在這件事上沒有區別,引擎是一樣的。
- 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 鏈路(甚至更多)飽和。