OpenVPN安装部署详解

文章目录

      • 环境
      • 安装准备
      • 安装服务
      • 服务端配置
        • 准备CA签发机构环境
        • 创建CA机构与服务器证书
        • open服务端配置
        • 服务端身份认证脚本
        • 身份认证用户名和密码文件
        • 启动open
      • 客户端文件配置
        • 准备客户端证书
        • 准备客户端配置文件
        • 测试
      • 问题
      • 参考

环境

服务器系统:CentOS Linux release 7.9.2009 (Core)
服务器IP:
	Open服务器:
		外网:39.107.97.154
		内网:172.24.86.0
	内网测试服务器:172.24.86.96,172.24.86.97,172.24.86.98
	open客户端服务器网段:192.168.10.0/24
OpenVpn版本:2.5.6
easy-rsa版本:3.0.8

安装包存放的路径:/opt/soft/
程序安装目录:/opt/install/open

安装准备

(以下所有操作均在Open服务器操作)
# 关闭防火墙
	[root@bj-zjk-001 ~]# systemctl stop firewalld
	[root@bj-zjk-001 ~]# systemctl disable firewalld

# 关闭selinux
	[root@bj-zjk-001 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
	[root@bj-zjk-001 ~]# setenforce 0
	
# 安装依赖
	[root@bj-zjk-001 ~]# yum install -y  vim wget lrzsz gcc-c++ openssl openssl-devel net-tools lzo lzo-devel pam pam-devel 

# 下载安装包
	[root@bj-zjk-001 ~]# mkdir /opt/soft
	[root@bj-zjk-001 ~]# cd /opt/soft
	[root@bj-zjk-001 ~]# wget https://swupdate.open.org/community/releases/open-2.5.6.tar.gz
	[root@bj-zjk-001 ~]# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

安装服务

#1)安装OpenVpn
[root@bj-zjk-001 ~]# mkdir /opt/install
[root@bj-zjk-001 ~]# cd /opt/soft

#解压缩
[root@bj-zjk-001 ~]# tar -zxvf open-2.5.6.tar.gz

[root@bj-zjk-001 ~]# cd open-2.5.6

#--prefix= 后面路径是安装open到那个文件路径下
[root@bj-zjk-001 ~]# ./configure --prefix=/opt/install/open/

#编译
[root@bj-zjk-001 ~]# make && make install

#添加open的环境变量
[root@bj-zjk-001 ~]# echo -e "PATH=\$PATH:/opt/install/open/sbin" >/etc/profile.d/open256.sh

#加载环境变量
[root@bj-zjk-001 ~]# source /etc/profile

#执行下面的命令看看是否成功,出现以下内容表示成功
[root@bj-zjk-001 ~]# open --version
OpenVPN 2.5.6 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Nov  5 2022

#2)安装EasyRSA
[root@bj-zjk-001 ~]# cd /opt/soft
[root@bj-zjk-001 ~]# tar -zxvf EasyRSA-3.0.8.tgz
[root@bj-zjk-001 ~]# mv EasyRSA-3.0.8 /opt/install/EasyRSA

服务端配置

准备CA签发机构环境
#拷贝EasyRSA
[root@bj-zjk-001 ~]# cp -r /opt/install/EasyRSA /opt/install/open/easy-rsa-server
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-server

#准备签发证书的默认变量文件
[root@bj-zjk-001 ~]# egrep -v "^$|^#" vars.example >vars

#编辑vars文件,在最后一行增加以下内容
[root@bj-zjk-001 ~]# vim vars
#添加参数,设置CA证书有效期为100年(日期可以你自己决定设置多长)
set_var EASYRSA_CA_EXPIRE 36500
#添加参数,设置服务器证书为10年
set_var EASYRSA_CERT_EXPIRE 3650
创建CA机构与服务器证书
#1)创建CA机构
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-server

#初始化,执行此命令会生成pki目录
[root@bj-zjk-001 ~]# ./easyrsa init-pki

#创建CA机构,nopass代表不需要密码的意思
[root@bj-zjk-001 ~]# ./easyrsa build-ca nopass
	#这里是CA机构的名称,我这边使用的是CATEST,这个名字可以用默认的也可以你自己输入
	Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CATEST
	#执行创建ca机构成功的话,会出现下面的这个ca.crt文件
	Your new CA certificate file for publishing is at:
/opt/install/open/easy-rsa-server/pki/ca.crt

#CA证书文件
[root@bj-zjk-001 ~]# ls -l /opt/install/open/easy-rsa-server/pki/ca.crt
-rw------- 1 root root 1151 115 17:30 /opt/install/open/easy-rsa-server/pki/ca.crt

#CA秘钥文件
[root@bj-zjk-001 ~]# ls -l /opt/install/open/easy-rsa-server/pki/private/ca.key
-rw------- 1 root root 1679 115 17:29 /opt/install/open/easy-rsa-server/pki/private/ca.key

#2)创建服务端证书
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-server

#创建服务端证书申请文件,openserver为了区别参数标识,我这里设置为openserver,如果你自己安装的话可以使用默认的server 这个名称
[root@bj-zjk-001 ~]# ./easyrsa gen-req openserver nopass
	#默认回车就行
	Common Name (eg: your user, host, or server name) [openserver]:
	Keypair and certificate request completed. Your files are:
	#请求文件
	req: /opt/install/open/easy-rsa-server/pki/reqs/openserver.req
	#私钥文件
	key: /opt/install/open/easy-rsa-server/pki/private/openserver.key

#3)签发服务端证书
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-server

#这里的server是代表服务端意思,openserver这个是上面我们创建的服务端证书的名称
[root@bj-zjk-001 ~]# ./easyrsa sign server openserver
	#输入yes
	Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
  	#服务端的证书文件
	Certificate created at: /opt/install/open/easy-rsa-server/pki/issued/openserver.crt

#4)创建交互秘钥
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-server

[root@bj-zjk-001 ~]# ./easyrsa gen-dh
	DH parameters of size 2048 created at /opt/install/open/easy-rsa-server/pki/dh.pem

#5) 启用安全增强配置
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-server
[root@bj-zjk-001 ~]# open --genkey tls-auth ta.key
open服务端配置
#创建open用户
[root@bj-zjk-001 ~]# groupadd open
[root@bj-zjk-001 ~]# useradd -M -s /sbin/nologin -g open open

# 创建证书存放目录
[root@bj-zjk-001 ~]# mkdir /opt/install/open/certificate

# 创建日志存放目录
[root@bj-zjk-001 ~]# mkdir /opt/install/open/logs

# 将服务端证书秘钥和交互秘钥复制到certificate目录
[root@bj-zjk-001 ~]# cp /opt/install/open/easy-rsa-server/pki/ca.crt /opt/install/open/certificate/
[root@bj-zjk-001 ~]# cp /opt/install/open/easy-rsa-server/pki/issued/openserver.crt  /opt/install/open/certificate/
[root@bj-zjk-001 ~]# cp /opt/install/open/easy-rsa-server/pki/private/openserver.key  /opt/install/open/certificate/
[root@bj-zjk-001 ~]# cp /opt/install/open/easy-rsa-server/pki/dh.pem  /opt/install/open/certificate/
[root@bj-zjk-001 ~]# cp /opt/install/open/easy-rsa-server/ta.key  /opt/install/open/certificate/

#添加配置文件
[root@bj-zjk-001 ~]# cd /opt/install/open/
[root@bj-zjk-001 ~]# vim /opt/install/open/server.conf
#__server.conf—stat___
#端口
port 1194
#协议
proto tcp
dev tun
#ca证书文件
ca /opt/install/open/certificate/ca.crt
#服务端证书文件
cert /opt/install/open/certificate/openserver.crt
#服务端私钥文件
key /opt/install/open/certificate/openserver.key
#交换秘钥文件
dh /opt/install/open/certificate/dh.pem
#安全增强文件,0是服务端,1是客户端
tls-auth /opt/install/open/certificate/ta.key 0
#分配客户端IP的网段,不能和服务器一个网段,不能冲突
server 10.8.0.0 255.255.255.0
#运行通讯的内网路由,可以多条
push "route 172.24.86.0 255.255.255.0"
#会话检测,每十秒测试一下,超过120秒没回应就认为对方down
keepalive 10 120
#加密算法
cipher AES-256-CBC
#压缩算法
compress lz4-v2
#推送客户端使用lz4-v2算法
push "compress lz4-v2"
#最大客户端数
max-clients 100
#运行open的用户和用户组
user open
group open
#地址池记录文件位置
ifconfig-pool-persist ipp.txt
#配置密码
auth-user-pass-verify /opt/install/open/checkpsw.sh via-env
username-as-common-name
script-security 3
#状态日志
status  /opt/install/open/logs/open-status.log
log-append /opt/install/open/logs/open.log
#日志级别
verb 4
mute 20
#__server.conf—end___


#内核转发规则
[root@bj-zjk-001 ~]# echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
[root@bj-zjk-001 ~]# sysctl -p

#iptablesNAT规则  -- 注意:该行不执行容易导致其它同网断的其它服务器使用内网IP连接不上
#这里的ip就是server.conf 中的server 10.8.0.0 255.255.255.0 ;添加转发规则到开机启动项
[root@bj-zjk-001 ~]# echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE' >> /etc/rc.d/rc.local
[root@bj-zjk-001 ~]# chmod +x /etc/rc.d/rc.local
[root@bj-zjk-001 ~]# /etc/rc.d/rc.local
服务端身份认证脚本
#创建如下文件,并覆盖如下的所有内容
[root@bj-zjk-001 ~]# vim /opt/install/open/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="/opt/install/open/psw-file"
LOG_FILE="/opt/install/open/logs/open-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
身份认证用户名和密码文件
#创建用户名和密码文件,用户名和密码使用空格分隔
[root@bj-zjk-001 ~]# vim /opt/install/open/psw-file
qianfeng01 qianfeng001
启动open
#如果使用普通用户运行open服务,需要对安装目录下所有授权。如果使用root运行,泽不需要执行如下一行命令
[root@bj-zjk-001 ~]# chown -R open:open /opt/install/open

# 创建启动文件
[root@bj-zjk-001 ~]# vim /etc/systemd/system/open.service
[Unit]
Description=OpenVPN Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
ExecStart=/opt/install/open/sbin/open --config /opt/install/open/server.conf


#加载系统服务
[root@bj-zjk-001 ~]# systemctl daemon-reload
#开机启动
[root@bj-zjk-001 ~]# systemctl enable open.service
#启动服务
[root@bj-zjk-001 ~]# systemctl start open.service
#查看服务运行状态
[root@bj-zjk-001 ~]# systemctl status open.service

客户端文件配置

准备客户端证书
#1)创建客户端申请证书
[root@bj-zjk-001 ~]# cp -r /opt/install/EasyRSA /opt/install/open/easy-rsa-client
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-client
#初始化,执行此命令会生成pki目录
[root@bj-zjk-001 ~]# ./easyrsa init-pki
#创建客户端申请证书,我这里用的是名字全拼
[root@bj-zjk-001 ~]# ./easyrsa gen-req liyadong nopass
	#直接回车就行
	Common Name (eg: your user, host, or server name) [zhangsan]:
    req: /opt/install/open/easy-rsa-client/pki/reqs/zhangsan.req
    key: /opt/install/open/easy-rsa-client/pki/private/zhangsan.key

#2)服务端签发证书
[root@bj-zjk-001 ~]# cd /opt/install/open/easy-rsa-server
#将客户端证书复制到CA工作目录
[root@bj-zjk-001 ~]# ./easyrsa import-req /opt/install/open/easy-rsa-client/pki/reqs/liyadong.req liyadong
#设置客户端证书有效期,我这里设置的是1080天
[root@bj-zjk-001 ~]# sed -i "s/set_var EASYRSA_CERT_EXPIRE.*$/set_var EASYRSA_CERT_EXPIRE\t1080/g" ./vars
#签发证书
[root@bj-zjk-001 ~]# ./easyrsa sign client liyadong
	#输入yes
	Type the word 'yes' to continue, or any other input to abort.
  Confirm request details:yes
  #生成的证书
  Certificate created at: /opt/install/open/easy-rsa-server/pki/issued/liyadong.crt
准备客户端配置文件
#创建存放目录
[root@bj-zjk-001 ~]# mkdir /opt/install/open/client/
#创建张三证书存放的目录
[root@bj-zjk-001 ~]# mkdir /opt/install/open/client/liyadong
#复制证书
[root@bj-zjk-001 ~]# find /opt/install/open/ \( -name "liyadong.key" -o -name "liyadong.crt" -o -name "ca.crt" -o -name "ta.key" \) -exec cp {}  /opt/install/open/client/liyadong \;

[root@bj-zjk-001 ~]# vim /opt/install/open/client/liyadong/client.o
client
dev tun
proto tcp
remote 39.107.97.154 1194
resolv-retry infinite
nobind
ca ca.crt
cert liyadong.crt
key liyadong.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
compress lz4-v2
auth-user-pass
persist-key
persist-tun
key-direction 1
测试
#将证书下载下来
[root@bj-zjk-001 ~]# cd /opt/install/open/client/
[root@bj-zjk-001 ~]# tar -zcvf liyadong.tar.gz liyadong 
#将证书下载到本地使用open添加上导入*.opn文件即可

问题

1、目录权限不够,启动有问题

[root@bj-zjk-001 ~]# chown open:open /opt/install/open/logs
[root@bj-zjk-001 ~]# chown open:open /opt/install/open/checkpsw.sh
[root@bj-zjk-001 ~]# chown open:open /opt/install/open/psw-file

2、客户端连接成功后,使用内网IP不能ping通任何一台服务器

#运行通讯的内网路由,可以多条
push "route 172.24.0.0 255.255.255.0"
修改成如下
push "route 172.24.86.0 255.255.255.0"

3、客户端连接成功后,使用内网IP只能ping通安装open所在服务器

#在open所安装服务器执行如下
#iptablesNAT规则  -- 注意:该行不执行容易导致其它同网断的其它服务器使用内网IP连接不上
#这里的ip就是server.conf 中的server 10.8.0.0 255.255.255.0 ;添加转发规则到开机启动项
[root@bj-zjk-001 ~]# echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE' >> /etc/rc.d/rc.local
[root@bj-zjk-001 ~]# chmod +x /etc/rc.d/rc.local
[root@bj-zjk-001 ~]# /etc/rc.d/rc.local

4、客户端连接时后不弹密码

#客户端配置文件加入下面这些
auth-user-pass
persist-key
persist-tun
key-direction 1

参考

https://blog.csdn.net/m0_69013817/article/details/124589686

你可能感兴趣的:(大数据运维,vpn安装,OpenVPN安装,OpenVPN配置,OpenVPN部署)