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. e612. Moving the Focus to the Next or Previous Focusable Component

    The methods to move the focus to the next or to the previous focusable component are Component.trans ...

  2. Error configuring application listener of class org.springframework.web.context.ContextLoaderListener

    严重:   Error   configuring   application   listener   of   class   org.springframework.web.context.Co ...

  3. CI框架伪静态化配置

    CI框架伪静态化配置 伪静态化,即:去掉入口的index.php, 在url后面加上 .html 后缀 CI默认的rewrite url中是类似这样的,例如你的CI根目录是在/CodeIgniter/ ...

  4. HTML5 3D爱心动画及其制作过程

    之前有看到过很多基于HTML5或者CSS3制作的爱心动画,不过基本上都是2D平面的,今天在国外的网站上看到一个基于HTML5 3D的爱心动画,对于HTML5爱好者来说,不免兴奋了一把.下面将分享一下这 ...

  5. jQuery/CSS3类似阿里巴巴的商品导航菜单实现教程

    有两天没发表文章了,今天来说说利用jQuery和CSS3制作一款类似阿里巴巴左侧商品菜单导航,这款菜单看起来非常大气,可以展示非常多的产品类目,如果你在设计电子商务网站,不妨可以拿来参考,一下是效果图 ...

  6. 架构师素养及从小菜进阶架构(CTO)的书籍【转】

    CTO要了解无线技术/搜索/大数据/数据库等. -- 通常定义架构有几个层次,这包括业务架构.产品架构.应用架构和技术架构: 1.业务架构:描述一个企业围绕一个行业做了哪些业务,例如支付行业的收单.退 ...

  7. Springboot学习笔记(七)-集成Redis

    redis下载地址 添加依赖 <dependencies> <dependency> <groupId>org.springframework.boot</g ...

  8. 纯CSS实现瀑布流布局

    https://www.w3cplus.com/css/pure-css-create-masonry-layout.html

  9. pycahrm使用docstrings来指定变量类型、返回值类型、函数参数类型

    py里面不需要显示声明类型,这和java c这些静态语言不同,虽然python这样做少了一些代码和写代码的困难度,但还是非常多的弊端的,运行速度 代码安全, 这些都是语言本身带来的本的弊端,这些没办法 ...

  10. Netty权威指南之Netty入门程序

    package com.hjp.netty.netty; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Chan ...