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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。