计算机科学

首页 > 计算机科学

OpenVPN

OpenVPN
Ovpntech logo-s REVISED.png
原作者 James Yonan
开发者 OpenVPN 项目 / OpenVPN Inc.
初始版本 2001年5月13日,​17年前​(2001-05-13[1]
稳定版本
稳定版本 2.4.4[2](2017年9月26日,​11个月前​(2017-09-26[±]
编程语言 C语言
系统平台
  • Windows XP或以上[3]
  • OS X 10.8或以上
  • Android 4.0或以上[4]
  • iOS 6或以上[5]
  • Linux[6]
  • *BSD[7][8]
类型 VPN
许可协议 GNU通用公共许可证
网站 openvpn.net/index.php/open-source.html
源代码库 github.com/OpenVPN/openvpn

OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密码来进行身份验证。

它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。

目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Microsoft Windows以及Android和iOS上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

目录

  • 1 原理
    • 1.1 OpenVPN中的虚拟网卡
  • 2 加密
  • 3 身份验证
  • 4 功能与端口
  • 5 安全
  • 6 对比
  • 7 受大陆的限制
  • 8 参考文献
  • 9 外部链接
  • 10 参见

原理

OpenVPN的技术核心是虚拟网卡,其次是SSL协议实现。

OpenVPN中的虚拟网卡

虚拟网卡是使用网络底层编程技术实现的一个驱动软件。安装此类程序后主机上会增加一个非真实的网卡,并可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如网络浏览器)向虚拟网卡发送数据,则服务程序可以读取到该数据。如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统中都有相应的实现,这也是OpenVPN能够跨平台使用的一个重要原因。

在OpenVPN中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,会通过SOCKET从外网上发送出去。这完成了一个单向传输的过程,反之亦然。当远程服务程序通过SOCKET从外网上接收到数据,并进行相应的处理后,又会发送回给虚拟网卡,则该应用软件就可以接收到。

加密

OpenVPN使用OpenSSL库来加密数据与控制信息。这意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。2.3.0以后版本引入PolarSSL英语PolarSSL

身份验证

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算法压缩。

安全

OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。

OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。

对比

  • OpenVPN,能实现二/三层的基于隧道的VPN。
  • stunnel,使用SSL向任何单一端口的TCP服务提供安全保护。

受大陆的限制

防火长城会针对OpenVPN服务器回送证书完成握手创建有效加密连接时干扰连接,在使用TCP协议模式时握手会被连接重置,而使用UDP协议时含有服务器认证证书的数据包会被故意丢弃,使OpenVPN无法创建有效加密连接而连接失败。而在大陆内部的连接不受这种限制。

参考文献

  1. ^ OpenVPN Change Log - OpenVPN Change Log
  2. ^ Releases - OpenVPN/openvpn. [15 October 2017] –通过GitHub. 
  3. ^ Downloads. openvpn.net. [2 February 2016]. 
  4. ^ Private Tunnel VPN - Android Apps on Google Play. 
  5. ^ Private Tunnel VPN. App Store. 23 October 2014. 
  6. ^ How to connect to Access Server from a Linux computer. 
  7. ^ FreeBSD Ports Search. 
  8. ^ The NetBSD Packages Collection: net/openvpn. 

外部链接

  • OpenVPN 项目主页
  • Windows的OpenVPN-GUI
  • Tunnelblick, Mac OS X的GUI
  • Android的OpenVPN-Settings
  • Vpntaiwan

参见

  • 虚拟私人网络

上一篇:猎豹清理大师
下一篇:Aircrack-NG
相关推荐