1. OpenVPN 简介
VPN 直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN 无疑是 Linux 下开源 VPN 的先锋,提供了良好的性能和友好的用户 GUI。
OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。
OpenVPN 允许参与建立 VPN 的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了 OpenSSL 加密库中的 SSLv3 /TLSv1 协议函式库。OpenVPN 能在 Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X 与 Windows 上运行,并包含了许多安全性的功能。它并不是一个基于 Web 的 VPN 软件,也不与 IPSec 及其他 VPN 软件包兼容。
虚拟私有网络(VPN)隧道是通过 Internet 隧道技术将两个不同地理位置的网络安全的连接起来的技术。当两个网络是使用私有 IP 地址的私有局域网络时,它们之间是不能相互访问的,这时使用隧道技术就可以使得两个子网内的主机进行通讯。例如,VPN 隧道技术经常被用于大型机构中不同办公区域子网的连接。有时,使用 VPN 隧道仅仅是因为它很安全。服务提供商与公司会使用这样一种方式架设网络,他们将重要的服务器(如,数据库,VoIP,银行服务器)放置到一个子网内,仅仅让有权限的用户通过 VPN 隧道进行访问。如果需要搭建一个安全的 VPN 隧道,通常会选用 IPSec,因为 IPSec VPN 隧道被多重安全层所保护。
VPN (虚拟专用网)发展至今已经不在是一个单纯的经过加密的访问隧道了,它已经融合了访问控制、传输管理、加密、路由选择、可用性管理等多种功能,并在全球的信息安全体系中发挥着重要的作用。也在网络上,有关各种 VPN 协议优缺点的比较是仁者见仁,智者见智,很多技术人员由于出于使用目的考虑,包括访问控制、 安全和用户简单易用,灵活扩展等各方面,权衡利弊,难以取舍;尤其在 VOIP 语音环境中,网络安全显得尤为重要,因此现在越来越多的网络电话和语音网关支持 VPN 协议。
2. VPN 分类
1. PPTP
点对点隧道协议 (PPTP) 是由包括微软和 3Com 等公司组成的 PPTP 论坛开发的一种点对点隧道协,基于拨号使用的 PPP 协议使用 PAP 或 CHAP 之类的加密算法,或者使用 Microsoft 的点对点加密算法 MPPE。其通过跨越基于 TCP/IP 的数据网络创建 VPN 实现了从远程客户端到专用企业服务器之间数据的安全传输。PPTP 支持通过公共网络(例如 Internet)建立按需的、多协议的、虚拟专用网络。PPTP 允许加密 IP 通讯,然后在要跨越公司 IP 网络或公共 IP 网络(如 Internet)发送的 IP 头中对其进行封装。
2. L2TP
第 2 层隧道协议 (L2TP) 是 IETF 基于 L2F (Cisco的第二层转发协议)开发的 PPTP 的后续版本。是一种工业标准 Internet 隧道协议,其可以为跨越面向数据包的媒体发送点到点协议 (PPP) 框架提供封装。PPTP 和 L2TP 都使用 PPP 协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。PPTP 只能在两端点间建立单一隧道。 L2TP 支持在两端点间使用多隧道,用户可以针对不同的服务质量创建不同的隧道。L2TP 可以提供隧道验证,而 PPTP 则不支持隧道验证。但是当 L2TP 或 PPTP 与 IPSEC 共同使用时,可以由 IPSEC 提供隧道验证,不需要在第2层协议上验证隧道使用 L2TP。 PPTP 要求互联网络为 IP 网络。L2TP 只要求隧道媒介提供面向数据包的点对点的连接,L2TP 可以在 IP(使用UDP),帧中继永久虚拟电路 (PVCs), X.25 虚拟电路(VCs)或 ATM VCs 网络上使用。
3. IPSec
IPSec 的隧道是由封装、路由与解封装组成整个过程。隧道将原始数据包隐藏(或封装)在新的数据包内部。该新的数据包可能会有新的寻址与路由信息,从而使其能够通过网络传输。隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目标)。封装的数据包到达目的地后,会删除封装,原始数据包头用于将数据包路由到最终目的地。
4. SSLVPN
SSL 协议提供了数据私密性、端点验证、信息完整性等特性。SSL 协议由许多子协议组成,其中两个主要的子协议是握手协议和记录协议。握手协议允许服务器和客户端在应用协议传输第一个数据字节以前,彼此确认,协商一种加密算法和密码钥匙。在数据传输期间,记录协议利用握手协议生成的密钥加密和解密后来交换的数据。
SSL 独立于应用,因此任何一个应用程序都可以享受它的安全性而不必理会执行细节。SSL 置身于网络结构体系的传输层和应用层之间。此外,SSL 本身就被几乎所有的 Web 浏览器支持。这意味着客户端不需要为了支持 SSL 连接安装额外的软件。这两个特征就是 SSL 能应用于 VPN 的关键点。
3. 什么是 VPN 使用的隧道技术与隧道协议
VPN 隧道所使用的公共网络可以是任何类型的通信网络。可以是 Internet,也可以是企业内部网。为创建隧道,VPN 的客户机和服务器必须使用相同的隧道协议,常用的隧道协议包括点对点隧道协议 PPTP、**第2层隧道协议 L2TP *和*安全 IP 隧道模式 IPSec。
按照开放系统互联 OSI 参考模型划分,隧道技术可以分为以第2层隧道协议为基础的技术和以第3层隧道协议为基础的技术。第2层隧道协议对应 OSI 模型中的数据链路层,使用帧作为数据传输单位。PPTP 和 L2TP 协议属于第2层隧道协议,都是将数据封装在点对点协议(PPP)的帧中通过 Internet 发送。第3层隧道协议对应OSI模型中的网络层,使用包作为数据传输单位。安全 IP 隧道模式 IPSec 属于第3层隧道协议,是将数据包封装在附加了 IP 包头的新数据包中通过 IP 网络传送。
点对点隧道协议(PPTP,Point-to-Point Tunneling Protocol)将点对点协议(PPP,Point-to-Point Protocol)的数据帧封装进 IP 数据包中,通过 TCP/IP 网络进行传输。PPTP 可以对 IP、IPX 或 NetBEUI 数据进行加密传递。PPTP 通过 PPTP 控制连接来创建、维护和终止一条隧道,并使用通用路由封装(GRE,Generic Routing Encapsulation)对 PPP 数据帧进行封装。封装前,PPP 数据帧的有效载荷(有效传输数据)首先必须经过加密、压缩或是两者的混合处理。
第2层隧道协议(L2TP,Layer Two Tunneling Protocol)是 PPTP 和第2层转发技术(L2F,Layer Two Forward)的结合。第2层转发是 Cisco 公司提出的隧道技术。为了避免 PPTP 和 L2F 两种互不兼容的隧道技术在市场上彼此竞争给用户造成困惑和带来不便,Internet 工程任务委员会 IETF 要求将两种技术结合在单一隧道协议中,并在该协议中综合 PPTP 和 L2F 两者的优点,由此产生了 L2TP。L2TP 协议将 PPP 数据帧封装后,可通过 TCP/IP、X.25、帧中继或 ATM 等网络进行传送。L2TP 可以对 IP、IPX 或 NetBEUI 数据进行加密传递。目前,仅定义了基于 TCP/IP 网络的 L2TP。L2TP 隧道协议既可用于Internet,也可用于企业内部网。
为了实现在专用或公共 IP 网络上的安全传输,安全 IP 隧道模式 IPSec 使用安全方式封装和加密整个 IP 包。它首先对 IP 数据包进行加密,然后将密文数据包再次封装在明文 IP 包内,通过网络发送到接收端的 VPN 服务器。VPN 服务器对收到的数据包进行处理,在去除明文 IP 包头,对内容进行解密之后,获得原始的 IP 数据包,再将其路由到目标网络的接收计算机。
在这三种隧道协议中,点对点隧道协议 PPTP 和第2层隧道协议 L2TP 的优点是对用微软公司操作系统的用户来说很方便学习,因为微软公司已把它们作为路由软件的一部分;缺点是 PPTP 和 L2TP 将不安全的 IP 数据包封装在安全的 IP 数据包内。PPTP 和 L2TP 适用于远程访问虚拟专用网。安全 IP 隧道模式 IPSec 的优点是它定义了一套用于认证、保护私密和数据完整性的标准协议,缺点是微软公司对 IPSec 的支持不够。IPSec 适用于可信的局域网之间的虚拟专用网,即企业内部网 VPN 应用。
OpenVPN
典型的 SSL VPN 应用如 OpenVPN,是一个比较好的开源软件。PPTP 主要为那些经常外出移动或家庭办公的用户考虑;而 OpenVPN 主要是针对企业异地两地总分公司之间的VPN不间断按需连接,例如 ERP 在企业中的应用。
OpenVPN 允许参与建立 VPN 的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用了 OpenSSL 加密库,以及 SSLv3/TLSv1 协议。OpenVPN 能在 Linux、xBSD、Mac OS X 与 Windows 2000/XP 上运行。它并不是一个基于 Web 的 VPN 软件,也不与 IPsec 及其他 VPN 软件包兼容。
隧道加密
OpenVPN 使用 OpenSSL 库加密数据与控制信息:它使用了 OpesSSL 的加密以及验证功能,意味着,它能够使用任何 OpenSSL 支持的算法。它提供了可选的数据包 HMAC 功能以提高连接的安全性。此外,OpenSSL 的硬件加速也能提高它的性能。
验证
OpenVPN 提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它只能用于建立点对点的 VPN; 基于 PKI 的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个 PKI 证书体系。OpenVPN2.0 后引入了用 户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密.
网络
OpenVPN 所有的通信都基于一个单一的 IP 端口,默认且推荐使用 UDP 协议通讯,同时TCP也被支持。OpenVPN 连接能通过大多数的代理服务器,并且能够在 NAT 的环境中很好地工作。服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN 提供了两种虚拟网络接口:通用 Tun/Tap 驱动,通过它们,可以建立三层 IP 隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过 LZO 算法压缩。IANA(Internet Assigned Numbers Authority)指定给 OpenVPN 的官方端口为 1194。OpenVPN 2.0 以后版本每个进程可以同时管理数个并发的隧道。
OpenVPN 使用通用网络协议(TCP与UDP)的特点使它成为 IPsec 等协议的理想替代,尤其是在 ISP(Internet service provider)过滤某些特定 VPN 协议的情况下。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择 TCP 协议作为底层协议,UDP 协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。
安全
OpenVPN 与生俱来便具备了许多安全特性:在用户空间运行,无须对内核及网络协议栈作修改; 初始完毕后以 chroot 方式运行,放弃 root 权限; 使用 mlockall 以防止敏感数据交换到磁盘。 OpenVPN 通过 PKCS#11 支持硬件加密标识,如智能卡。