OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,实现二/三层的基于隧道的VPN。最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、数字证书、或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。
目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista/Windows 7以及Android上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。
一、协议原理
OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现,这里重点对虚拟网卡及其在OpenVpn的中的工作机理进行介绍。
虚拟网卡是使用网络底层编程技术实现的一个驱动软件, 安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。
在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发提交去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。
二、测试环境
环境:CentOS release 6.4 (Final) i386
协议:OpenVPN
端口:OpenVPN/TCP/1194(服务端), 1194为默认可修改;
加密:使用OpenSSL库来加密数据与控制信息,能够使用任何OpenSSL支持的算法。
认证:支持多种认证方式,包括预享私钥、第三方证书、用户名/密码组合;
服务:openvpn
软件包:
1、 openvpn-2.3.2.tar.gz
openvpn主程序,服务器和客户端均采用此包编译安装,不同的是两者证书及配置文件,其他环境一致。
2、 easy-rsa-2.2.2.tar.gz
This is a small RSA key management package,based on the openssl command line tool, thatcan be found in the easy-rsa subdirectory of the OpenVPN distribution. ——RSA证书生成管理软件
3、pam CentOS6x/RHEL6x自带无需安装,yum更新便可
PAM (Pluggable Authentication Modules)是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序。PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。
4、lzo (可yum安装)
The OpenVPN RPM package requires the LZO library for real-time link compression. ——用于实时数据压缩
5、openssl (系统自带,可yum更新)
SSL,Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认。OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写。
软件下载:
http://swupdate.openvpn.org/community/releases/openvpn-2.3.2.tar.gz
https://codeload.github.com/OpenVPN/easy-rsa/tar.gz/2.2.2
http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.2-I003-i686.exe
三、编译安装
注:服务器端环境和客户端环境是一样的,只是配置文件不同而已一个是server.conf另一个是client.conf,另外证书文件也是不同的。
3.1.安装依赖包
# yum -y install pam pam-devel
# yum -y install openssl openssl-devel
# yum -y install lzo lzo-devel
3.2.编译openvpn
# tar xf openvpn-2.3.2.tar.gz
# cd openvpn-2.3.2
# ./configure –prefix=/usr/local/openvpn
# make && make install
# echo $?
目录规划(可自定义)
# mkdir /usr/local/openvpn/conf #配置文件位置,如server.conf
# mkdir /usr/local/openvpn/keys #证书文件位置
四、证书生成
4.1.环境配置
# tar xf easy-rsa-2.2.2.tar.gz
# cd easy-rsa-2.2.2
# cp -R easy-rsa/ /usr/local/openvpn/
# cd /etc/openvpn/easy-rsa/2.0
# vi vars #设置变量
export KEY_COUNTRY=”CN”#(国家)
export KEY_PROVINCE=”HeNan”#(省份)
export KEY_CITY=”ZhengZhou”#(城市)
export KEY_ORG=”itnul.com”#(组织)
export KEY_EMAIL=”contact@itnul.com”#(邮件地址)
export KEY_OU=”itnul.com”#(单位)
注:其他不作修改,默认便可
# source ./vars #使变量生效
# ./clean-all #初始化keys目录,创建所需要的文件和目录
# ln -s openssl-1.0.0.cnf openssl.cnf #做SSL配置文件软链:
上面是初始化工作,以后在进行证书制作工作时,仍旧需要进行初始化,但只需要进入openvpn\easy-rsa目录,运行vars就可以了,不需要上面那些步骤了。
4.2 证书生成
# ./build-ca #生成ROOT CA证书,用于签发Server和Client证书(ca.key ca.crt)
# ./build-dh #生成公开密钥算法(dirrie-hellman)文件 (dh2048.pem)
# ./build-key-server server #生成服务器证书和密钥(server.key server.crt server.csr 01.pem)
# ./build-key client #生成客户端证书和密钥(client.key client.crt client.csr 02.pem)
注:生成服务器和客户端证书时提示输入额外属性,此处可不填!
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
4.3.拷贝证书到相应位置
# cd /usr/local/openvpn/easy-rsa/2.0/keys
# cp -f dh2048.pem ca.crt server.crt server.key /usr/local/openvpn/keys #(服务器端)
# cp -f ca.crt client.crt client.key /usr/local/openvpn/keys #(客户端)
五、配置文件
# cd /tmp/penvpn-2.3.2/sample/sample-config-files
# cp server.conf /usr/local/openvpn/conf/server.conf #(服务器端)
# cp client.conf /usr/local/openvpn/conf/client.conf #(客户端)
5.1.server.conf(仅供参考)
# vi /usr/local/openvpn/conf/server.conf
local 192.168.1.180
port 1194
proto tcp
dev tun
ca /usr/local/openvpn/keys/ca.crt
cert /usr/local/openvpn/keys/server.crt
key /usr/local/openvpn/keys/server.key
dh /usr/local/openvpn/keys/dh2048.pem
server 10.1.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push “route 10.100.0.0 255.255.0.0″ #本地内网
route 10.200.0.0 255.255.0.0 #远程内网
push “dhcp-option DNS 8.8.8.8″
push “dhcp-option DNS 8.8.4.4″
client-to-client
comp-lzo
log-append /var/log/openvpn.log
verb 4
5.2.client.conf(仅供参考)
# vi /usr/local/openvpn/conf/client.conf
client
dev tun
proto tcp
remote 192.168.1.180 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /usr/local/openvpn/keys/ca.crt
cert /usr/local/openvpn/keys/client.crt
key /usr/local/openvpn/keys/client.key
comp-lzo
verb 4
5.3.配置文件详细分析
OpenVPN:server.conf与client.conf配置解析 ——IT零起步
http://blog.itnul.com/archives/218.html
六、连接测试
6.1开启IP转发功能
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl –p
6.2 时间同步
# ntpdate pool.ntp.org #时间同步,server和client时间必须一致
6.3 开放端口
# iptables -I INPUT -p tcp –dport 1194 -j ACCEPT #服务器开放1194端口
6.4 启动openvpn
以后台运行模式启动openvpn
/usr/local/openvpn/sbin/openvpn –config /usr/local/openvpn/conf/server.conf >/var/log/openvpn.log 2>&1 & #服务器端命令
/usr/local/openvpn/sbin/openvpn –config /usr/local/openvpn/conf/client.conf >/var/log/openvpn.log 2>&1 & #客户端命令
七、参考链接
配置文档:
http://zh.wikipedia.org/wiki/OpenVPN
http://openvpn.ustc.edu.cn/
http://openvpn.se/
https://github.com/OpenVPN/easy-rsa/releases
http://openvpn.net/index.php/download/community-downloads.html
http://openvpn.net/index.php/access-server/overview.html
http://www.cnblogs.com/agostop/archive/2012/11/14/2770121.html
http://hi.baidu.com/reyleon/item/c48e981857d51612e3f9866d
- 微信扫码赞助
- 支付宝赞助