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. nodejs基础 -- 路由

    我们要为路由提供请求的URL和其他需要的GET/POST参数,随后路由需要根据这些数据(URL.GET/POST参数)来执行相应的代码. 因此,需要查看HTTP请求,从中提取出请求的URL及GET/P ...

  2. Shiro Demo

    http://www.sojson.com/shiro http://blog.csdn.net/swingpyzf/article/details/46342023/

  3. asp.net Core EF core ( Entity Framework 7 ) 数据库更新维护

    CreateData­baseIfNotExists等之前的API已经废弃,现在采用的是微软封装好,简化.高效的API,migrations 因为,旧API,要付出高昂的代价,以及局限性 打开VS20 ...

  4. Oracle备份与恢复介绍(物理备份与逻辑备份) 分类: Oracle 2015-07-27 22:59 15人阅读 评论(0) 收藏

    算是挺全的了,有命令有真相 原文链接:http://blog.chinaunix.net/uid-354915-id-3525989.html 一.Oracle备份方式分类: Oracle有两类备份方 ...

  5. 用C++做微信公众平台开发的后台开发时,用sha1加密验证的方法

    微信公众平台开发时,须要验证消息是否来自微信server,这要用到sha1加密算法.官网上给的是php的sha函数,C++中要用到以下这个函数: 一.引入头文件: #include<openss ...

  6. UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习

    lienhua342014-10-07 在“进程控制三部曲”中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork ...

  7. virtualbox谨记:续....

    接“virtualbox谨记:win7上只有4.3.x的版本支持ubuntu14.04.3虚拟机安装Oracle Rac,其他的版本3.x和5.0.2(至2015-08-30)均不可以”, 续 me自 ...

  8. V8学习资源

    http://wenku.baidu.com/link?url=7mk6ib9IJ-1K_-bFVZ-fXXo2nbI3jOJ3cnhr3XC3b08fPOKkc9v8vSAd-DgNMJZ2vdjg ...

  9. OpenGL中的光照技术(翻译)

    Lighting:https://www.evl.uic.edu/julian/cs488/2005-11-03/index.html 光照 OpenGL中的光照(Linghting)是很重要的,为什 ...

  10. js九九乘法表的应用

    <html> <head> <meta charset=utf-8" /> <title>js九九乘法表</title> < ...