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

八、纠错反馈

邮箱:contact@itnul.com

QQ群:216083473 (认证:IT零起步)

本文下载:http://yunpan.cn/QDAS83AR29Q2M

项目社区:http://bbs.itnul.com/

IT零起步-CentOS6.4部署OpenVPN服务器的更多相关文章

  1. [svc]centos6上部署openvpn+gg二步认证

    最近又发现个新的vpn: wireguard 为了满足员工在家办公的需求.需要 openvpn+gg方案 在centos6上部署openvpn 参考 1.安装前准备 wget -O /etc/yum. ...

  2. CentOS6下搭建OpenVPN服务器

    • OpenVPN简介 OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件.使用OpenVPN可以方便地在家庭.办公场所.住宿酒店等不同网 ...

  3. centos6安装部署git服务器(gitlab6.4)

    环境准备 python版本2.6git版本 1.8.4.1ruby版本ruby-2.0.0-p353gitlab-shell版本 v1.8.0gitlab版本6.4.3 因centos6系列的pyth ...

  4. CentOS 6.9/Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用

    说明: 1.发现一个很奇怪的现象,CentOS和Ubuntu有着对用户不同的管理理念,比如CentOS中安装一切软件都是以root优先(su -),而Ubuntu则以当前用户优先,安装软件以sudo开 ...

  5. CentOS6搭建OpenVPN服务器

    一.服务器端安装及配置 服务器环境:干净的CentOS6.3 64位系统 内网IP:10.143.80.116 外网IP:203.195.xxx.xxx OpenVPN版本:OpenVPN 2.3.2 ...

  6. 烂泥:ubuntu 14.04搭建OpenVPN服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司分部需要连接公司内部的服务器,但是该服务器只允许公司内部的网络访问. 为了解决这个问题,打算使用VPN.对于VPN以前使用最多的是PPTP这个解决方案 ...

  7. openvpn部署之快速入门实战+一键部署openvpn脚本

    个人原创禁止转载 软件环境: Centos6.9 x64 openvpn-2.4.3-1.el6.x86_64.rpm easy-rsa-2.2.2-1.el6.noarch.rpm    #推荐使用 ...

  8. centos7 搭建openvpn服务器

    OpenVPN是一个开源代码的VPN应用程序,可让您在公共互联网上安全地创建和加入专用网络.相比pptp,openvpn更稳定.安全. 本篇博客主要介绍下面两点: 1. Centos 7下安装与配置O ...

  9. CentOS 部署openVPN

    一.openVPN工作原理 VPN技术通过密钥交换.封装.认证.加密手段在公共网络上建立起私密的隧道,保障传输数据的完整性.私密性和有效性.OpenVPN是近年来新出现的开放源码项目,实现了SSLVP ...

随机推荐

  1. AngularJS实现单页应用的原理——路由(Route)

    AngularJS实现单页应用的原理——路由(Route) 路由:告诉你一个通往某个特定页面的途径 http://127.0.0.1/index.html#/start http://127.0.0. ...

  2. [zt]OpenCV如何获取视频当前的一帧图像

    (OpenCV读取视频.OpenCV提取视频每一帧.每一帧图片合成新的AVI视频)CvCapture 是视频获取结构 被用来作为视频获取函数的一个参数 比如 CvCapture* cap; IplIm ...

  3. 优化Webstorm

    Webstorm这个编辑器还是很强大的,而且版本更新得快,支持最新的typescript,就是性能越来越低. 本文总结了一些优化Webstorm的有效方法,希望对大家有所帮助! 测试环境 Mac OS ...

  4. mysql连接字符串

    MySQL中 concat 函数使用方法:CONCAT(str1,str2,…)

  5. Spark Streaming metadata checkpoint

    Checkpointing 一个流应用程序必须全天候运行,所有必须能够解决应用程序逻辑无关的故障(如系统错误,JVM崩溃等).为了使这成为可能,Spark Streaming需要checkpoint足 ...

  6. ASP.NET Mvc开发之EF延迟加载

    EF延迟加载:就是使用Lamabda表达式或者Linq 从 EF实体对象中查询数据时,EF并不是直接将数据查询出来,而是在用到具体数据的时候才会加载到内存. 一,实体对象的Where方法返回一个什么对 ...

  7. repeater操作

    protected void rpRole_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ...

  8. 【一天一道LeetCode】#258. Add Digits

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  9. hihocoder1489 Legendary Items 概率期望

    Little Hi is playing a video game. Each time he accomplishes a quest in the game, Little Hi has a ch ...

  10. 26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解)

    1.描述 网卡的驱动其实很简单,它还是与硬件相关,主要是负责收发网络的数据包,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送, 并将接收到的数据包传递给上层协议. 网卡设备与字符设备和块 ...