• OpenVPN安装部署详解


    环境

    服务器系统:CentOS Linux release 7.9.2009 (Core)
    服务器IP:
    	Openvpn服务器:
    		外网:39.107.97.154
    		内网:172.24.86.0
    	内网测试服务器:172.24.86.96,172.24.86.97,172.24.86.98
    	openvpn客户端服务器网段:192.168.10.0/24
    OpenVpn版本:2.5.6
    easy-rsa版本:3.0.8
    
    安装包存放的路径:/opt/soft/
    程序安装目录:/opt/install/openvpn
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    安装准备

    (以下所有操作均在Openvpn服务器操作)
    # 关闭防火墙
    	[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.openvpn.org/community/releases/openvpn-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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    安装服务

    #1)安装OpenVpn
    [root@bj-zjk-001 ~]# mkdir /opt/install
    [root@bj-zjk-001 ~]# cd /opt/soft
    
    #解压缩
    [root@bj-zjk-001 ~]# tar -zxvf openvpn-2.5.6.tar.gz
    
    [root@bj-zjk-001 ~]# cd openvpn-2.5.6
    
    #--prefix= 后面路径是安装openvpn到那个文件路径下
    [root@bj-zjk-001 ~]# ./configure --prefix=/opt/install/openvpn/
    
    #编译
    [root@bj-zjk-001 ~]# make && make install
    
    #添加openvpn的环境变量
    [root@bj-zjk-001 ~]# echo -e "PATH=\$PATH:/opt/install/openvpn/sbin" >/etc/profile.d/openvpn256.sh
    
    #加载环境变量
    [root@bj-zjk-001 ~]# source /etc/profile
    
    #执行下面的命令看看是否成功,出现以下内容表示成功
    [root@bj-zjk-001 ~]# openvpn --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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    服务端配置

    准备CA签发机构环境
    #拷贝EasyRSA
    [root@bj-zjk-001 ~]# cp -r /opt/install/EasyRSA /opt/install/openvpn/easy-rsa-server
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    创建CA机构与服务器证书
    #1)创建CA机构
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/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/openvpn/easy-rsa-server/pki/ca.crt
    
    #CA证书文件
    [root@bj-zjk-001 ~]# ls -l /opt/install/openvpn/easy-rsa-server/pki/ca.crt
    -rw------- 1 root root 1151 115 17:30 /opt/install/openvpn/easy-rsa-server/pki/ca.crt
    
    #CA秘钥文件
    [root@bj-zjk-001 ~]# ls -l /opt/install/openvpn/easy-rsa-server/pki/private/ca.key
    -rw------- 1 root root 1679 115 17:29 /opt/install/openvpn/easy-rsa-server/pki/private/ca.key
    
    #2)创建服务端证书
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/easy-rsa-server
    
    #创建服务端证书申请文件,openvpnserver为了区别参数标识,我这里设置为openvpnserver,如果你自己安装的话可以使用默认的server 这个名称
    [root@bj-zjk-001 ~]# ./easyrsa gen-req openvpnserver nopass
    	#默认回车就行
    	Common Name (eg: your user, host, or server name) [openvpnserver]:
    	Keypair and certificate request completed. Your files are:
    	#请求文件
    	req: /opt/install/openvpn/easy-rsa-server/pki/reqs/openvpnserver.req
    	#私钥文件
    	key: /opt/install/openvpn/easy-rsa-server/pki/private/openvpnserver.key
    
    #3)签发服务端证书
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/easy-rsa-server
    
    #这里的server是代表服务端意思,openvpnserver这个是上面我们创建的服务端证书的名称
    [root@bj-zjk-001 ~]# ./easyrsa sign server openvpnserver
    	#输入yes
    	Type the word 'yes' to continue, or any other input to abort.
      Confirm request details: yes
      	#服务端的证书文件
    	Certificate created at: /opt/install/openvpn/easy-rsa-server/pki/issued/openvpnserver.crt
    
    #4)创建交互秘钥
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/easy-rsa-server
    
    [root@bj-zjk-001 ~]# ./easyrsa gen-dh
    	DH parameters of size 2048 created at /opt/install/openvpn/easy-rsa-server/pki/dh.pem
    
    #5) 启用安全增强配置
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/easy-rsa-server
    [root@bj-zjk-001 ~]# openvpn --genkey tls-auth ta.key
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    openvpn服务端配置
    #创建openvpn用户
    [root@bj-zjk-001 ~]# groupadd openvpn
    [root@bj-zjk-001 ~]# useradd -M -s /sbin/nologin -g openvpn openvpn
    
    # 创建证书存放目录
    [root@bj-zjk-001 ~]# mkdir /opt/install/openvpn/certificate
    
    # 创建日志存放目录
    [root@bj-zjk-001 ~]# mkdir /opt/install/openvpn/logs
    
    # 将服务端证书秘钥和交互秘钥复制到certificate目录
    [root@bj-zjk-001 ~]# cp /opt/install/openvpn/easy-rsa-server/pki/ca.crt /opt/install/openvpn/certificate/
    [root@bj-zjk-001 ~]# cp /opt/install/openvpn/easy-rsa-server/pki/issued/openvpnserver.crt  /opt/install/openvpn/certificate/
    [root@bj-zjk-001 ~]# cp /opt/install/openvpn/easy-rsa-server/pki/private/openvpnserver.key  /opt/install/openvpn/certificate/
    [root@bj-zjk-001 ~]# cp /opt/install/openvpn/easy-rsa-server/pki/dh.pem  /opt/install/openvpn/certificate/
    [root@bj-zjk-001 ~]# cp /opt/install/openvpn/easy-rsa-server/ta.key  /opt/install/openvpn/certificate/
    
    #添加配置文件
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/
    [root@bj-zjk-001 ~]# vim /opt/install/openvpn/server.conf
    #__server.conf—stat___
    #端口
    port 1194
    #协议
    proto tcp
    dev tun
    #ca证书文件
    ca /opt/install/openvpn/certificate/ca.crt
    #服务端证书文件
    cert /opt/install/openvpn/certificate/openvpnserver.crt
    #服务端私钥文件
    key /opt/install/openvpn/certificate/openvpnserver.key
    #交换秘钥文件
    dh /opt/install/openvpn/certificate/dh.pem
    #安全增强文件,0是服务端,1是客户端
    tls-auth /opt/install/openvpn/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
    #运行openvpn的用户和用户组
    user openvpn
    group openvpn
    #地址池记录文件位置
    ifconfig-pool-persist ipp.txt
    #配置密码
    auth-user-pass-verify /opt/install/openvpn/checkpsw.sh via-env
    username-as-common-name
    script-security 3
    #状态日志
    status  /opt/install/openvpn/logs/openvpn-status.log
    log-append /opt/install/openvpn/logs/openvpn.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    服务端身份认证脚本
    #创建如下文件,并覆盖如下的所有内容
    [root@bj-zjk-001 ~]# vim /opt/install/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="/opt/install/openvpn/psw-file"
    LOG_FILE="/opt/install/openvpn/logs/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    身份认证用户名和密码文件
    #创建用户名和密码文件,用户名和密码使用空格分隔
    [root@bj-zjk-001 ~]# vim /opt/install/openvpn/psw-file
    qianfeng01 qianfeng001
    
    • 1
    • 2
    • 3
    启动openvpn
    #如果使用普通用户运行openvpn服务,需要对安装目录下所有授权。如果使用root运行,泽不需要执行如下一行命令
    [root@bj-zjk-001 ~]# chown -R openvpn:openvpn /opt/install/openvpn
    
    # 创建启动文件
    [root@bj-zjk-001 ~]# vim /etc/systemd/system/openvpn.service
    [Unit]
    Description=OpenVPN Server
    After=network.target
    After=syslog.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    ExecStart=/opt/install/openvpn/sbin/openvpn --config /opt/install/openvpn/server.conf
    
    
    #加载系统服务
    [root@bj-zjk-001 ~]# systemctl daemon-reload
    #开机启动
    [root@bj-zjk-001 ~]# systemctl enable openvpn.service
    #启动服务
    [root@bj-zjk-001 ~]# systemctl start openvpn.service
    #查看服务运行状态
    [root@bj-zjk-001 ~]# systemctl status openvpn.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    客户端文件配置

    准备客户端证书
    #1)创建客户端申请证书
    [root@bj-zjk-001 ~]# cp -r /opt/install/EasyRSA /opt/install/openvpn/easy-rsa-client
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/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/openvpn/easy-rsa-client/pki/reqs/zhangsan.req
        key: /opt/install/openvpn/easy-rsa-client/pki/private/zhangsan.key
    
    #2)服务端签发证书
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/easy-rsa-server
    #将客户端证书复制到CA工作目录
    [root@bj-zjk-001 ~]# ./easyrsa import-req /opt/install/openvpn/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/openvpn/easy-rsa-server/pki/issued/liyadong.crt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    准备客户端配置文件
    #创建存放目录
    [root@bj-zjk-001 ~]# mkdir /opt/install/openvpn/client/
    #创建张三证书存放的目录
    [root@bj-zjk-001 ~]# mkdir /opt/install/openvpn/client/liyadong
    #复制证书
    [root@bj-zjk-001 ~]# find /opt/install/openvpn/ \( -name "liyadong.key" -o -name "liyadong.crt" -o -name "ca.crt" -o -name "ta.key" \) -exec cp {}  /opt/install/openvpn/client/liyadong \;
    
    [root@bj-zjk-001 ~]# vim /opt/install/openvpn/client/liyadong/client.ovpn
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    测试
    #将证书下载下来
    [root@bj-zjk-001 ~]# cd /opt/install/openvpn/client/
    [root@bj-zjk-001 ~]# tar -zcvf liyadong.tar.gz liyadong 
    #将证书下载到本地使用openvpn添加上导入*.opnvpn文件即可
    
    • 1
    • 2
    • 3
    • 4

    问题

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

    [root@bj-zjk-001 ~]# chown openvpn:openvpn /opt/install/openvpn/logs
    [root@bj-zjk-001 ~]# chown openvpn:openvpn /opt/install/openvpn/checkpsw.sh
    [root@bj-zjk-001 ~]# chown openvpn:openvpn /opt/install/openvpn/psw-file
    
    • 1
    • 2
    • 3

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

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

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

    #在openvpn所安装服务器执行如下
    #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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    参考

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

  • 相关阅读:
    idea安装MyBatisX插件,没有效果
    简述事务隔离级别
    Codeforces Round 894 (Div. 3) E. Kolya and Movie Theatre
    【Spring Boot 使用记录】kafka自动配置和自定义配置及消费者
    乐观型人格分析,性格乐观的优缺点和职业发展分析
    cnpm的版本锁定问题的解决方案
    ElasticSearch from + size 分页查询过程分析,及其官方ES深度分页性能优化方法
    14-vue项目搭建.md
    Oracle EBS R12 DBA(二)
    java01
  • 原文地址:https://blog.csdn.net/u010839779/article/details/133817774