Openvpn的原理及部署步骤
OpenVPN的原理:
OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。[1]
OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1 协议函式库。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。[1]
OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。 OpenVPN所有的通信都基于一个单一的IP端口, 默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客 户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们, 可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。[1]
OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其它的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在OpenVpn的中的工作机理进行介绍:[1]
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。[1]
在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。
具体部署步骤如下:
1.同步测试需要用到的服务器时间.
ntpdate time.windows.com
2.下载LZO压缩模块
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.08.tar.gz
3.编译安装lzo:
./configure
make && make install
3.下载openvpn:
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
4.安装openvpn:
./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
make && make install
5.配置CA证书
5.1修改vars文件的最后6行修改为如下内容:
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="beijing"
export KEY_ORG="myvpn"
export KEY_EMAIL="[email protected]"
5.2建立证书
source vars
./clean-all
./build-ca
ca.crt证书文件建立
ca.key私钥文件建立
5.3生成服务器端与客户机端的证书
./build-key-server server
./build-key mytest1
./build-key mytest2
#生成带密码认证的mytest3用户
./build-key-pass mytest3
5.6.生成进行密钥交换时用到的交换密钥协议文件
./build-dh
5.7配置server端vpn
mkdir -pv /etc/openvpn
cd openvpn-2.0.9/easy-rsa/2.0;
cp -r keys /etc/openvpn/
cd openvpn-2.0.9/sample-config-files
cp -a *.conf /etc/openvpn/
修改/etc/openvpn/server.conf文件如下:
[root@myhost2 openvpn]# cat server.conf
local 192.168.1.12
port 51194
proto tcp
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 192.168.8.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
push "route 192.168.7.0 255.255.255.0"
client-to-client
log /var/log/openvpn.log
5.8打开ip转发功能
将/etc/sysctl.conf中的net.ipv4.ip_forward修改为1;
sysctl -p
cd openvpn-2.0.9/sample-scripts;
cp ./openvpn.init /etc/init.d/openvpn
chmod 755 /etc/init.d/openvpn
chkconfig --add openvpn
6.启动vpn:
[root@myhost2 ~]# /usr/local/sbin/openvpn --config /etc/openvpn/server.conf &
[1] 20643
[root@myhost2 ~]# netstat -tnlp|grep 51194
tcp 0 0 192.168.1.12:51194 0.0.0.0:* LISTEN 20643/openvpn
7.配置vpn客户端:
安装win系统客户端软件;
将server端产生的客户端证书下载至客户端的conf文件中;
将client.conf修改为mytest1.ovpn,具体内容如下:
client
dev tun
proto tcp
remote 192.168.1.12 51194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert mytest1.crt
key mytest1.key
comp-lzo
verb 3
8.运行OpenVPN GUI,点击连接,图标显示为绿色表示成功.
本文出自 “webseven” 博客,请务必保留此出处http://webseven.blog.51cto.com/4388012/1629172
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。