• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

OpenVPN部署与应用【显哥出品,必为精品】

技术栈 lixian 4年前 (2020-08-05) 1388次浏览 0个评论 扫描二维码
文章目录[隐藏]

一、openVPN简介

VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。

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

二、openVPN服务端部署

1.环境准备

2.生成证书

#下载安装生成证书工具
[root@openvpn ~]# yum install -y easy-rsa

#准备证书
[root@openvpn ~]# mkdir /opt/easy-rsa
[root@openvpn ~]# cd /opt/easy-rsa
[root@openvpn /opt/easy-rsa]# cp -a /usr/share/easy-rsa/3.0.7/* ./
[root@openvpn /opt/easy-rsa]# cp -a /usr/share/doc/easy-rsa-3.0.7/vars.example ./vars

#编辑模板文件
[root@openvpn /opt/easy-rsa]# vim vars
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Shanghai"
set_var EASYRSA_REQ_CITY "Shanghai"
set_var EASYRSA_REQ_ORG "lx"
set_var EASYRSA_REQ_EMAIL "lixian656@qq.com"
set_var EASYRSA_NS_SUPPORT "yes"

#初始化证书
[root@openvpn /opt/easy-rsa]#  ./easyrsa init-pki

#生成根证书 
[root@openvpn /opt/easy-rsa]# ./easyrsa  build-ca
Enter New CA Key Passphrase:  #设置密码, 最多四位数
Re-Enter New CA Key Passphrase:  #确认密码
下一步回车即可

#生成服务端证书 
[root@openvpn /opt/easy-rsa]# ./easyrsa gen-req server  nopass
回车即可

#给服务端证书签名  
[root@openvpn /opt/easy-rsa]# ./easyrsa  sign server  server
根据提示输入 yes
输入跟证书密码

#生成一个算法  
[root@openvpn /opt/easy-rsa]# ./easyrsa  gen-dh

#创建客户端证书 
[root@openvpn /opt/easy-rsa]# ./easyrsa gen-req client nopass

#给客户端证书签名 
[root@openvpn /opt/easy-rsa]# ./easyrsa sign client client

#安装OpenVPN   
[root@openvpn /opt/easy-rsa]# yum install -y openvpn

#配置OpenVPN(把以下内容写入进去)
[root@openvpn /opt/easy-rsa]# vim /etc/openvpn/server.conf
port 1194 #端口
proto udp #协议
dev tun #采用路由隧道模式tun
ca ca.crt #ca证书文件位置
cert server.crt #服务端公钥名称
key server.key #服务端私钥名称
dh dh.pem #交换证书
server 10.8.0.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
push "route 172.16.1.0 255.255.255.0" #允许客户端访问内网172.16.1.0网段
ifconfig-pool-persist ipp.txt #地址池记录文件位置
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
max-clients 100 #最多允许100个客户端连接
status openvpn-status.log #日志记录位置
verb 3 #openvpn版本
client-to-client #客户端与客户端之间支持通信
log /var/log/openvpn.log #openvpn日志记录位置
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
duplicate-cn

#拷贝证书 
[root@openvpn /opt/easy-rsa]# cd /etc/openvpn/
[root@openvpn /etc/openvpn]# ll
total 4
drwxr-x--- 2 root openvpn    6 2020-04-25 05:23 client
drwxr-x--- 2 root openvpn    6 2020-04-25 05:23 server
-rw-r--r-- 1 root root    1029 2020-05-27 10:38 server.conf
[root@openvpn /etc/openvpn]# cp -a /opt/easy-rsa/pki/ca.crt ./
[root@openvpn /etc/openvpn]# cp -a /opt/easy-rsa/pki/issued/server.crt ./
[root@openvpn /etc/openvpn]# cp -a /opt/easy-rsa/pki/private/server.key  ./
[root@openvpn /etc/openvpn]# cp -a /opt/easy-rsa/pki/dh.pem  ./
[root@openvpn /etc/openvpn]# ll
total 24
-rw------- 1 root root    1172 2020-05-27 10:20 ca.crt
drwxr-x--- 2 root openvpn    6 2020-04-25 05:23 client
-rw------- 1 root root     424 2020-05-27 10:26 dh.pem
drwxr-x--- 2 root openvpn    6 2020-04-25 05:23 server
-rw-r--r-- 1 root root    1029 2020-05-27 10:38 server.conf
-rw------- 1 root root    4795 2020-05-27 10:23 server.crt
-rw------- 1 root root    1708 2020-05-27 10:22 server.key

#启动openvpn
[root@openvpn /etc/openvpn]# systemctl  -f enable   openvpn@server.service
[root@openvpn /etc/openvpn]# systemctl  start openvpn@server.service

三、Windows客户端部署

1.安装openvpn客户端

OpenVPN部署与应用【显哥出品,必为精品】

OpenVPN部署与应用【显哥出品,必为精品】

2.导出证书

[root@openvpn /etc/openvpn]# sz /opt/easy-rsa/pki/ca.crt 
[root@openvpn /etc/openvpn]# sz /opt/easy-rsa/pki/issued/client.crt 
[root@openvpn /etc/openvpn]# sz /opt/easy-rsa/pki/private/client.key 

OpenVPN部署与应用【显哥出品,必为精品】

3.编写client.ovpn文件

client #指定当前VPN是客户端
dev tun #使用tun隧道传输协议
proto udp #使用udp协议传输数据
remote 10.0.0.61 1194 #openvpn服务器IP地址端口号
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
nobind #不绑定本地特定的端口号
ca ca.crt #指定CA证书的文件路径
cert client.crt #指定当前客户端的证书文件路径
key client.key #指定当前客户端的私钥文件路径
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup

OpenVPN部署与应用【显哥出品,必为精品】

OpenVPN部署与应用【显哥出品,必为精品】

4.客户端启动openvpn

OpenVPN部署与应用【显哥出品,必为精品】
OpenVPN部署与应用【显哥出品,必为精品】

四、客户端OpenVPN访问内网网段

抓包分析数据包能抵达openVPN的内网地址,但无法与openVPN服务同内网网段主机进行通信,因为后端主机没有回10.8.0.0的路由,所以导致无法ping通,可以在后端主机增加一条抵达10.8.0.0的路由

服务端开启内核转发

[root@openvpn /etc/openvpn]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 

方式一:添加一条路由规则

[root@web01 ~]# route add -net 10.8.0.0/24 gw 172.16.1.61

方式二:添加防火墙规则

[root@openvpn /etc/openvpn]# systemctl  start firewalld.service
[root@openvpn /etc/openvpn]# firewall-cmd  --add-masquerade  --permanent 
success
[root@openvpn /etc/openvpn]# firewall-cmd  --add-service=openvpn --permanent
success
[root@openvpn /etc/openvpn]# firewall-cmd  --reload 
success
[root@openvpn /etc/openvpn]# firewall-cmd  --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh dhcpv6-client openvpn
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

测试可以ping通网段内的IP

OpenVPN部署与应用【显哥出品,必为精品】

五、双重身份验证登录openvpn客户端

1.修改配置文件(在文件最下方插入三条命令)

[root@openvpn /etc/openvpn]# vim /etc/openvpn/server.conf
script-security 3              #允许使用自定义脚本
auth-user-pass-verify /etc/openvpn/check.sh via-env
username-as-common-name         #用户密码登陆方式验证

2.编写脚本

[root@openvpn /etc/openvpn]# vim /etc/openvpn/check.sh
#!/bin/sh
PASSFILE="/etc/openvpn/openvpnfile"
LOG_FILE="/var/log/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 1
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 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
	echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
	exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1

3.给脚本赋予执行权限

[root@openvpn /etc/openvpn]# chmod +x check.sh

4.添加客户端openvpn用户和密码

[root@openvpn /etc/openvpn]# vim /etc/openvpn/openvpnfile
lx 123456

5.重启服务

[root@openvpn /etc/openvpn]# systemctl  restart openvpn@server.service 

6.客户端配置文件加入一行内容

auth-user-pass

OpenVPN部署与应用【显哥出品,必为精品】

7.客户端重新登录openvpn

OpenVPN部署与应用【显哥出品,必为精品】

OpenVPN部署与应用【显哥出品,必为精品】


本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:OpenVPN部署与应用【显哥出品,必为精品】
喜欢 (0)

您必须 登录 才能发表评论!