基于Linux的OpenVPN网络OpenVPN是一个开源的加密隧道构建工具,基于OpenSSL的SSL/TLS协议,可以在Internet中实现点对点的SSLVPN安全连接。使用OpenVPN的好处是安全、易用和稳定,且认证方式灵活,具备实现SSLVPN解决方案的完整特性。OpenVPN可以应用于Linux、Unix、MacOS以及Windows等各种操作系统平台。OpenVPN提供两种类型的虚拟网络接口:TUN和TAP,分别用于建立IP隧道、以太网桥接。在Linux中使用这两种虚拟设备,需要对应的内核模块支持。RHEL5系统默认已编译好tun模块,直接使用即可。OpenVPN的官方站点是,目前发布的最新测试版本为OpenVPN-2.1_rc13,稳定版为OpenVPN-2.0.9。OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,VPN在vlan中的应用第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它只能用于建立点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。本章案例中,需要下载使用的相关软件包参考如下:最新稳定版源码包:安装包:工具包:在RHEL5系统中的安装需要先安装lzo软件包,用于压缩隧道通讯数据以加快传输速度。lzo和openvpn源码包都可以按照默认的配置进行编译安装。OpenVPN需要使用的openssl等软件均使用RHEL5系统自带的rpm包,安装过程不再赘述。[root@gw1soft_dir]#tarzxvflzo-2.03.tar.gz[root@gw1soft_dir]#cdlzo-2.03[root@gw1lzo-2.03]#./configure&&make&&makeinstall[root@gw1lzo-2.03]#cd../[root@gw1soft_dir]#tarzxvfopenvpn-2.0.9.tar.gz[root@gw1openvpn-2.0.9]#./configure&&make&&makeinstall2.在WindowsXP系统中的安装双击下载的openvpn-2.0.9-gui-1.0.3-install.exe文件,按照向导提示安装即可。若只作为OpenVPN客户端使用,安装时可以不勾选定制组件列表中的“OpenVPNService”(如图所示)。安装OpenVPN-GUI客户端工具3.OpenVPN服务的运行控制在RHEL5系统中,可以直接复制openvpn源码目录中的脚本样例文件,用于控制openvpn服务的开启、重启或关闭。[root@gw1~]#cd/soft_dir/[root@gw1soft_dir]#cp-popenvpn-2.0.9/sample-scripts/openvpn.init/etc/init.d/openvpn[root@gw1soft_dir]#chmod+x/etc/init.d/openvpn[root@gw1soft_dir]#chkconfig--addopenvpn[root@gw1soft_dir]#chkconfig--level2345openvpnon[root@gw1soft_dir]#serviceopenvpnstatusopenvpn:servicenotstarted启动openvpn进程需要建立对应的配置文件,具体配置过程请参考下节的应用案例。1.案例需求分析本案例主要基于RHEL5和WindowsXP系统环境,跨越不安全的Internet网络,为异地的两个局域网及远程网管工作站建立安全的SSLVPN连接(如图8.2所示)。其中,北京总部和上海分公司的网关服务器均使用RHEL5系统,需要分别配置OpenVPN,用于连接两个异地的局域网LAN1、LAN2。此外,位于Internet中的网管工作站使用WindowsXP系统,需要随时通过VPN安全隧道访问总部的局域网LAN1和上海分公司的局域网LAN2。基于Linux的OpenVPN网络OpenVPN远程虚拟专用网络架构基于上述需求,可以将北京总部的网关服务器GW1配置为VPNServer模式,上海的网关服务器GW2和Internet网管工作站PC1均使用VPNClient模式。分别建立两条点对点(Point-to-Point)的SSLVPN安全隧道——“GW1----GW2”、“GW1----PC1”即可。由于Internet网络的细节不是本案例的重点,因此GW1、GW2的公网IP地址分别使用173.74.75.76和173.74.75.77来模拟。其他网络接口地址设置如下:GW1、GW2的内网接口IP地址分别为192.168.1.1、192.168.2.1。----GW2隧道:分别使用虚拟IP地址10.8.0.1/30、10.8.0.2/30。----PC1隧道:分别使用虚拟IP地址10.9.0.1/30、10.9.0.2/30。另外,两地局域网的客户机需要正确设置好IP地址、默认网关等参数:LAN1的主机使用192.168.1.0/24网段,默认网关设为192.168.1.1。LAN2的主机使用192.168.2.0/24网段,默认网关设为192.168.2.1。2.配置GW1----GW2隧道连接本小节主要阐述如何创建第1条SSLVPN隧道,用于连接GW1、GW2两台服务器,以便实现北京、上海两地局域网(LAN1、LAN2)的安全互联。主要实现过程如下:第一步、配置主服务器(GW1)——北京A.配置Internet连接及SNAT、路由转发1)配置IP地址eth0接口(173.74.75.76/24)用于连接Internet,eth1接口(192.168.1.1/24)用于连接局域网(配置过程略)2)开启路由及SNAT转换[root@gw1~]#vim/opt/gw1_nat.shsysctl-wnet.ipv4.ip_forward=1/sbin/iptables-tnat-IPOSTROUTING-oeth0-jSNAT--to-source173.74.75.76[root@gw1~]#chmoda+x/opt/gw1_nat.sh[root@gw1~]#echo/opt/gw1_nat.sh/etc/rc.local[root@gw1~]#/opt/gw1_nat.shnet.ipv4.ip_forward=1[root@gw1~]#sysctl–pB.安装OpenVPN服务[root@gw1soft_dir]#tarzxvflzo-2.03.tar.gz[root@gw1soft_dir]#cdlzo-2.03[root@gw1lzo-2.03]#./configure&&make&&makeinstall[root@gw1lzo-2.03]#cd../[root@gw1soft_dir]#tarzxvfopenvpn-2.0.9.tar.gz[root@gw1openvpn-2.0.9]#./configure&&make&&makeinstall[root@gw1~]#cd/soft_dir/[root@gw1soft_dir]#cp-popenvpn-2.0.9/sample-scripts/openvpn.init/etc/init.d/openvpn[root@gw1soft_dir]#chmod+x/etc/init.d/openvpn[root@gw1soft_dir]#chkconfig--addopenvpn[root@gw1soft_dir]#chkconfig--level2345openvpnonC.创建证书和密钥文件证书和密钥文件主要用于点对点客户端的认证,以便增强安全性。为了降低密钥创建过程的复杂性,可以充分利用OpenVPN源码包提供的easy-rsa/目录,该目录中包含一系列简单易用的脚本工具(参考“openvpn-2.0.9/easy-rsa/README”文件)。3)配置变量环境修改easy-rsa/vars文件,根据实际情况适当修改预定义变量,或保持默认。在后续创建相关文件的过程中,将会直接读取这些变量的内容。其中“KEY_DIR”变量的值决定了新创建的密钥等文件的存放位置。[root@gw1~]#cd/soft_dir/openvpn-2.0.9/easy-rsa/[root@gw1easy-rsa]#vimvarsexportD=`pwd`exportKEY_CONFIG=$D/openssl.cnfexportKEY_DIR=$D/keysechoNOTE:whenyourun./clean-all,Iwillbedoingarm-rfon$KEY_DIRexportKEY_SIZE=1024exportKEY_COUNTRY=CN//粗体部分根据具体应用情况进行修改exportKEY_PROVINCE=BeiJingexportKEY_CITY=BeiJingexportKEY_ORG=BENET.IncexportKEY_EMAIL=vpnadm@benet.com[root@gw1easy-rsa]#sourcevars//执行vars文件中的代码NOTE:whenyourun./clean-all,Iwillbedoingarm-rfon/soft_dir/openvpn-2.0.9/easy-rsa/keys[root@gw1easy-rsa]#./clean-all//预先清除$KEY_DIR目录4)创建CA证书执行“./build-ca”脚本建立CA证书文件,根据脚本提示设置好国家代码、省份、城市、公司名等信息,如通用识别名称“CommonName”项可以设置为GW1的FQDN名称。后续创建的密钥文件需要依据该CA文件。[root@gw1easy-rsa]#./build-caGeneratinga1024bitRSAprivatekey.....++++++..............................++++++writingnewprivatekeyto'ca.key'-----Youareabouttobeaskedtoenterinformationthatwillbeincorporatedintoyourcertificaterequest.WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.TherearequiteafewfieldsbutyoucanleavesomeblankForsomefieldstherewillbeadefaultvalue,Ifyouenter'.',thefieldwillbeleftblank.-----CountryName(2lettercode)[CN]:StateorProvinceName(fullname)[BeiJing]:Lo