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). 

      外部链接[编辑]

      参见[编辑]