首页 > 系统相关 >centos7 搭建 open vpn新笔记

centos7 搭建 open vpn新笔记

时间:2023-12-13 21:01:35浏览次数:43  
标签:server centos7 etc client key openvpn vpn open 客户端

刚好这段时间需要用到openvpn,搭建起来也是遇到很多问题,所以在这里记录一下。

openvpn:OpenVPN是受欢迎的开源虚拟专用网络的软件包之一,它是一个全功能的SSL虚拟专用网络。它使用行业标准SSL/TLS协议实现OSI第2层或第3层安全网络扩展,支持基于证书、智能卡、用户名密码等多种的客户端身份验证方法,并将防火墙规则应用于虚拟接口,从而实现对用户或组的访问控制策略控制。

我的环境信息:我主要是记录搭建过程,所以都在虚拟机里面搭建,centos7一台(NAT模式,IP地址为192.168.110.200/24),win10一台(NAT模式,自动获取),由于我的环境,win10 本身就是跟centos 是互通的, 所以就不做后面的vpn连接后内网互通测试验证了。(仔细一点把,配置文件一点内容错,openvpn 就会各种问题都有。)

centos7 (前提保证能上网):

centos7 搭建 open vpn新笔记_vim

epel源

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm

安装openvpn、Easy-rsa

yum -y install openvpn easy-rsa

在/etc/openvpn文件夹下面创建easy-rsa文件夹,并把openvpn相关文件复制进去

mkdir /etc/openvpn/easy-rsa/ 
cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
cp -p /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars

我们将创建CA密钥,server端、client端密钥,DH和CRL PEM, TLS认证钥匙ta.key。

cd /etc/openvpn/easy-rsa/

初始化并建立CA证书(nopass 代表不需要密码)

./easyrsa init-pki
./easyrsa build-ca nopass  #(回车)

创建服务器密钥名称为 server.key

./easyrsa gen-req server nopass #(回车)

用CA证书签署server1密钥

./easyrsa sign-req server server #输入yes
创建客户端密钥

创建客户端密钥名称为 client.key

./easyrsa gen-req client nopass    #回车

用CA证书签署client1密钥

./easyrsa sign-req client client 输入yes
创建DH密钥

根据在顶部创建的vars配置文件生成2048位的密钥

./easyrsa gen-dh
创建TLS认证密钥
openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
.生成证书撤销列表(CRL)密钥

CRL(证书撤销列表)密钥用于撤销客户端密钥。如果服务器上有多个客户端证书,希望删除某个密钥,那么只需使用./easyrsa revoke NAME这个命令撤销即可。

生成CRL密钥:

./easyrsa  gen-crl
复制证书文件

复制ca证书,ta.key和server端证书及密钥到/etc/openvpn/server文件夹里

cp -p pki/ca.crt /etc/openvpn/server/
cp -p pki/issued/server.crt /etc/openvpn/server/
cp -p pki/private/server.key /etc/openvpn/server/
cp -p ta.key /etc/openvpn/server/

复制ca证书,ta.key和client端证书及密钥到/etc/openvpn/client文件夹里

 cp -p pki/ca.crt /etc/openvpn/client/
 cp -p pki/issued/client.crt /etc/openvpn/client/
 cp -p pki/private/client.key /etc/openvpn/client/
  cp -p ta.key /etc/openvpn/client/

复制dh.pem , crl.pem到/etc/openvpn/client文件夹里

cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
为服务端编写配置文件

当安装好了openvpn时候,他会提供一个server配置的文件例子,在/usr/share/doc/openvpn-2.3.2/sample/sample-config-files 下会有一个server.conf文件,我们将这个文件复制到/etc/openvpn/下。

cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/

编辑配置文件

vim /etc/openvpn/server.conf
local 0.0.0.0     #监听地址
  port 1194     #监听端口
  proto tcp     #监听协议
  dev tun     #采用路由隧道模式
  ca /etc/openvpn/server/ca.crt      #ca证书路径
  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     #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
  ifconfig-pool-persist ipp.txt
  push "redirect-gateway def1 bypass-dhcp"      #给网关
  push "route 192.168.0.0 255.255.255.0"           #推送客户端常用路由(根据自己内网网段来写或修改客户端配置添加路由)
  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 客户端连接
  tls-auth /etc/openvpn/server/ta.key 0
  user openvpn       #用户
  group openvpn      #用户组
  persist-key
  persist-tun
  status /var/log/openvpn/openvpn-status.log
  log         /var/log/openvpn/openvpn.log
  verb 3

可以注销

#explicit-exit-notify 1

配置日志路径跟权限

mkdir /var/log/openvpn
chown -R openvpn.openvpn /var/log/openvpn/
  chown -R openvpn.openvpn /etc/openvpn/*
iptables 设置nat 规则和打开路由转发
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens33(网卡根据实际情况调整) -j MASQUERADE
iptables -vnL -t nat  #查看
vim /etc/sysctl.conf //打开路由转发
 net.ipv4.ip_forward = 1
sysctl -p
开启openvpn 服务
openvpn /etc/openvpn/server.conf

后台运行-daemon参数表示后台运行,不加该参数前台会被占用,需要开新窗口

openvpn --daemon --config /etc/openvpn/server.conf

(setenforce 0  暂时关闭、firewalld 防火墙记得关掉,或者开放1194端口,)

查看

systemctl -f enable [email protected]

systemctl start [email protected]

ss -nutl |grep 1194


配置windows客户端自动连接vpn(方式1)

下载openvpn客户端(网盘敏感词发不出来,自行去百度下载把,最好找到跟openvpn 同版本的)


配置client 端配置文件

配置文件在服务端/usr/share/doc/openvpn-2.4.11/sample/sample-config-files/下,名称为clent.conf

复制到/root 目录下

cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /root/

修改 client.ovpn文件

vim /root/clent.conf
client
dev tun
proto tcp     //改为tcp
remote xxx.xxx.xxx.xxx 1194    //OpenVPN服务器的外网IP和端口,ip和域名都行
resolv-retry infinite
nobind
persist-key
persist-tun
ca 'C:\Program Files\OpenVPN\config\ca.crt'
cert 'C:\Program Files\OpenVPN\config\client1.crt'   //client1的证书
key 'C:\Program Files\OpenVPN\config\client1.key'       //client1的密钥
comp-lzo
verb 3

修改保存后把后缀名修改为ovpn

cp client.conf laotang6.ovpn


然后上传到win10 客户端, 我这里用的是winscp(没有的自己下载哈)

将服务端(/etc/openvpn/client/这个目录)的ca.crt client.crt client1.key下载到客户端本地的penvpn安装目录的config 目录下('C:\Program Files\OpenVPN\config\)

centos7 搭建 open vpn新笔记_vim_02


连接成功

centos7 搭建 open vpn新笔记_客户端_03




配置windows客户端使用用户名/密码方式连接vpn(方式2)

首先我们需要编写一个用户认证的脚本 (脚本是由openvpn官网提供的)

vim /etc/openvpn/checkpsw.sh

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman 
#
# 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 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


接下来给脚本执行权限

chmod 755 /etc/openvpn/checkpsw.sh

配置用户密码文件/etc/openvpn/psw-file

vim /etc/openvpn/psw-file  #账户密码中间用空格隔开
laotang 123456
abc 123456

还需要修改server.conf 文件

vim /etc/openvpn/server.conf

在最下面添加一些几行

script-security 3
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env    #指定用户认证脚本
username-as-common-name
verify-client-cert none

客户端文件也要修改,指定用账户密码连接。

client
dev tun
proto tcp
remote 公网ipxxx.xxx.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cipher AES-256-CBC
comp-lzo
verb 3
auth-user-pass              #使用用户名密码登录openvpn服务器
auth-nocache

然后把新的客户端文件ovpn 拷贝到win10, 重启启动服务,就需要账户密码才能登陆了

centos7 搭建 open vpn新笔记_服务器_04

#push "redirect-gateway def1 bypass-dhcp"      #这条命令可以重定向客户端的网关,在进行FQ时会使用,

     开启此选项客户端出口ip会成为openvpn服务器IP

#push "route 172.17.48.0 255.255.240.0"        #向客户端推送的路由信息,假如客户端的IP地址为10.8.0.2,

     要访问172.17.48.0网段的话,使用这条命令就可以了。




参考文章:https://www.jianshu.com/p/0ce6560b2279

标签:server,centos7,etc,client,key,openvpn,vpn,open,客户端
From: https://blog.51cto.com/laotang6/8806198

相关文章

  • openGauss学习笔记-156 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-156openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出单个数据库-导出数据库156.1导出数据库openGauss支持使用gs_dump工具导出某个数据库级的内容,包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息:导出......
  • openGauss学习笔记-157 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-157openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出单个数据库-导出模式157.1导出模式openGauss目前支持使用gs_dump工具导出模式级的内容,包含模式的数据和定义。用户可通过灵活的自定义方式导出模式内容,不仅支持选定一......
  • TSINGSEE青犀基于opencv的安全帽/反光衣/工作服AI检测算法自动识别及应用
    安全帽/反光衣/工作服自动识别检测算法可以通过opencv+yolo网络对现场画面中人员穿戴着装进行实时分析检测,判断人员是否穿着反光衣/安全帽。在应用场景中,安全帽/反光衣/工作服检测应用十分重要,通过对人员的规范着装进行实时监测与预警,可以降低安全隐患,提高安全性。Tips:OpenCV......
  • OpenGL的深度缓冲
      如果我们想要在三维空间里画两个正方形:一个红色的,一个绿色的,而且从人眼的观察角度看,绿色正方形在红色正方形的后面。最后看上去应该是这样的:要点在于,从观察者的角度看,绿色正方形在红色正方形的后面,因此绿色正方形的一部分被红色正方形遮挡。  然而,在启用深度测试前,正方形......
  • Centos7安装chrome、chromedrive
    安装流程yuminstallhttps://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpmcd/opt/google/chrome/wgethttp://npm.taobao.org/mirrors/chromedriver/114.0.5735.90/chromedriver_linux64.zipunzipchromedriver_linux64.zipchmod+x/opt/google/c......
  • 在 Kubernetes 中无侵入安装 OpenTelemetry 探针
    背景OpenTelemetry探针OpenTelemetry(简称Otel,最新的版本是1.27)是一个用于观察性的开源项目,提供了一套工具、APIs和SDKs,用于收集、处理和导出遥测数据(如指标、日志和追踪信息)。应用程序遥测数据(如追踪、指标和日志)的收集是通过探针来完成的,探针通常以库的形式集成到应用......
  • openGauss学习笔记-154 openGauss 数据库运维-备份与恢复-闪回恢复
    openGauss学习笔记-154openGauss数据库运维-备份与恢复-闪回恢复闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数分钟甚......
  • openGauss学习笔记-155 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-155openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-概述155.1概述openGauss提供的gs_dump和gs_dumpall工具,能够帮助用户导出需要的数据库对象或其相关信息。通过导入工具将导出的数据信息导入至需要的数据库,可以完成数据库......
  • openresty动态解析域名
    废话不多说直接上代码usernobody;worker_processesauto;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{worker_connections100000;}http{include......
  • OpenCASCADE Poly HLR Edge
    Abstract. HLRBRep_PolyAlgoisbasedontheprincipleofcomparingeachedgeoftheshapetobevisualizedwitheachofthetrianglesoftheshape,andcaculatingthevisibleandthehiddenpartsofeachedge.Foragivenprojection,HLRBRep_PolyAlgocalcu......