OpenVPN CentOS7 安装部署配置详解
一 、概念相关
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. 环境说明
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
参考:
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 安装部署配置详解的更多相关文章
- Nginx安装及配置详解【转】
nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...
- [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html
Nginx安装及配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...
- Linux中Nginx安装与配置详解
转载自:http://www.linuxidc.com/Linux/2016-08/134110.htm Linux中Nginx安装与配置详解(CentOS-6.5:nginx-1.5.0). 1 N ...
- Tomcat安装及配置详解
Tomcat安装及配置详解 一,Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Found ...
- libCURL开源库在VS2010环境下编译安装,配置详解
libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...
- nginx在linux上的安装与配置详解(一)
Nginx的安装与配置详解 (1)nginx简介 nginx概念: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like ...
- Linux NFS服务器的安装与配置详解
一.NFS服务简介 NFS是Network File System(网络文件系统).主要功能是通过网络让不同的服务器之间可以共享文件或者目录.NFS客户端一般是应用服务器(比如web,负载均衡等),可 ...
- CentOS 7下Samba服务安装与配置详解
1. Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共 ...
- (转)CentOS7安装KVM虚拟机详解
原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E ...
随机推荐
- spi master接口的fpga实现
前言 当你器件的引脚贼少的时候,需要主机和从机通信,spi就派上了用场,它可以一对多,但只是片选到的从机能和主机通信,其他的挂机. spi:serial peripheral interface 串行 ...
- Json作为配置文件注意事项
错误描述 在一次开发中,使用了JSON数据作为配置文件,但反序列化时总是出错,开始还以为是转义字符的问题,因为存了一个绝对路径(D:\xx\xx.json),后来测试发现竟然发现是类嵌套的问题. 解决 ...
- JSON取值(key是中文或者数字)方式详解
JSON取值(key是中文或者数字)方式详解 先准备一个json对象用于演示 var json = {'name':'zhangsan', '年龄':23, 404:'你可能迷路了'}; 使用JS中w ...
- 高性能消息队列 CKafka 核心原理介绍(上)
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...
- mysql初学,mysql修改,mysql查找,mysql删除,mysql基本命令
Mysql 下载地址https://dev.mysql.com/downloads/mysql/ 1.连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYS ...
- 玩转PS路径,轻松画logo!
轻松画图标!教你一分钟玩转PS路径描边 推荐: cyRotel 2014/11/24 in PS 教程 & 设计文章 @Micu设计 :Photoshop的路径工具和钢笔工具 ...
- 个人作业3-个人总结(Alpha阶段)
一.个人总结 1.团队状况:这是我们第一次团队开发,小组成员的编程水平都相对一般,要在一周内完成一个APP是一个很大的考验.再加上冲刺的那周团队大半成员都在为一个比赛培训,时间就更少了,曾经有很多次我 ...
- 201521145《Java程序设计》第2周学习总结
1. 本章学习总结 掌握了整数类型(byte short int long char),浮点型(float double),布尔型(boolean)的使用,以及它们的包装类Byte Short Int ...
- MongoDB中的映射,限制记录和记录拼排序 文档的插入查询更新删除操作
映射 在 MongoDB 中,映射(Projection)指的是只选择文档中的必要数据,而非全部数据.如果文档有 5 个字段,而你只需要显示 3 个,则只需选择 3 个字段即可. find() 方法 ...
- 【SQL】- 基础知识梳理(四) - 存储过程
存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行 存储过程的好处 A. 存储过程允许标准组件式编程 ...