OpenVPN
| 原作者 | James Yonan |
|---|---|
| 開發者 | OpenVPN 项目 / OpenVPN Inc. |
| 首次发布 | 2001年5月13日[1] |
| 当前版本 |
|
| 源代码库 | |
| 编程语言 | C语言 |
| 平台 | |
| 类型 | VPN |
| 许可协议 | GNU通用公共許可證 |
| 网站 | openvpn |
| 互联网安全协议 |
|---|
| 密钥管理 |
| 应用层 |
| 域名系统 |
| 网络层 |
OpenVPN是一个用于创建虚拟私人網絡加密通道的软件包,最早由James Yonan编写。OpenVPN允许建立的VPN使用公开密钥、電子證書、或者用户名/密碼来进行身份验证。
它大量使用了OpenSSL加密库中的SSL/TLS协议函数库。
目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Microsoft Windows以及Android和iOS上运行,並包含了许多安全性的功能。它不与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[9] 等現代加密演算法,並可使用 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使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。
- OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。
- 服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。
- OpenVPN提供了两种虚拟网络接口:通用TUN/TAP驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。
- 传送的数据可通过LZO算法压缩。 但傳輸時使用lzo壓縮將遭受VORACLE威脅而暴露傳輸資料,官方預設不使用也不建議開啟此功能。[10]
安全性
[编辑]OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall(页面存档备份,存于互联网档案馆)以防止敏感数据交换到磁盘。
OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。
安全研究與限制
[编辑]近年研究指出,OpenVPN 流量在某些情況下可能被深度封包檢查(DPI)辨識[11],其指紋特徵包括封包長度分布、握手行為與加密套件。雖然可透過外層隧道(如 Stunnel、Obfsproxy)降低可識別性,但仍可能受到嚴格網路環境的封鎖。
在效能方面,OpenVPN 主要運作於使用者空間,並依賴加密演算法與 CPU 效能,因此在低性能設備(如家用路由器)上吞吐量可能受限。以 TCP 方式運作時,由於「TCP-over-TCP meltdown」[12]問題,效率可能低於 UDP 模式。
常見應用
[编辑]- 企業遠端存取:讓員工安全連線公司內網。
- 站點對站點 VPN,用於不同分支機構間的安全連線。
- 在公共 Wi-Fi 環境中保護使用者資料傳輸。
- 建立個人自架 VPN,以避免 ISP 封鎖或繞過地理限制。
版本
[编辑]社群版本OpenVPN Community
[编辑]伺服器端:需使用者自行下載原始碼編譯、安裝。
使用者端:使用OpenVPN Connect,支援Windows、Linux、Android與iOS。
商業版本OpenVPN Access Server
[编辑]伺服器端使用與社群版本相同的OpenVPN程式碼,但在上層建置易於操作的網頁式介面。
商業版本提供無限期2個VPN連線授權可免費試用。
商業版提供下列三種安裝方式:[13]
- 軟體套件,支援Ubuntu、Debian、Redhat、CentOS。
- 虛擬機映像檔,支援ESXi 5.0與Microsoft Hyper-V。
- 雲端服務佈署,支援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[14],使用KCPtun将OpenVPN流量转为UDP流量传输,也可以消除OpenVPN的协议特征。
- SSH,使用SSH创建隧道转发OpenVPN流量,但SSH会暴露自身协议特征[15],故这种方式已被淘汰。
参考文献
[编辑]- ^ OpenVPN Change Log - OpenVPN Change Log (页面存档备份,存于互联网档案馆)
- ^ v2.6.17. 2025年11月28日 [2025年11月29日].
- ^ Downloads. openvpn.net. [2 February 2016]. (原始内容存档于2018-10-06).
- ^ Private Tunnel VPN - Android Apps on Google Play. [2018-01-26]. (原始内容存档于2020-11-11).
- ^ Private Tunnel VPN. App Store. 23 October 2014 [2018-01-26]. (原始内容存档于2019-06-05).
- ^ How to connect to Access Server from a Linux computer. [2018-01-26]. (原始内容存档于2018-09-26).
- ^ FreeBSD Ports Search. [2018-01-26]. (原始内容存档于2020-09-29).
- ^ The NetBSD Packages Collection: net/openvpn. [2018-01-26]. (原始内容存档于2020-09-30).
- ^ Tutorial: Change the Data-Channel Encryption Cipher. openvpn.net. [2025-12-03].
- ^ OpenVPN wiki. [2021-03-18]. (原始内容存档于2021-04-15).
- ^ 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
- ^ Understanding TCP Meltdown in Access Server. openvpn.net. [2025-12-03].
- ^ OpenVPN官方網站. [2021-03-18]. (原始内容存档于2021-06-04).
- ^ xtaci, xtaci/kcptun, 2024-12-20 [2024-12-22], (原始内容存档于2025-01-29)
- ^ Solidot | 中国刺探加密连接测试新屏蔽方式. www.solidot.org. [2020-07-07]. (原始内容存档于2020-07-07).
外部链接
[编辑]- OpenVPN 项目主页 (页面存档备份,存于互联网档案馆)
- Windows的OpenVPN-GUI (页面存档备份,存于互联网档案馆) 2004-2006年間,由Mathias Sundman開發使用於Windows環境的OpenVPN-GUI程式,於2.3板後已併入OpenVPN專案內
- Tunnelblick, Mac OS X的GUI
- Android的OpenVPN-Settings(页面存档备份,存于互联网档案馆)