OpenVPN CentOS7 安装部署配置详解

时间:2022-10-02 08:47:42

一 、概念相关


1、vpn 介绍

  vpn 虚拟专用网络,是依靠isp和其他的nsp,在公共网络中建立专用的数据通信网络的技术。在vpn中任意两点之间的链接并没有传统的专网所需的端到端的物理链路,而是利用公共网络资源动态组成的,可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有相同功能的点到点的专线技术,所谓虚拟是指不需要去拉实际的长途物理线路,而是借用公共的Internet网络实现。

2、vpn 作用

  vpn可以帮助公司用的远程用户(出差,家里)公司的分之机构、商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者局域网连接,确保数据的加密安全传输和业务访问,对于运维工程师来说,还可以连接不同的机房为局域网,处理相关的业务流。

3、常见vpn功能的开源产品

  pptp vpn  

  最大优势在于无需在windows客户端单独安装vpn客户端软件,windows默认就支持pptp vpn拨号功能。他是属于点对点的方式应用,比较适合远程企业用户拨号到企业进行办公等应用,缺点很多小区及网络设备不支持pptp导致无法访问。Openvpn和PPTP VPN相比存在诸多的优势,最明显的是Openvpn支持NAT穿越,也就是说在nat环境下使用openvpn只需要一个在路由器上做一个端口映射即可!不需要其他路由的支持,要知道不是所有的路由器都支持配置NAT穿越,只有高级的路由器才提供这种功能!其次openvpn使用证书加密数据传输,安全性方便也优于PPTP VPN,但在配置方面比PPTP VPN要复杂许多!而且openvpn客户端登录只需要双击就可以连接服务器端,从感官上反而觉得安全性低,因而下面介绍下openvpn使用user/pass方式用户验证登录,使用这种方式验证用户登录在注销用户账号的时候只要删除密码文件中的记录即可,非常的方便!

  SSL VPN(openvpn)

  PPTP主要为常在外面移动或者家庭办公的用户考虑的,而OpenVpn不但可以使用与PPTP的场景,还是和针对企业异地两地总分公司之间的vpn不间断按需链接,例如:ERP,OA及时通讯工具等在总分公司企业中的应用,缺点:需要单独安装客户端软件。

  IPSEC VPN 

  也适合针对企业异地两地中分公司或者多个IDC机房之间的VPN的不间断按需链接,并且在部署使用上更简单方便。IPSEC Vpn的开源产品openswan.

4、openvpn介绍

  OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。

  OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1 协议函式库。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

  OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。 OpenVPN所有的通信都基于一个单一的IP端口, 默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客 户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们, 可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。

二、OpenVPN安装


1. 环境说明

OpenVPN CentOS7 安装部署配置详解

2. 准备工作

# 关闭selinux
setenforce
sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度
yum -y install openssl openssl-devel
yum -y install lzo

#开启路由转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

3. 源安装

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-10.noarch.rpm
rpm -Uvh epel-release--.noarch.rpm
yum install openvpn -y
yum install easy-rsa #安装easy-rsa生成密钥

4. 生成密钥

首先配置环境变量:
# cp -R /usr/share/easy-rsa/ /etc/openvpn
# cat /etc/openvpn/easy-rsa/2.0/vars  | grep -v "^#"

export EASY_RSA="`pwd`" export OPENSSL="openssl" export PKCS11TOOL="pkcs11-tool" export GREP="grep" export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` export KEY_DIR="$EASY_RSA/keys" echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export PKCS11_MODULE_PATH="dummy" export PKCS11_PIN="dummy" export KEY_SIZE= export CA_EXPIRE= export KEY_EXPIRE= export KEY_COUNTRY="CN" export KEY_PROVINCE="SH" export KEY_CITY="SH" export KEY_ORG="TY" export KEY_EMAIL="lalala@test.com" export KEY_OU="shop" export KEY_NAME="EasyRSA" export KEY_CN="server"

生成秘钥:
# 初始化环境变量
cd /etc/openvpn/easy-rsa/2.0/ source vars # 清除keys目录下所有与证书相关的文件 # 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里 ./clean-all # 生成根证书ca.crt和根密钥ca.key(一路按回车即可) ./build-ca # 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次) ./build-key-server server # 每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份 # 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次) ./build-key client1 ./build-key client2 # 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它) ./build-dh # 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击) openvpn --genkey --secret keys/ta.key

# 将证书文件复制到OpenVPN配置目录中
cd /etc/openvpn/easy-rsa/2.0/keys
cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn/server
cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf /etc/openvpn/server/

5. Server端配置举例,server.conf详解请参考另一半文章:OpenVPN Server端配置详解

# cat /etc/openvpn/server/server.conf

local 10.2.2.37 port proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" #client连接后使用server的网络环境 push "dhcp-option DNS 223.5.5.5" #经测试,需向client push DNS并且防火墙开启masquerade,client才能通过server访问互联网 client-to-client duplicate-cn keepalive cipher AES--CBC comp-lzo persist-key persist-tun status openvpn-status.log log-append openvpn.log verb explicit-exit-notify script-security
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env #配置使用密码验证 client-cert-not-required username-as-common-name

6. 防火墙配置

首先启动firewalld
systemctl status firewalld.service

查看有哪些服务已经在列表中允许通过:
# firewall-cmd --list-services
dhcpv6-client http https ssh

可以看到已经有了dhcpv6-client, http, https, ssh四项,接下来添加openvpn:
# firewall-cmd --add-service openvpn
success
# firewall-cmd --permanent --add-service openvpn
success

最后添加masquerade,测试开启此项,client才能通过server访问互联网:
# firewall-cmd --add-masquerade
success
# firewall-cmd --permanent --add-masquerade
success

以下命令用于确认masquerade是否添加成功:
# firewall-cmd --query-masquerade
yes

7. 启动服务,若实现开机自启动请将以下命令加入/etc/rc.d/rc.local并赋予rc.local可执行权限

openvpn --config /etc/openvpn/server/server.conf >> /dev/>& &

三.、设置使用password登录详解


1. 修改服务器端配置:

# vim /etc/openvpn/server/server.conf
在配置文件最后面添加如下几行数据
script-security  system     #允许通过环境变量将密码传递给脚本
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env   #提供一个用户名密码对
client-cert-not-required             #不使用客户端证书,使用密码对
username-as-common-name              #使用认证用户名,不使用证书的common name

2. 创建checkpsw.sh脚本,放在/etc/openvpn/路径下:

# cat /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="/var/log/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 

3. 创建psw-file文件:

# cd /etc/openvpn/server
# echo "shenzhen  password%1" > psw-file        #创建账号密码,可以多行,每行一组
 psw-file                   #修改文件权限,我是用root权限执行的

4. 重启服务:

# ps -ef | grep openvpn|grep -v grep| awk '{print $2}' |xargs kill
# openvpn --config /etc/openvpn/server/server.conf >> /dev/>& &

四、客户端配置


  OpenVPN目前是被河蟹状态,需要FQ去官网下载最新版本客户端,下载之后需要从服务器打包生成的证书文件,解压到客户端安装目录下的config目录中,并创建客户端配置文件client.ovpn:

  客户端配置详解请参考另一篇文章:OpenVPN Client端配置文件详解说明

client
dev tun
proto udp
remote
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
;cert client.crt
;key client.key
comp-lzo
verb
auth-user-pass             #客户端使用账号密码登录
reneg-sec 

 

  打开客户端,输入用户名密码登录。 登录问题可以参考服务端/etc/openvpn/server/openvpn.log

OpenVPN CentOS7 安装部署配置详解

参考:

https://openvpn.net/index.php/open-source/documentation.html

http://qiyishi.blog.51cto.com/5731577/1575758

http://blog.csdn.net/skykingf/article/details/50611061

OpenVPN CentOS7 安装部署配置详解的更多相关文章

  1. Nginx安装及配置详解【转】

    nginx概述 nginx是一款*的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  2. &lbrack;转帖&rsqb;Nginx安装及配置详解 From https&colon;&sol;&sol;www&period;cnblogs&period;com&sol;zhouxinfei&sol;p&sol;7862285&period;html

    Nginx安装及配置详解   nginx概述 nginx是一款*的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...

  3. Linux中Nginx安装与配置详解

    转载自:http://www.linuxidc.com/Linux/2016-08/134110.htm Linux中Nginx安装与配置详解(CentOS-6.5:nginx-1.5.0). 1 N ...

  4. Tomcat安装及配置详解

    Tomcat安装及配置详解   一,Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Found ...

  5. libCURL开源库在VS2010环境下编译安装,配置详解

    libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...

  6. nginx在linux上的安装与配置详解(一)

    Nginx的安装与配置详解 (1)nginx简介     nginx概念: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like ...

  7. Linux NFS服务器的安装与配置详解

    一.NFS服务简介 NFS是Network File System(网络文件系统).主要功能是通过网络让不同的服务器之间可以共享文件或者目录.NFS客户端一般是应用服务器(比如web,负载均衡等),可 ...

  8. CentOS 7下Samba服务安装与配置详解

    1. Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共 ...

  9. &lpar;转&rpar;CentOS7安装KVM虚拟机详解

    原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E ...

随机推荐

  1. vue 2&period;0版本----》常用代码说明

    ------------------------------------------代码不显示-------------------------------------------- [v-cloak ...

  2. bootstrap学习笔记之三(组件的使用)

    bootstrap组件需要引入bootstrap.js才行,当然要引入bootstrap.js首先得引入JQuery. 一.下拉菜单 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另 ...

  3. 推荐一个sqlce&comma;sqllite等数据库管理工具

    推荐一个sqlce,sqllite等数据库管理工具 下载地址: http://fishcodelib.com/files/DatabaseNet4.zip 支持sqlserver,sqlce, sql ...

  4. vs克隆新建团队项目

    团队资源——克隆,完成后打开: 在解决方案资源中,添加——新建项目——web——ASP.NET web应用程序——空的,并将其设为启动项目:

  5. 读书笔记:《HTML5开发手册》Web表单

    这是补充HTML5基础知识的第五篇内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四 ...

  6. WEB前端:浏览器(IE&plus;Chrome&plus;Firefox)常见兼容问题处理--01

    兼容问题目录 1.IE6下怪异盒模型 2.IE6下最小高度问题 3.IE6下不支持1px的点线 4.IE6下内容会把父级的高度撑开 5.IE6下只支持给a标签添加伪类 6.IE67下不支持给块标签加d ...

  7. &period;NET Core----zipkin链路追踪使用

    本文主要是说明core怎么使用链路追踪 一.添加nuget包 二.在Startup中添加配置 /// <summary> /// 注册zipkinTrace /// </summar ...

  8. mysql &lowbar;触发器

    MySQL 触发器 MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 1.创建触发器在MySQL ...

  9. javascript之奇淫技巧

    最近准备面试,复习一下javascript,整理了一些javascript的奇淫技巧~ //为兼容ie的模拟Object.keys() Object.showkeys = function(obj) ...

  10. 万年历&lpar;hao123&rpar;代码

    网上有很多类似的代码,比如网站:hao123,IP138.日梭万年历网络版 等等,不过日梭万年历相对比较详细,也可以看看另外一篇文章的介绍: 日梭万年历网络版:http://www.cnblogs.c ...