完整CentOS搭建OpenVPN服务详细教程
一、介绍
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客户端安装
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服务详细教程的更多相关文章
- [linux] centos搭建openvpn服务,脚本颁发/吊销证书 (转载+原创)
搭建过程转载:http://yestreenstars.blog.51cto.com/1836303/1429537 环境说明:服务端:CentOS 6.5_X64客户端:Windows 7 服务端配 ...
- CentOS搭建OpenVPN服务(简易版)
OpenVPN服务端配置 1. 安装OpenVPN软件包 默认的Centos软件源里面没有OpenVPN的软件包,我们可以添加rpmforge的repo,从而实现yum安装openvpn 针对Cent ...
- CentOS搭建OpenVPN以及WIN&Android&iOS的安装连接
OpenVPNhttp://info.swufe.edu.cn/vpn/openvpn/#2 苹果.安卓智能手机openvpn的设置_百度经验https://jingyan.baidu.com/art ...
- centos搭建dns服务
原文:(https://www.myjinji.top/articles/2020/04/02/1585800289945.html)[https://www.myjinji.top/articles ...
- (转载)Centos下Elasticsearch安装详细教程
原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...
- GitHub+Hexo 搭建个人网站详细教程
原文链接 GitHub+Hexo 搭建个人网站详细教程 前言: 随着互联网浪潮的翻腾,国内外涌现出越来越多优秀的社交网站让用户分享信息更加便捷.然后,如果你是一个不甘寂寞的程序猿(媛),是否也想要搭建 ...
- Centos下Elasticsearch安装详细教程
Centos下Elasticsearch安装详细教程 1.Elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 ...
- Linux搭建SVN服务器详细教程
前言 本文讲解Linux系统下如何搭建SVN服务器,详细说明各配置项的功能,最终实现可管控多个项目的复杂配置. SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统 ...
- CentOS搭建xfce桌面+VNC教程
CentOS搭建xfce桌面+VNC教程 Linux的安全与性能向来为开发者所称道,你可以轻松地在搜索引擎中找到各种Linux优越性的说辞,其中不乏Linux的激进者.特别是当你步入VPS领域,更多地 ...
随机推荐
- Docker(一):Docker安装
简介:Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare met ...
- JAVA NIO学习二:通道(Channel)与缓冲区(Buffer)
今天是2018年的第三天,真是时光飞逝,2017年的学习计划还没有学习完成,因此继续开始研究学习,那么上一节我们了解了NIO,那么这一节我们进一步来学习NIO相关的知识.那就是通道和缓冲区.Java ...
- python3 python2 import 的区别
https://stackoverflow.com/questions/12172791/changes-in-import-statement-python3
- Android动画(一)-视图动画与帧动画
项目中好久没用过动画了,所以关于动画的知识都忘光了.知识总是不用则忘.正好最近的版本要添加比较炫酷的动画效果,所以也借着这个机会,写博客来整理和总结关于动画的一些知识.也方便自己今后的查阅. Andr ...
- 一个超级简单的demo带你走进redux的大坑
先上代码 import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import { createStor ...
- robotframework的学习笔记(十六)----robotframework标准库String
官方文档:http://robotframework.org/robotframework/latest/libraries/String.html Introduction A test libra ...
- 【Java框架型项目从入门到装逼】第六节 - 用ajax请求后台数据
这一节我们来说一下如何用ajax提交请求? 我们先不讲ajax的原理,还是先以实战为主,看一下这个东西到底怎么用的? form表单: <!-- 采用post表单提交 --> <for ...
- C盘里的桌面文件移到E盘里了,然后E盘里的文件都显示到桌面上了,怎么将桌面文件还原回C盘
1 . 直接按Windows键+R,打开"运行"对话框,在输入框中输入"regedit"命令,会打开注册表编辑窗口: 2.打开注册表文件将HKEY_CURREN ...
- HTTP首部解析
HTTP首部解析 转载请注明出处:HTTP首部解析 文章目录 1.与HTTP协议相关的Web服务器 2.HTTP首部 与HTTP协议相关的Web服务器 在说明HTTP首部相关知识之前,有必要先了解一下 ...
- 基于TCP协议的项目架构之Socket流传输的实现
项目背景 某银行的影像平台由于使用时间长,服务器等配置原因,老影像系统满足不了现在日益增长的数据量的需求,所以急需要升级改造.传统的影像平台使用的是Oracle数据库和简单的架构来存储数据(视频.图 ...