OpenVPN

維基百科,自由的百科全書
跳至導覽 跳至搜尋
OpenVPN
File:Ovpntech logo-s REVISED.png
原作者James Yonan
開發者OpenVPN 項目 / OpenVPN Inc.
首次發布2001年5月13日,​25年前​(2001-05-13[1]
當前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    源代碼庫
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    編程語言C語言
    引擎
      Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
      平台
      類型VPN
      許可協議GNU通用公共許可證
      網站openvpn.net

      OpenVPN是一個用於創建虛擬私人網絡加密通道的軟件包,最早由James Yonan編寫。OpenVPN允許建立的VPN使用公開密鑰電子證書、或者用戶名/密碼來進行身份驗證。

      它大量使用了OpenSSL加密庫中的SSL/TLS協議函數庫。

      目前OpenVPN能在SolarisLinuxOpenBSDFreeBSDNetBSDMac OS XMicrosoft Windows以及AndroidiOS上運行,並包含了許多安全性的功能。它不與IPsec兼容。

      原理[編輯]

      OpenVPN的技術核心是虛擬網卡,其次是SSL協議實現。

      虛擬網卡[編輯]

      在OpenVPN中,如果用戶訪問一個遠程的虛擬地址(屬於虛擬網卡配用的地址系列,區別於真實地址),則操作系統會通過路由機制將數據包(TUN模式)或數據幀(TAP模式)發送到虛擬網卡上,服務程序接收該數據並進行相應的處理後,會通過SOCKET從外網上發送出去。這完成了一個單向傳輸的過程,反之亦然。當遠程服務程序通過SOCKET從外網上接收到數據,並進行相應的處理後,又會發送回給虛擬網卡,則該應用軟件就可以接收到。

      加密[編輯]

      OpenVPN使用OpenSSL庫來加密數據與控制信息。這意味着,它能夠使用任何OpenSSL支持的算法。它提供了HMAC功能以提高連接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。2.3.0以後版本引入PolarSSL。OpenVPN 依賴 OpenSSL 或 mbed TLS,支援 AES、AES-GCM、ChaCha20-Poly1305[8] 等現代加密演算法,並可使用 TLS 1.2 / 1.3 進行金鑰交換。OpenVPN 也支援完美前向保密(Perfect Forward Secrecy, PFS),透過定期重新產生會話金鑰,降低單一金鑰遭受破解時造成的風險。

      功能[編輯]

      身份驗證[編輯]

      OpenVPN提供了多種身份驗證方式,用以確認連接雙方的身份,包括:

      預共享密鑰最為簡單,但它只能用於建立點對點的VPN;基於PKI的第三方證書提供了最完善的功能,但是需要額外維護一個PKI證書系統。OpenVPN2.0後引入了用戶名/口令組合的身份驗證方式,它可以省略客戶端證書,但是仍需要一份服務器證書用作加密。

      功能與端口[編輯]

      • OpenVPN所有的通信都基於一個單一的IP端口,默認且推薦使用UDP協議通訊,同時也支持TCP。IANA(Internet Assigned Numbers Authority)指定給OpenVPN的官方端口為1194。OpenVPN 2.0以後版本每個進程可以同時管理數個並發的隧道。OpenVPN使用通用網絡協議(TCPUDP)的特點使它成為IPsec等協議的理想替代,尤其是在ISP(Internet service provider)過濾某些特定VPN協議的情況下。
      • OpenVPN連接能通過大多數的代理服務器,並且能夠在NAT的環境中很好地工作。
      • 服務端具有向客戶端「推送」某些網絡配置信息的功能,這些信息包括:IP地址、路由設定等。
      • OpenVPN提供了兩種虛擬網絡接口:通用TUN/TAP驅動,通過它們,可以建立三層IP隧道,或者虛擬二層以太網,後者可以傳送任何類型的二層以太網絡數據。
      • 傳送的數據可通過LZO算法壓縮。 但傳輸時使用lzo壓縮將遭受VORACLE威脅而暴露傳輸資料,官方預設不使用也不建議開啟此功能。[9]

      安全性[編輯]

      OpenVPN與生俱來便具備了許多安全特性:它在用戶空間運行,無須對內核及網絡協議棧作修改;初始完畢後以chroot方式運行,放棄root權限;使用mlockall頁面存檔備份,存於網際網路檔案館)以防止敏感數據交換到磁盤。

      OpenVPN通過PKCS#11支持硬件加密標識,如智能卡

      安全研究與限制[編輯]

      近年研究指出,OpenVPN 流量在某些情況下可能被深度封包檢查(DPI)辨識[10],其指紋特徵包括封包長度分布、握手行為與加密套件。雖然可透過外層隧道(如 Stunnel、Obfsproxy)降低可識別性,但仍可能受到嚴格網路環境的封鎖。

      在效能方面,OpenVPN 主要運作於使用者空間,並依賴加密演算法與 CPU 效能,因此在低性能設備(如家用路由器)上吞吐量可能受限。以 TCP 方式運作時,由於「TCP-over-TCP meltdown」[11]問題,效率可能低於 UDP 模式。

      常見應用[編輯]

      • 企業遠端存取:讓員工安全連線公司內網。
      • 站點對站點 VPN,用於不同分支機構間的安全連線。
      • 在公共 Wi-Fi 環境中保護使用者資料傳輸。
      • 建立個人自架 VPN,以避免 ISP 封鎖或繞過地理限制。

      版本[編輯]

      社群版本OpenVPN Community[編輯]

      伺服器端:需使用者自行下載原始碼編譯、安裝。

      使用者端:使用OpenVPN Connect,支援Windows、Linux、Android與iOS。

      商業版本OpenVPN Access Server[編輯]

      伺服器端使用與社群版本相同的OpenVPN程式碼,但在上層建置易於操作的網頁式介面。

      商業版本提供無限期2個VPN連線授權可免費試用。

      商業版提供下列三種安裝方式:[12]

      1. 軟體套件,支援Ubuntu、Debian、Redhat、CentOS。
      2. 虛擬機映像檔,支援ESXi 5.0與Microsoft Hyper-V。
      3. 雲端服務佈署,支援Amazon AWS、Microsoft Azure、Google GCP、Digital Ocean droplets與ORACLE VPC。

      OpenVPN Cloud[編輯]

      提供使用者直接租用官方架設的OpenVPN Access Server,適用於不想自行安裝管理主機的企業用戶租用。

      Private Tunnel[編輯]

      提供僅需要使用VPN通道服務的個人用戶直接租用。

      受中國大陸的限制[編輯]

      由於OpenVPN通訊協議特徵明顯,當從中國大陸向境外OpenVPN服務器傳輸大量數據或進行頻繁連接後,防火長城會封鎖OpenVPN服務器所使用的TCP/UDP端口或服務器IP地址,使OpenVPN無法連接。而在敏感時期則會針對OpenVPN服務器回送證書完成握手創建有效加密連接時干擾連接,在使用TCP協議模式時握手會被連接重置,而使用UDP協議時含有服務器認證證書的數據包會被故意丟棄,使OpenVPN無法創建有效加密連接而連接失敗。而在中國大陸內部的連接不受這種限制。

      偽裝的改進[編輯]

      • Stunnel,通過使用Stunnel轉發OpenVPN流量以消除OpenVPN的協議特徵,達到提供安全保護與流量偽裝的目的(通常將Stunnel設定於443端口偽裝成Web網站)。
      • KCPtun[13],使用KCPtun將OpenVPN流量轉為UDP流量傳輸,也可以消除OpenVPN的協議特徵。
      • SSH,使用SSH創建隧道轉發OpenVPN流量,但SSH會暴露自身協議特徵[14],故這種方式已被淘汰。

      參考文獻[編輯]

      1. ^ OpenVPN Change Log - OpenVPN Change Log頁面存檔備份,存於網際網路檔案館
      2. ^ Downloads. openvpn.net. [2 February 2016]. (原始內容存檔於2018-10-06). 
      3. ^ Private Tunnel VPN - Android Apps on Google Play. [2018-01-26]. (原始內容存檔於2020-11-11). 
      4. ^ Private Tunnel VPN. App Store. 23 October 2014 [2018-01-26]. (原始內容存檔於2019-06-05). 
      5. ^ How to connect to Access Server from a Linux computer. [2018-01-26]. (原始內容存檔於2018-09-26). 
      6. ^ FreeBSD Ports Search. [2018-01-26]. (原始內容存檔於2020-09-29). 
      7. ^ The NetBSD Packages Collection: net/openvpn. [2018-01-26]. (原始內容存檔於2020-09-30). 
      8. ^ Tutorial: Change the Data-Channel Encryption Cipher. openvpn.net. [2025-12-03]. 
      9. ^ OpenVPN wiki. [2021-03-18]. (原始內容存檔於2021-04-15). 
      10. ^ Xue, Diwen; Ramesh, Reethika; Jain, Arham; Kallitsis, Michalis; Halderman, J. Alex; Crandall, Jedidiah R.; Ensafi, Roya, OpenVPN is Open to VPN Fingerprinting, 2024-03-06 [2025-12-03], doi:10.48550/arXiv.2403.03998 
      11. ^ Understanding TCP Meltdown in Access Server. openvpn.net. [2025-12-03]. 
      12. ^ OpenVPN官方網站. [2021-03-18]. (原始內容存檔於2021-06-04). 
      13. ^ xtaci, xtaci/kcptun, 2024-12-20 [2024-12-22], (原始內容存檔於2025-01-29) 
      14. ^ Solidot | 中国刺探加密连接测试新屏蔽方式. www.solidot.org. [2020-07-07]. (原始內容存檔於2020-07-07). 

      外部連結[編輯]

      參見[編輯]