OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、用户名和密码来进行身份验证。与传统VPN相比,OpenVPN简单易用。
难度:★★★
OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD和Windows等多平台运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPSec以及其他VPN软件包兼容。OpenVPN的技术核心是虚拟网卡,其次是SSL(安全套接层)协议栈。
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装此类程序后主机上会增加一个非真实的网卡(虚拟网卡),可以像其他网卡一样对其进行配置。虚拟网卡在很多的操作系统中都有相应的实现,这也是OpenVPN能够跨平台使用的一个重要原因。
服务程序可以在应用层打开虚拟网卡,如果应用软件(比如网络浏览器)向虚拟网卡发送数据,则服务程序可以读取到该数据。如果服务程序向虚拟网卡中写入合适的数据,应用软件也可以接收得到。
如果用户在OpenVPN中访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,会通过Socket从外网上发送出去。这就完成了一个单向传输的过程,反之亦然。当远程服务程序通过Socket从外网上接收到数据,并进行相应的处理后,又会传送给虚拟网卡,则该应用软件就可以接收到数据。
SSL的体系结构中包含两个协议子层,其中底层是SSL记录协议层(SSL Record Protocol Layer),高层是SSL握手协议层(SSL HandShake Protocol Layer)。SSL的协议栈(阴影部分为SSL协议)如表2-1所示。
表2-1 SSL的协议栈
SSL记录协议层的作用是为高层协议提供基本的安全服务。SSL记录协议针对HTTP协议进行了特别的设计,使得超文本的传输协议HTTP能够在SSL中运行。记录封装各种高层协议,具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。
验证是指通过一定的手段,对用户的身份进行验证。在日常生活中,身份验证并不陌生。比如通过检查对方的证件,一般可以确认这个人的身份信息。日常生活中的这种身份确认的方式虽然也属于广义上的身份验证,但是“身份验证”这一说法更多地被用于计算机通信等领域。
OpenVPN使用OpenSSL库来加密数据与控制信息。这意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能,以提高连接的安全性。
OpenVPN提供了多种身份验证方式,用以确认连接双方的身份,包括预享私钥、第三方证书、用户名和密码组合。OpenVPN的多种身份验证方式如图2-12所示。
图2-12 多种身份验证方式
在日常使用或者服务器中,经常需要有两个网卡并配置两个地址,用于访问不同的网段。这时需要额外添加路由来决定发送的数据包经过正确的网关和接口才能正确地进行通信。
使用route命令可以添加到主机的路由,也可以添加到网络的路由。比如为eth0添加主机地址192.168.1.123,gw表示指定网关地址。
除了可以为主机指定IP地址和网关地址,还可以添加子网掩码,即指定netmask(子网掩码)。可以同时为主机指定IP地址、子网掩码和网关等信息。
添加路由的过程中,需要明确一些参数的含义。参数的相关说明如表2-2所示。
表2-2 参数说明
上面这种添加路由的方式是临时的。除此之外还可以添加永久路由。一种是将相关配置写入/etc/rc.local文件中,另一种是直接写入ifcfg文件。