一、介绍

1、定义

① OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密码来进行身份验证。

② 它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。

③ 目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Microsoft Windows以及Android和iOS上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

2、原理

① OpenVPN的技术核心是虚拟网卡,其次是SSL协议实现。

② OpenVPN中的虚拟网卡

  虚拟网卡是使用网络底层编程技术实现的一个驱动软件。安装此类程序后主机上会增加一个非真实的网卡,并可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如网络浏览器)向虚拟网卡发送数据,则服务程序可以读取到该数据。如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统中都有相应的实现,这也是OpenVPN能够跨平台使用的一个重要原因。

  在OpenVPN中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,会通过SOCKET从外网上发送出去。这完成了一个单向传输的过程,反之亦然。当远程服务程序通过SOCKET从外网上接收到数据,并进行相应的处理后,又会发送回给虚拟网卡,则该应用软件就可以接收到。

3、加密和身份验证

(1)加密

  OpenVPN使用OpenSSL库来加密数据与控制信息。这意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。2.3.0以后版本引入PolarSSL。

(2)身份验证

OpenVPN提供了多种身份验证方式,用以确认连接双方的身份,包括:

① 预享私钥

② 第三方证书

③ 用户名/密码组合

  预享密钥最为简单,但同时它只能用于创建点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外维护一个PKI证书系统。OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍需要一份服务器证书用作加密。

二、在服务器上搭建openvpn

声明,我的openvpn 是搭建在我自己的阿里云服务器上的

1、安装openvpn 和easy-rsa(该包用来制作ca证书)

(1)安装epel 仓库源

wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

rpm -Uvh epel-release-6-8.noarch.rpm

(2)安装openvpn

[root@along ~]# yum install openvpn

(3)在github 上,下载最新的easy-rsa

① https://github.com/OpenVPN/easy-rsa 下载包

② 上传,解压缩

[root@along]# mkdir openvpn

[root@along openvpn]# unzip easy-rsa-3.0.5.zip

[root@along openvpn]# mv easy-rsa-3.0.5 easy-rsa

2、配置/etc/openvpn/ 目录

(1)创建目录,并复制easy-rsa 目录

[root@along ~]# mkdir -p /etc/openvpn/

[root@along openvpn]# cp -a easy-rsa /etc/openvpn/

(2)配置,编辑vars文件,根据自己环境配置

[root@along test]# cd /etc/openvpn/easy-rsa/easyrsa3

[root@along easyrsa3]# cp vars.example vars

[root@along easy-rsa3]# vim vars

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Henan"
set_var EASYRSA_REQ_CITY        "Zhengzhou"
set_var EASYRSA_REQ_ORG         "along"
set_var EASYRSA_REQ_EMAIL       "along@163.com"
set_var EASYRSA_REQ_OU          "My OpenVPN"

3、创建服务端证书及key

进入/etc/openvpn/easy-rsa/easyrsa3/目录

① 初始化

[root@along ~]# cd /etc/openvpn/easy-rsa/easyrsa3/

[root@along easyrsa3]# ./easyrsa init-pki

② 创建根证书

[root@along easyrsa3]# ./easyrsa build-ca

注意:在上述部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置个独一无二的。

③ 创建服务器端证书

[root@along easyrsa3]# ./easyrsa gen-req server nopass

该过程中需要输入common name,随意但是不要跟之前的根证书的一样

④ 签约服务端证书

[root@along easyrsa3]# ./easyrsa sign server server

该命令中.需要你确认生成,要输入yes,还需要你提供我们当时创建CA时候的密码。如果你忘记了密码,那你就重头开始再来一次吧

⑤ 创建Diffie-Hellman,确保key穿越不安全网络的命令

[root@along easyrsa3]# ./easyrsa gen-dh

4、创建客户端证书

① 进入root目录新建client文件夹,文件夹可随意命名,然后拷贝前面解压得到的easy-ras文件夹到client文件夹,进入下列目录

[root@along ~]# mkdir client

[root@along ~]# cp /etc/openvpn/easy-rsa client/

[root@along ~]# cd client/easy-rsa/easyrsa3/

② 初始化

[root@along easyrsa3]# ./easyrsa init-pki //需输入yes 确定

③ 创建客户端key及生成证书(记住生成是自己客户端登录输入的密码)

[root@along easyrsa3]# ./easyrsa gen-req along //名字自己定义

④ 将的到的qingliu.req导入然后签约证书

a. 进入到/etc/openvpn/easy-rsa/easyrsa3/

[root@along easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/

b. 导入req

[root@along easyrsa3]# ./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/along.req along

c. 签约证书

[root@along easyrsa3]# ./easyrsa sign client along

//这里生成client所以必须为client,along要与之前导入名字一致

上面签约证书跟server类似,就不截图了,但是期间还是要输入CA的密码

5、把服务器端必要文件放到etc/openvpn/ 目录下

ca的证书、服务端的证书、秘钥

[root@along ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/

[root@along ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn/

[root@along ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn/

[root@along ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn/

6、把客户端必要文件放到root/openvpn/ 目录下

客户端的证书、秘钥

[root@along ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/client/

[root@along ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/along.crt /root/client/

[root@along ~]# cp /root/client/easy-rsa/easyrsa3/pki/private/along.key /root/client

7、为服务端编写配置文件

(1)当你安装好了openvpn时候,他会提供一个server配置的文件例子,在/usr/share/doc/openvpn-2.3.2/sample/sample-config-files 下会有一个server.conf文件,我们将这个文件复制到/etc/openvpn

[root@along ~]# rpm -ql openvpn |grep server.conf

[root@along ~]# cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn

(2)修改配置文件

[root@along ~]# vim /etc/openvpn/server.conf

[root@along ~]# grep '^[^#|;]' /etc/openvpn/server.conf 修改的地方如下:

local 0.0.0.0     #监听地址
port 1194     #监听端口
proto tcp     #监听协议
dev tun     #采用路由隧道模式
ca /etc/openvpn/ca.crt      #ca证书路径
cert /etc/openvpn/server.crt       #服务器证书
key /etc/openvpn/server.key  # This file should be kept secret 服务器秘钥
dh /etc/openvpn/dh.pem     #密钥交换协议文件
server 10.8.0.0 255.255.255.0     #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"      #给网关
push "dhcp-option DNS 8.8.8.8"        #dhcp分配dns
client-to-client       #客户端之间互相通信
keepalive 10 120       #存活时间,10秒ping一次,120 如未收到响应则视为断线
comp-lzo      #传输数据压缩
max-clients 100     #最多允许 100 客户端连接
user openvpn       #用户
group openvpn      #用户组
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3

每个项目都会由一大堆介绍,上述修改,openvpn提供的server.conf已经全部提供,我们只需要去掉前面的注释#,然后修改我们自己的有关配置

(3)配置后的设置

[root@along ~]# mkdir /var/log/openvpn

[root@along ~]# chown -R openvpn.openvpn /var/log/openvpn/

[root@along ~]# chown -R openvpn.openvpn /etc/openvpn/*

8、iptables 设置nat 规则和打开路由转发

[root@along ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

[root@along ~]# iptables -vnL -t nat

[root@along ~]# vim /etc/sysctl.conf //打开路由转发

net.ipv4.ip_forward = 1

[root@along ~]# sysctl -p

9、开启openvpn 服务

[root@along ~]# openvpn /etc/openvpn/server.conf 开启服务

[root@along ~]# ss -nutl |grep 1194

如果开启后没有打开1194 端口,说明开启服务失败,可能是配置文件有错,也有可能是权限不够,自己查询日志解决。

三、客户端连接openvpn

1、下载openvpn客户端安装

windows客户端

mac客户端

2、解压安装,配置client 端配置文件

在sample-config 文件下,有client.ovpn 模板

修改,并复制到config 目录下,修改内容如下

client
dev tun
proto tcp     //改为tcp
remote 39.xxx.xxx.xxx 1194    //OpenVPN服务器的外网IP和端口,ip和域名都行
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt     //client1的证书
key client.key        //client1的密钥
comp-lzo
verb 3

3、把服务器端的证书文件复制到config 目录下

ca.crt along.crt along.key //这三个文件

4、启动客户端

(1)启动,注意启动需以管理员权限启动

(2)输入自己设置的密码

(3)连接成功

5、测试是否成功

(1)在client 查询ip,确实是openvpn 给定的ip

(2)网页查询ip,确实是北京市阿里云的ip

完整CentOS搭建OpenVPN服务详细教程的更多相关文章

  1. [linux] centos搭建openvpn服务,脚本颁发/吊销证书 (转载+原创)

    搭建过程转载:http://yestreenstars.blog.51cto.com/1836303/1429537 环境说明:服务端:CentOS 6.5_X64客户端:Windows 7 服务端配 ...

  2. CentOS搭建OpenVPN服务(简易版)

    OpenVPN服务端配置 1. 安装OpenVPN软件包 默认的Centos软件源里面没有OpenVPN的软件包,我们可以添加rpmforge的repo,从而实现yum安装openvpn 针对Cent ...

  3. CentOS搭建OpenVPN以及WIN&Android&iOS的安装连接

    OpenVPNhttp://info.swufe.edu.cn/vpn/openvpn/#2 苹果.安卓智能手机openvpn的设置_百度经验https://jingyan.baidu.com/art ...

  4. centos搭建dns服务

    原文:(https://www.myjinji.top/articles/2020/04/02/1585800289945.html)[https://www.myjinji.top/articles ...

  5. (转载)Centos下Elasticsearch安装详细教程

    原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...

  6. GitHub+Hexo 搭建个人网站详细教程

    原文链接 GitHub+Hexo 搭建个人网站详细教程 前言: 随着互联网浪潮的翻腾,国内外涌现出越来越多优秀的社交网站让用户分享信息更加便捷.然后,如果你是一个不甘寂寞的程序猿(媛),是否也想要搭建 ...

  7. Centos下Elasticsearch安装详细教程

    Centos下Elasticsearch安装详细教程 1.Elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 ...

  8. Linux搭建SVN服务器详细教程

    前言 本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置. SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统 ...

  9. CentOS搭建xfce桌面+VNC教程

    CentOS搭建xfce桌面+VNC教程 Linux的安全与性能向来为开发者所称道,你可以轻松地在搜索引擎中找到各种Linux优越性的说辞,其中不乏Linux的激进者.特别是当你步入VPS领域,更多地 ...

随机推荐

  1. rtmp流媒体搭建的所需安装包

    说明:这是基于nginx rtmp控件  搭建的rtmp流媒体服务器,在此附上的是搭建所需要的安装包,具体的搭建过程看我之前的"ubuntu流媒体搭建" 链接地址:http://p ...

  2. CSS实现商城分类导航效果(hover选择器)

    学完制作出这个导航效果之后,收获最多的是了解了hover选择器的功能,:hover 选择器用于选择鼠标指针浮动在上面的元素.在鼠标移到元素上时向此元素添加特殊的样式(CSS).例如:改变鼠标悬停处的元 ...

  3. [编织消息框架][JAVA核心技术]动态代理应用11-水平扩展实现

    由于示例,远程服务地址配置在properties文件,通过QMConfig类加载,最优方式是上节介绍过,放在共享内存上,只需要维护一份数据即可,如放在redis上 /** 服务地址<servic ...

  4. Python第二十天 shutil 模块 zipfile tarfile 模块

    Python第二十天  shutil 模块  zipfile   tarfile 模块 os文件的操作还应该包含移动 复制  打包 压缩 解压等操作,这些os模块都没有提供 shutil 模块shut ...

  5. Jenkins 学习笔记

    Jenkins 的内容网站蛮多的,但是一开始我看起来确实很费劲.似乎好多东西都是悬空的,没有把底层的信息交代清楚. 我把自己对于 Jenkins 的探索过程记录下来,如下. 目录 Jenkins 学习 ...

  6. 关于php变量的赋值和引用的区别

    刚开始学习php,发现有些地方和js语法不同,所以记录下来. 这篇文章是总结php中变量赋值和引用的区别. 我们知道,js中,原始类型的赋值,是将值直接复制给变量:引用类型的赋值,是将内存地址复制给变 ...

  7. Python 的编码格式

    [前言] Python的编码格式对于初学者来说是很头疼的一件事,不过如果接触的多了,就会发现,只要在恰当的时候使用了恰好的编码,就不会出现太多的问题. [编码介绍] python 的编码格式2.x 和 ...

  8. Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用

    Hyperledger Fabric 1.0 从零开始(十)--智能合约 Hyperledger Fabric 1.0 从零开始(十一)--CouchDB 上述两章,最近网上各路大神文章云集,方案多多 ...

  9. Lua和C的语法差别

    没有main函数 Lua是脚本语言,没有固定入口的main函数.当lua解析器解析某个lua代码文件时,lua解析器一样一行的解析lua脚本. print("Hello lua") ...

  10. echarts3 中 热力图的属性大全

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...