Windows下同时连接多个VPN的话,需要以管理员身份运行 C:\Program Files\TAP-Windows\bin\addtap.bat 添加虚拟网络适配器

-----------------------------------------------------------------------------------------------------------------------------------------

1、安装OpenVPN

首先从EPEL安装OpenVPN:
# yum install openvpn  easy-rsa -y

 2、使用easy-rsa创建服务端与客户端证书及密钥

服务端的创建:

服务器配置完成后需要生成密钥和证书,通过Easy RSA安装的一些脚本,方便快速产生密钥和证书;

创建keys文件夹,并且拷贝Easy RSA密钥和证书生成脚本到目录下(到easy-rsa目录)

# mkdir -p /etc/openvpn/key_server# cp -rf /usr/share/easy-rsa/3.0.3/*  /etc/openvpn/key_server/
# cp /usr/share/doc/easy-rsa-3.0.3/vars.example  /etc/openvpn/key_server/vars

为方便后续使用,按需要修改/etc/openvpn/easy-rsa/vars文件中的默认信息。

vi /etc/openvpn/easy-rsa/vars

   set_var EASYRSA_REQ_COUNTRY "US"
   set_var EASYRSA_REQ_PROVINCE "California"
   set_var EASYRSA_REQ_CITY "San Francisco"
   set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
   set_var EASYRSA_REQ_EMAIL "me@example.net"
   set_var EASYRSA_REQ_OU "My Organizational Unit"

# cd /etc/openvpn/key_server

# ./easyrsa init-pki nopass

# ./easyrsa build-ca nopass  输入CN

# ./easyrsa gen-req server nopass 输入CN

# ./easyrsa sign server server

# ./easyrsa gen-dh     创建Diffie-Hellman,时间会有点长,耐心等待

客户端的创建:

# cp -r  /etc/openvpn/key_server /etc/openvpn/key_client

# ./easyrsa init-pki nopass

# ./easyrsa gen-req client nopass

进入服务端key_server目录,关联客户端req,使之向服务端注册

# cd ../key_server

# ./easyrsa import-req /etc/openvpn/key_client/pki/reqs/client.req  client

# ./easyrsa sign client client

如果出现报错:TXT_DB error number 2 ,则

# rm -f /etc/openvpn/key_server/pki/index.txt

# touch /etc/openvpn/key_server/pki/index.txt

3、整理生成的证书

# cp /etc/openvpn/key_server/pki/ca.crt /etc/openvpn/server/
# cp /etc/openvpn/key_server/pki/private/server.key /etc/openvpn/server/
# cp /etc/openvpn/key_server/pki/issued/server.crt /etc/openvpn/server/
# cp /etc/openvpn/key_server/pki/dh.pem /etc/openvpn/server/

# cp /etc/openvpn/key_server/pki/ca.crt /etc/openvpn/client/
# cp /etc/openvpn/key_server/pki/issued/client.crt /etc/openvpn/client/
# cp /etc/openvpn/key_client/pki/private/client.key /etc/openvpn/client/

4、打开服务器的ip路由转发功能,并配置防火墙

# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
# yum install iptables-services
# systemctl stop firewalld ; systemctl mask firewalld ; systemctl start iptables
# iptables -F ; iptables -P INPUT ACCEPT
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE   ( iptables -t nat -L )
# service iptables save

5、服务端配置,指定相关ca、crt、key文件

从示例配置文件复制一份配置文件到/etc/openvpn

# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf  /etc/openvpn
# vim /etc/openvpn/server.conf ( cat server.conf | grep -v ^$ | grep -v ^# | grep -v "^;" )

port
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key  # This file should be kept secret
dh /etc/openvpn/server/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 172.17.0.0 255.255.0.0"   #向客户端推送需要访问的路由信息duplicate-cn       #定义openvpn一个证书在同一时刻是否允许多个客户端接入,默认没有启用。
keepalive  120tls-auth ta.key 0  #服务端设置为0 客户端设置为1
cipher AES--CBC
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb

生成ta.key ,与server.conf放在同一层目录下

# cd /etc/openvpn ; openvpn --genkey --secret  ta.key

测试该配置文件是否正确:

# openvpn /etc/openvpn/server.conf

6、编辑客户端配置文件 client.ovpn

client
dev tun
proto udp
remote *
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca-myxb.crt
cert myxb.crt
key myxb.keytls-auth ta.key 1
cipher AES--CBC
;comp-lzo
verb 

 7、启动OpenVPN服务

# systemctl enable openvpn@server.service

# systemctl start openvpn@server.service

8、添加用户名和密码验证

# vim /etc/openvpn/server.conf   添加

auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
username-as-common-name
script-security 3

创建用于验证用户登录的脚本和用户名密码认证文件

# vim /etc/openvpn/checkpsw.sh

#!/bin/sh
###########################################################
# checkpsw. Mathias Sundman <mathias@openvpn.se>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.

PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/etc/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

###########################################################

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 

# vim /etc/openvpn/psw-file

wjoyxt  

# touch /etc/openvpn/openvpn-password.log

# chown nobody:nobody checkpsw.sh  psw-file  openvpn-password.log

# chmod 744 checkpsw.sh  ;  chmod 400 psw-file

修改客户端配置文件

# vim client.ovpn  增加

auth-user-pass pass.txt

重启服务后生效

# cat pass.txt

wjoyxt
wjoyxt666

-----------------------------------------------------------------------------------

优化client.ovpn,合并证书到配置文件中

删除或者注释掉以下几行内容:
在这里我把它们注释掉:
ca ca.crt        改为:#ca ca.crt
cert client.crt  改为:#cert client.crt
key client.key   改为:#key client.key
tls-auth ta.key 

在最后面添加以下内容:
<ca>
ca.crt文件内容
</ca>
<cert>
client.crt文件内容
</cert>
<key>
client.key文件内容
</key>
key-direction 1
<tls-auth>
ta.key文件内容
</tls-auth>

复制各文件里的内容到相应的位置即可!保存退出!!

参考资料:https://yq.aliyun.com/articles/43247

https://www.cnblogs.com/ilanni/p/4695112.html

Centos7搭建OpenVPN服务器的更多相关文章

  1. centos7 搭建openvpn服务器

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

  2. CentOS7搭建OpenVPN

    目录 CentOS7搭建OpenVPN 环境 安装 第一步.安装openvpn及所需软件 第二步.编辑vars文件,根据自己环境配置 第三步.创建服务端证书及key 第四步.创建客户端证书 第五步.拷 ...

  3. CentOS7 搭建 SVN 服务器

    CentOS7 搭建 SVN 服务器 介绍SVN: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上 ...

  4. centos7 搭建WEB服务器

    centos7 搭建WEB服务器 2017年09月17日 09:44:50 逝然1994 阅读数:18321 标签: centosapacheweb服务器 更多 个人分类: centos服务器简单配置 ...

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

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

  6. centos7搭建svn服务器及客户端设置

    centos7搭建svn服务器及客户端设置 centos7貌似预装了svn服务(有待确认),因此我们直接启动该服务即可 一.svn服务端配置(服务器IP假设为192.168.100.1) 步骤1:创建 ...

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

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

  8. CentOS 7.2 搭建 Openvpn 服务器

    本文将以目前最新的openvpn-2.3.13.tar.gz为例来介绍如何在Linux系统中安装.配置及使用OpenVPN. 在这里,我们选用了一台预装CentOS 7.2 64位系统的计算机作为Op ...

  9. CentOS6下搭建OpenVPN服务器

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

随机推荐

  1. js判断是刷新页面还是关闭页面

    <body onunload=fclose() onload=fload() onbeforeunload=bfunload()> <script> var s = " ...

  2. 定义action的允许访问方式

    publicfunction behaviors() { return[ 'verbs'=>[ 'class'=>VerbFilter::className(), 'actions'=&g ...

  3. 常见模块(二) logging模块

    logging模块是专门做日志系统的.分为函数版和自定义函数. (一)logging模块初级版 缺点,不能指定字符集,不能把屏幕输出和文件日志同时记录.只能选择其一. 文件记录日志 import lo ...

  4. [CF1041F Ray in the tube][数学]

    http://codeforces.com/contest/1041/problem/F 题目大意: 下边界有n个给定点,上边界有m个给定点,可以从任意一个点发出一条激光,激光碰到边界会反射 激光到达 ...

  5. 一篇讲解如何调试pg 扩展的文章

    以下链接这片关于pg 扩展调试的文章挺不错,记录下 http://big-elephants.com/2015-10/writing-postgres-extensions-part-iii/     ...

  6. 好久没考虑过的 sql 注入

    很多年没考虑 sql 注入了,毕业以后 使用mybatis #{ 参数的 语法 },这个 语法已经 做了防止 sql 注入的处理 . 看到同事写的 ${ 参数 },突然 想到这个问题 . 下面聊聊 s ...

  7. kafka原理和实践(五)spring-kafka配置详解

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  8. [转]boost::python开发环境搭建

    转自:http://www.cnblogs.com/gaoxing/p/4317051.html 本来想用mingw编译boost::python模块,网上看了下资料太少,只有使用vs2012 操作环 ...

  9. 如何在myeclipse中实现jquery的自动提示功能

    在web开发过程中,myeclipse中jsp可以实现自动提示功能,但是jquery代码却无法实现自动提示,需要自己一个个手动去输入,效率过低,怎么办? 工具/原料   jquery 1.8.3.js ...

  10. docker 进程监控 Dumb-Init进程信号处理 --转自https://blog.csdn.net/tiger435/article/details/54971929

    随着docker及Kubernetes技术发展的越来越成熟稳定,越来越多的公司开始将docker用于生产环境的部署,相比起物理机上直接部署,多了一层docker容器的环境,这就带来一个问题:进程信号接 ...