一、OpenVPN简介:
OpenVPN能够运行于大多常见的系统平台,是一个基于SSL/TLS的VPN解决方案。OpenVPN能够基于TAP/TUN虚拟设备驱动 实现2层及3层的链接,提供基于SSL/TLS的工业级别加密功能,并且实现了大多数常见VPN解决方案的全部特性。但目前提供整合了OpenVPN的 VPN硬件厂商还不太多。
二、OpenVPN安装与配置
1、安装lzo: LZO是一个跨平台的无损数据压缩库,OpenVPN需要基于LZO进行实时链接数据压缩。 这里推荐使用rpm包来安装,x86平台上rhel所用rpm包的下载地址: ftp://194.199.20.114/linux/EPEL/5/i386/lzo-2.02-2.el5.1.i386.rpm ftp://194.199.20.114/linux/EPEL/5/i386/lzo-devel-2.02-2.el5.1.i386.rpm
安装: rpm -ivh lzo-*.rpm
2、编译安装openvpn
3、初始化openvpn
(1)为OpenVPN建立专用CA,并分别为OpenVPN的服务端及各客户端申请所需的证书
OpenVPN支持两种认证模型:预共享密钥及基于TLS认证模型。本文主要基于后一种方式展开。
出于安全及简化认证过程等目的,OpenVPN要求服务端与客户端在建立通信前进行基于证书的双向认证。而证书的使用依赖于PKI。
OpenVPN为使用私有的CA来颁发证书准备了许多有用的脚本,这使得用户可以通过简单的执行几个脚本就能为OpenVPN的服务端及客户端 准备好所需要的证书。在Unix-like平台上 ,如果您是通过源码的方式安装OpenVPN,这些脚本就位于源码目录中的“esay-rsa”子目录中;rpm包安装的通常位于/usr/share /doc/packages/openvpn或/usr/share/doc/openvpn-version(version为版本号)目录中。在 Windows平台上,这些脚本通常位于安装目录下的“easy-rsa”子目录中。
接下来可以将目标切换至easy-rsa/2.0中:
创建CA及OpenVPN服务器和各客户端所需的证书时,需要为证书指定使用者所处的国家等信息,而这些可以在var文件(在Windows上 为var.bat文件)中为其指定默认值,这些参数包括:KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG和KEY_EMAIL等。例如: export KEY_COUNTRY="CN" export KEY_PROVINCE="HA" export KEY_CITY="Zhengzhou" export KEY_ORG="9hedu" export KEY_EMAIL="sa@9hedu.com"
接下来初始化PKI:
build-ca脚本会建立一个本地的CA,中间会要求指定很多信息。
(2)接着为OpenVPN服务器创建密钥及证书:
(3)而后为各客户端创建密钥及证书,这里假设客户端为windows.9hedu.com:
(4)生成Diffie Hellman参数:
(5)OpenVPN安全加强:
在OpenVPN的配置文件中,tls-auth指令可以为SSL/TLS协议的handshake数据包添加HMAC签名,任何未经过签名验 正的UDP包都会被丢弃,这就将SSL/TLS的安全提升了一个级别。它可以为OpenVPN的UDP提供防止DoS或端口洪泛攻击、避开对 OpenVPN监听端口的扫描及防止缓冲区溢出等安全特性。
开启tls-auth功能需要用到一个预共享密钥,此密钥经常跟证书等文件一起存放。此预共享密钥可以使用下面的命令生成:
而后在服务器端的配置文件中启用如下指令: tls-auth ta.key 0
客户端的配置文件启用如下指令: tls-auth ta.key 1
(6)将OpenVPN用到的证书、密钥等相关文件复制到/etc/openvpn目录中:
4、建立配置文件:
本例中启用的指令及其值如下: local 192.168.10.1 port 1194 proto udp dev tun ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key # This file should be kept secret dh /etc/openvpn/keys/dh1024.pem server 172.16.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 192.168.100.0 255.255.255.0" push "dhcp-option DNS 192.168.10.8" client-to-client keepalive 10 120 tls-auth /etc/openvpn/keys/ta.key 0 # This file is secret comp-lzo persist-key persist-tun status openvpn-status.log log openvpn.log verb 4
5、为OpenVPN建立SysV init脚本:
让服务开机自动启动:
启动服务:
6、Windows客户端的配置
(1)安装OpenVPN GUI到Windows客户端
建议这里的OpenVPN GUI的版本号要和服务端的版本号保持一致。这里所用到的版本的下载地址为:http://swupdate.openvpn.net/community/releases/openvpn-2.1.4-install.exe。需要说明的是,此openvpn-2.1.4-install.exe也可为Windows提供OpenVPN的服务端模块,包括openvpnsrv.exe及建议证书时所用的脚本等,如果你用不到,在安装时不选择安装其相应的功能即可,如图:
(2)为客户端建立配置文件
客户端所需的配置文件需要放置在OpenVPN安装目录中的config子目录中,如果此目录事先不存在,则需要手动创建。客户端所用的配置文 件模板位于OpenVPN服务端安装目录的名为sample-config-files子目录中,文件名为client.conf。将此文件复制到 Windows客户端上OpenVPN的安装目录中的config子目录中,并更名为client.ovpn。
本例中用到的配置文件内容如下: client dev tun proto udp remote 192.168.10.6 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key ns-cert-type server tls-auth ta.key 1 comp-lzo verb 3
其中ca, cert,key和tls-auth指令后面跟的分别是CA的证书、本客户端的证书、本客户端的私钥文件和tls认证所用到密钥文件。这些均是此前在服务 端生成的文件,你需要将它们一并复制到config子目录中。如果将它们复制到了其它目录中,在配置文件中则需要明确给出文件路径。
此外,如果OpenVPN的安装目录中没有子log目录,你需要事先创建它,否则,openvpn启动时无法创建日志文件。
(3)连接测试
运行OpenVPN GUI,查看连接状态,并测试使用效果即可。