实现内网服务器的远程加密连接(长文预警)

一:OpenV-P-N 实验环境

注意,准备实验环境时,内网服务器的网段一定是在本机不能直接连接的;

1.1:实验拓扑

在这里插入图片描述

1.2:准备阿里云 ECS

1.2.1:购买 ECS

本次实验采用阿里云 ECS 来进行;

创建专用网络:

  • test-net:10.10.0.0/16

创建交换机:

  • test-sw1:10.10.10.0/24

购买两台阿里云ECS:

  • OpenV-P-N Server端
    • 公网地址8.131.243.98;
    • 内网地址:10.10.10.161;
  • 内网服务器
    • 内网地址:10.10.10.163;

1.2.2:重置 ECS 密码

全选,重置实例密码,然后立即重启实例;

1.2.3:添加安全组规则

  • 添加允许 1194 端口的 TCP 和 UDP 连接;
    在这里插入图片描述

1.2.4:更改主机名

  • OpenV-P-N Server:

    openV-P-N-server

    [root@iZ2zee1evrflzusrzi9spwZ ~]# hostnamectl set-hostname openV-P-N-server.yqc.com
    
  • 内网服务器:

    node1

    [root@openV-P-N-server ~]# ssh 10.10.10.163
    
    [root@iZ2ze2v0ikef2dly6ue70gZ ~]# hostnamectl set-hostname node1.yqc.com
    

1.2.5:关闭 firewalld 和 SELinux

阿里云的ECS默认把防火墙和selinux都关了;

二:OpenV-P-N Server 端部署

2.1:OpenV-P-N Server 端安装

  • 安装:

    [root@openV-P-N-server ~]# yum install openV-P-N -y
    
  • 查看生成文件:

    [root@openV-P-N-server ~]# rpm -ql openV-P-N
    /etc/openV-P-N
    /etc/openV-P-N/client
    /etc/openV-P-N/server
    /run/openV-P-N-client
    /run/openV-P-N-server
    /usr/lib/systemd/system/openV-P-N-client@.service
    /usr/lib/systemd/system/openV-P-N-server@.service
    /usr/lib/systemd/system/openV-P-N@.service
    /usr/lib/tmpfiles.d/openV-P-N.conf
    /usr/lib64/openV-P-N
    /usr/lib64/openV-P-N/plugins
    /usr/lib64/openV-P-N/plugins/openV-P-N-plugin-auth-pam.so
    /usr/lib64/openV-P-N/plugins/openV-P-N-plugin-down-root.so
    /usr/sbin/openV-P-N
    /usr/share/doc/openV-P-N-2.4.9
    /usr/share/doc/openV-P-N-2.4.9/AUTHORS
    /usr/share/doc/openV-P-N-2.4.9/COPYING
    /usr/share/doc/openV-P-N-2.4.9/COPYRIGHT.GPL
    /usr/share/doc/openV-P-N-2.4.9/ChangeLog
    /usr/share/doc/openV-P-N-2.4.9/Changes.rst
    /usr/share/doc/openV-P-N-2.4.9/README
    /usr/share/doc/openV-P-N-2.4.9/README.auth-pam
    /usr/share/doc/openV-P-N-2.4.9/README.down-root
    /usr/share/doc/openV-P-N-2.4.9/README.systemd
    /usr/share/doc/openV-P-N-2.4.9/contrib
    /usr/share/doc/openV-P-N-2.4.9/contrib/OCSP_check
    /usr/share/doc/openV-P-N-2.4.9/contrib/OCSP_check/OCSP_check.sh
    /usr/share/doc/openV-P-N-2.4.9/contrib/README
    /usr/share/doc/openV-P-N-2.4.9/contrib/openV-P-N-fwmarkroute-1.00
    /usr/share/doc/openV-P-N-2.4.9/contrib/openV-P-N-fwmarkroute-1.00/README
    /usr/share/doc/openV-P-N-2.4.9/contrib/openV-P-N-fwmarkroute-1.00/fwmarkroute.down
    /usr/share/doc/openV-P-N-2.4.9/contrib/openV-P-N-fwmarkroute-1.00/fwmarkroute.up
    /usr/share/doc/openV-P-N-2.4.9/contrib/pull-resolv-conf
    /usr/share/doc/openV-P-N-2.4.9/contrib/pull-resolv-conf/client.down
    /usr/share/doc/openV-P-N-2.4.9/contrib/pull-resolv-conf/client.up
    /usr/share/doc/openV-P-N-2.4.9/management-notes.txt
    /usr/share/doc/openV-P-N-2.4.9/sample
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/README
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/client.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/firewall.sh
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/home.up
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/loopback-client
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/loopback-server
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/office.up
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/openV-P-N-shutdown.sh
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/openV-P-N-startup.sh
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/roadwarrior-client.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/roadwarrior-server.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/server.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/static-home.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/static-office.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/tls-home.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/tls-office.conf
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/xinetd-client-config
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/xinetd-server-config
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-scripts
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-scripts/auth-pam.pl
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-scripts/bridge-start
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-scripts/bridge-stop
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-scripts/ucn.pl
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-scripts/verify-cn
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-windows
    /usr/share/doc/openV-P-N-2.4.9/sample/sample-windows/sample.oV-P-N
    /usr/share/man/man8/openV-P-N.8.gz
    /var/lib/openV-P-N
    
  • 拷贝 Server端 配置文件 server.conf:

    [root@openV-P-N-server ~]# cp /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/server.conf /etc/openV-P-N/
    

2.2:easyrsa 证书签发环境

使用 OpenV-P-N 时,还需要安装证书管理工具 easy-rsa:用于签发openV-P-N的服务端和客户端证书;

证书签发环境只需一套就可以,但为了便于管理维护,本次实验将证书签发环境分为两套:

  • Server 端的证书签发环境:/etc/openV-P-N/easyrsa-server
  • Client 端的证书签发环境:/etc/openV-P-N/easyrsa-client

2.2.1:easyrsa 安装

  • 安装:

    [root@openV-P-N-server ~]# yum install easy-rsa -y
    
  • 查看生成文件:

    [root@openV-P-N-server ~]# rpm -ql easy-rsa
    /usr/share/doc/easy-rsa-3.0.8
    /usr/share/doc/easy-rsa-3.0.8/COPYING.md
    /usr/share/doc/easy-rsa-3.0.8/ChangeLog
    /usr/share/doc/easy-rsa-3.0.8/README.md
    /usr/share/doc/easy-rsa-3.0.8/README.quickstart.md
    /usr/share/doc/easy-rsa-3.0.8/vars.example
    /usr/share/easy-rsa
    /usr/share/easy-rsa/3
    /usr/share/easy-rsa/3.0
    /usr/share/easy-rsa/3.0.8
    /usr/share/easy-rsa/3.0.8/easyrsa
    /usr/share/easy-rsa/3.0.8/openssl-easyrsa.cnf
    /usr/share/easy-rsa/3.0.8/x509-types
    /usr/share/easy-rsa/3.0.8/x509-types/COMMON
    /usr/share/easy-rsa/3.0.8/x509-types/ca
    /usr/share/easy-rsa/3.0.8/x509-types/client
    /usr/share/easy-rsa/3.0.8/x509-types/code-signing
    /usr/share/easy-rsa/3.0.8/x509-types/email
    /usr/share/easy-rsa/3.0.8/x509-types/kdc
    /usr/share/easy-rsa/3.0.8/x509-types/server
    /usr/share/easy-rsa/3.0.8/x509-types/serverClient
    /usr/share/licenses/easy-rsa-3.0.8
    /usr/share/licenses/easy-rsa-3.0.8/gpl-2.0.txt
    

    vars.example,证书变量文件,比如设置证书有效期;
    /usr/share/easy-rsa/3/easyrsa:签发证书的可执行程序文件;

  • 查看 easyrsa 命令帮助:

    [root@openV-P-N-server ~]# cd /usr/share/easy-rsa/3/
    [root@openV-P-N-server 3]# ./easyrsa --help
    
    Easy-RSA 3 usage and overview
    
    USAGE: easyrsa [options] COMMAND [command-options]
    
    A list of commands is shown below. To get detailed usage and help for a
    command, run:
      ./easyrsa help COMMAND
    
    For a listing of options that can be supplied before the command, use:
      ./easyrsa help options
    
    Here is the list of commands available with a short syntax reminder. Use the
    'help' command above to get full usage details.
    
      init-pki
      build-ca [ cmd-opts ]
      gen-dh
      gen-req <filename_base> [ cmd-opts ]
      sign-req <type> <filename_base>
      build-client-full <filename_base> [ cmd-opts ]
      build-server-full <filename_base> [ cmd-opts ]
      revoke <filename_base> [cmd-opts]
      renew <filename_base> [cmd-opts]
      build-serverClient-full <filename_base> [ cmd-opts ]
      gen-crl
      update-db
      show-req <filename_base> [ cmd-opts ]
      show-cert <filename_base> [ cmd-opts ]
      show-ca [ cmd-opts ]
      import-req <request_file_path> <short_basename>
      export-p7 <filename_base> [ cmd-opts ]
      export-p8 <filename_base> [ cmd-opts ]
      export-p12 <filename_base> [ cmd-opts ]
      set-rsa-pass <filename_base> [ cmd-opts ]
      set-ec-pass <filename_base> [ cmd-opts ]
      upgrade <type>
    
    DIRECTORY STATUS (commands would take effect on these locations)
      EASYRSA: /usr/share/easy-rsa/3.0.8
          PKI: /usr/share/easy-rsa/3/pki
    

2.2.2:准备证书签发环境

easyrsa 证书签发环境准备的步骤:

  1. 拷贝 /usr/share/easy-rsa/ 目录(将整个签发环境拷贝到方便管理的位置);
  2. 将证书变量文件 vars.example 拷贝到 easyrsa 可执行程序文件所在的目录下,重命名为 vars(因为 easyrsa 执行时默认引用当前目录下的 vars 文件);
  3. 初始化 pki 环境(执行 init-pki 指令);

/usr/share/easy-rsa/ 目录下的 3、3.0 都是软链接,链接到了 3.0.x 目录;

准备 Server 端的证书签发环境

本次实验中,Server 端的证书签发环境用于:

  1. 创建 CA;
  2. 生成服务端的证书签发申请 server.req、服务端密钥 server.key,以及签发服务端证书 server.crt;
  3. 签发客户端证书 USER.crt;
  • 拷贝 easy-rsa 目录:

    [root@openV-P-N-server ~]# cp -r /usr/share/easy-rsa/ /etc/openV-P-N/easyrsa-server
    
  • 拷贝 vars 文件:

    [root@openV-P-N-server ~]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openV-P-N/easyrsa-server/3/vars
    
  • 初始化 pki 环境:

    init-pki,初始化 pki环境,就是生成证书的保存目录等;

    [root@openV-P-N-server ~]# cd /etc/openV-P-N/easyrsa-server/3
    [root@openV-P-N-server 3]# ./easyrsa init-pki
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-server/3.0.8/vars
    
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /etc/openV-P-N/easyrsa-server/3/pki
    
  • 查看当前目录结构:

    [root@openV-P-N-server 3]# tree
    ├── easyrsa
    ├── openssl-easyrsa.cnf
    ├── pki
    │   ├── openssl-easyrsa.cnf
    │   ├── private
    │   ├── reqs
    │   └── safessl-easyrsa.cnf
    ├── vars
    └── x509-types
        ├── ca
        ├── client
        ├── code-signing
        ├── COMMON
        ├── email
        ├── kdc
        ├── server
        └── serverClient
    
    4 directories, 13 files
    
准备 Client 端的证书签发环境

本次实验中,Client 端的证书签发环境用于:

生成客户端的证书签发申请 USER.req 和客户端的私钥 USER.key;

  • 拷贝 easy-rsa 目录:

    [root@openV-P-N-server 3]# cp -r /usr/share/easy-rsa/ /etc/openV-P-N/easyrsa-client
    
  • 拷贝 vars 文件:

    [root@openV-P-N-server 3]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openV-P-N/easyrsa-client/3/vars
    
  • 初始化 pki 环境:

    [root@openV-P-N-server 3]# cd /etc/openV-P-N/easyrsa-client/3
    [root@openV-P-N-server 3]# ./easyrsa init-pki
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-client/3.0.8/vars
    
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /etc/openV-P-N/easyrsa-client/3/pki
    
  • 查看当前目录结构:

    [root@openV-P-N-server 3]# tree
    .
    ├── easyrsa
    ├── openssl-easyrsa.cnf
    ├── pki
    │   ├── openssl-easyrsa.cnf
    │   ├── private
    │   ├── reqs
    │   └── safessl-easyrsa.cnf
    ├── vars
    └── x509-types
        ├── ca
        ├── client
        ├── code-signing
        ├── COMMON
        ├── email
        ├── kdc
        ├── server
        └── serverClient
    
    4 directories, 13 files
    
创建用户证书存放目录

自定义目录位置和目录名,用于存放后续签发的用户证书以及客户端配置文件等,方便管理和打包发送;

[root@openV-P-N-server ~]# mkdir /etc/openV-P-N/users

2.2.3:创建 CA

OpenV-P-N 服务器需要自建 CA;

  • CA 的构建在Server 端的证书签发环境中进行:
cd /etc/openV-P-N/easyrsa-server/3
  • 配置 CA 的有效期:

    vas 中将 CA 机构的有效期设置得长一点;

    [root@openV-P-N-server 3]# vim vars
    set_var EASYRSA_CA_EXPIRE       3650
    
  • build-ca:

    直接回车;

    [root@openV-P-N-server 3]# ./easyrsa build-ca nopass
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-server/3.0.8/vars
    Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
    Generating RSA private key, 2048 bit long modulus
    ...........................+++
    .................+++
    e is 65537 (0x10001)
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
    
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /etc/openV-P-N/easyrsa-server/3/pki/ca.crt
    
    
  • 查看 CA 的证书(crt)和私钥(key):
    CA 创建完成后,会生成 pki/private/ca.key 私钥 和 pki/ca.crt 公钥;

    [root@openV-P-N-server 3]# ll pki/ca.crt
    -rw------- 1 root root 1172 Dec 23 15:32 pki/ca.crt
    [root@openV-P-N-server 3]# ll pki/private/ca.key
    -rw------- 1 root root 1675 Dec 23 15:32 pki/private/ca.key
    

2.2.4:配置客户端证书自动过期

证书过期与否的时间是以服务端的时间为准。

设置客户端证书的过期时间,需要在 Client 端的证书签发环境中配置 vars 文件;

为了安全考虑,客户端证书有效期一般要设得短一些;

  • 设置客户端证书的有效期为 60天:
[root@openV-P-N-server 3]# vim /etc/openV-P-N/easyrsa-server/3/vars
set_var EASYRSA_CERT_EXPIRE     60

2.3:签发 OpenV-P-N Server 端证书

  • 在 Server 端的证书签发环境中进行:
[root@openV-P-N-server ~]# cd /etc/openV-P-N/easyrsa-server/3

2.3.1:生成 req 和 key

  • gen-req:

    server 是 filename_base,生成的 req 和 key 文件以此为基础进行命名,即 server.req 和 server.key;

    直接回车就可以,会生成 server.req 和 server.key 两个文件;分别放在 reqs 和 private 目录下;

    [root@openV-P-N-server 3]# ./easyrsa gen-req server nopass
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-server/3.0.8/vars
    Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
    Generating a 2048 bit RSA private key
    ...........+++
    ...................................................+++
    writing new private key to '/etc/openV-P-N/easyrsa-server/3/pki/easy-rsa-1431.hPgVkf/tmp.5JxBUC'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Common Name (eg: your user, host, or server name) [server]:
    
    Keypair and certificate request completed. Your files are:
    req: /etc/openV-P-N/easyrsa-server/3/pki/reqs/server.req
    key: /etc/openV-P-N/easyrsa-server/3/pki/private/server.key
    
  • 验证证书签发申请(req)和私钥(key):

    [root@openV-P-N-server 3]# ll pki/reqs/server.req
    -rw------- 1 root root 887 Dec 23 15:41 pki/reqs/server.req
    [root@openV-P-N-server 3]# ll pki/private/server.key
    -rw------- 1 root root 1704 Dec 23 15:41 pki/private/server.key
    

2.3.2:签发 Server 端证书

  • sign-req:

    第一个server是 type,表示证书类型是 server 端;
    另一个 server 还是 filename_base

    确认了输yes,就签发完成了;生成 server.crt,在 pki/issued/ 目录下

    [root@openV-P-N-server 3]# ./easyrsa sign-req server server
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-server/3.0.8/vars
    Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
    
    
    You are about to sign the following certificate.
    Please check over the details shown below for accuracy. Note that this request
    has not been cryptographically verified. Please be sure it came from a trusted
    source or that you have verified the request checksum with the sender.
    
    Request subject, to be signed as a server certificate for 60 days:
    
    subject=
        commonName                = server
    
    
    Type the word 'yes' to continue, or any other input to abort.
      Confirm request details: yes
    Using configuration from /etc/openV-P-N/easyrsa-server/3/pki/easy-rsa-1463.bkZXK1/tmp.qk2cax
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    commonName            :ASN.1 12:'server'
    Certificate is to be certified until Feb 21 07:42:49 2021 GMT (60 days)
    
    Write out database with 1 new entries
    Data Base Updated
    
    Certificate created at: /etc/openV-P-N/easyrsa-server/3/pki/issued/server.crt
    
  • 验证证书(crt):

    证书即加密后的公钥;

    [root@openV-P-N-server 3]# ll pki/issued/server.crt
    -rw------- 1 root root 4547 Dec 23 15:42 pki/issued/server.crt
    

2.3.3:创建 Diffie-Hellman

  • DH 的创建在 Server 端的证书签发环境中进行:
cd /etc/openV-P-N/easyrsa-server/3
  • gen-dh:

    要等一小会儿,因为要采集足够的随机数,完了后会生成 dh.pem文件;

    [root@openV-P-N-server 3]# ./easyrsa gen-dh
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-server/3.0.8/vars
    Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
    Generating DH parameters, 2048 bit long safe prime, generator 2
    This is going to take a long time
    ............++*++*
    
    DH parameters of size 2048 created at /etc/openV-P-N/easyrsa-server/3/pki/dh.pem
    
  • 验证 DH 密钥:

  [root@openV-P-N-server 3]# ll pki/dh.pem
  -rw------- 1 root root 424 Dec 23 15:43 pki/dh.pem

2.3.4:创建 tls_auth 密钥文件

[root@openV-P-N-server ~]# cd /etc/openV-P-N/
[root@openV-P-N-server openV-P-N]# openV-P-N --genkey --secret ta.key

2.3.5:归置 Server 端证书和密钥文件

上边生成的 Server 端相关证书和密钥,都需要在 server.conf 中配置;

所以将 Server 端相关的证书和密钥文件放到同一目录下,方便后续的 Server 端配置和管理;

需要归置四个文件:ca.crt、server.crt、server.key、dh.pem;

如果需要 tls 加密,还需要 ta.key;

  • 创建存放目录:

    [root@openV-P-N-server ~]# mkdir /etc/openV-P-N/certs
    
  • 拷贝 Server 端的证书和密钥文件:

    [root@openV-P-N-server ~]# cd /etc/openV-P-N/certs/
    
    [root@openV-P-N-server certs]# cp /etc/openV-P-N/easyrsa-server/3/pki/dh.pem .
    [root@openV-P-N-server certs]# cp /etc/openV-P-N/easyrsa-server/3/pki/ca.crt .
    [root@openV-P-N-server certs]# cp /etc/openV-P-N/easyrsa-server/3/pki/issued/server.crt .
    [root@openV-P-N-server certs]# cp /etc/openV-P-N/easyrsa-server/3/pki/private/server.key .
    [root@openV-P-N-server certs]# cp /etc/openV-P-N/ta.key .
    
  • 查看相应文件:

  [root@openV-P-N-server certs]# tree
  .
├── ca.crt
  ├── dh.pem
  ├── server.crt
  ├── server.key
  └── ta.key

2.4:OpenV-P-N Server端 配置

2.4.1:server.conf 常用的配置参数

local

配置监听地址;

这里需要让 OpenV-P-N 监听在公网地址上,所以配置为监听所有地址;

local 0.0.0.0
port

配置监听端口(默认 1194);

port 1194
proto

指定 OpenV-P-N 使用的四层传输协议类型(即创建的通信隧道类型),有 tcp 和 udp 两种;
一般使用 tcp;
客户端和服务端的配置必须保持一致;

proto tcp
dev

指定 OpenV-P-N 创建的网络接口设备类型:

  • tun:创建一个 tun 接口(通常使用 tun);
  • tap:创建一个 tap 接口(tap 为了实现二层数据链路层功能,不常用);

客户端和服务端的配置要保持一致;
生成的接口设备为 tap0 或者 tun0;

A TUN device is used mostly for V-P-N tunnels where only IP-traffic is used.
A TAP device allows full Ethernet frames to be passed over the OpenV-P-N tunnel. hence providing support for non-ip based protocols such as IPX and AppleTalk.

dev tun
ca

指定 CA 证书;

ca certs/ca.crt
cert

指定服务端的证书;

cert certs/server.crt
key

指定服务端密钥文件;

key certs/server.key
dh

指定dh.pem路径;

dh certs/dh.pem
server

指定工作模式为服务端,并配置 DHCP 地址池(客户端连接 V-P-N 时为其分配IP的地址池);

服务器创建的网络接口默认会占用地址池中的第一个 IP 地址;

server 10.8.0.0 255.255.255.0
push “route x.x.x.x x.x.x.x”

向客户端推送指令,可配置多条;
一般用于推送路由条目,下一跳为 OpenV-P-N 生成的网络接口的地址;

当客户端拨通V-P-N后,客户端会根据此处的配置添加路由,访问配置的网络时,将其路由指向openV-P-N server端;

push "route 10.10.10.0 255.255.255.0"
keepalive

设置服务端检测的间隔和超时时间;
默认为每 10 秒 ping一次,如果 120 秒没有回应,则认为对方已经 down;

keepalive 10 120
tls-auth

指定 OpenV-P-N 通信的密钥文件(不配置也可以,但配置上更安全);
Server端和Client端使用同一个密钥文件,服务器和每个客户端都需要拥有该密钥的一个拷贝;
将Server端的值配置为 0,Client端的值配置为 1;

生成密钥文件:

openV-P-N --genkey --secret ta.key
tls-auth certs/ta.key 0
cipher

指定加密算法(保持默认即可);

cipher AES-256-CBC
max-clients

指定最大客户端数;

max-clients 100
user + group

指定运行 OpenV-P-N 服务的用户和组;

默认是nobody,也可以用openV-P-N(安装openV-P-N时会自动创建该用户和组);

user nobody
group nobody
status

指定 OpenV-P-N 的状态记录文件(每分钟会记录一次状态信息);

status /var/log/openV-P-N/openV-P-N-status.log
log / log-append

一般用 log-append;

指定 OpenV-P-N 的日志记录方式和日志文件;

  • log
    如果用 log 选项指定日志文件,那么 OpenV-P-N 在启动时会清空之前的日志;
  • log-append
    如果用 log-append 选项指定日志文件,OpenV-P-N 重新启动后会在之前的日志后追加新的日志,所以一般用 log-append;
log-append /var/log/openV-P-N/openV-P-N.log
verb

设置日志级别;
级别为 0-9,级别越高记录的内容越详细;

verb 3
mute

指定相同类型的信息,只记录前多少条到日志文件中;

保持默认即可;

mute 20 #相同类别的信息,只有前20条会输出到日志文件中
crl-verify

指定证书吊销文件的调用;

crl-verify /etc/openV-P-N/easyrsa-server/3/pki/crl.pem

2.4.2:server.conf 不常用的配置参数

dev-node

TAP-Win32适配器(非windows不需要,一般注释掉即可);

#dev-node MyTap
topology

通知网络拓扑(一般不需要配置);

#topology subnet
ifconfig-pool-persist

为客户端分配固定IP,(一般不需要配置);

#ifconfig-pool-persist ipp.txt
server-bridge

配置网桥模式(一般不需要配置);

#server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
client-config-dir + route

两个指令配合使用,可配置多组,为指定的客户端添加路由(一般不需要配置);
这两个个指令添加的路由是客户端侧的内网网段,而不是服务端的,客户端侧的内网网段因客户端所处网络环境不同而不同,所以一般不需要设置;

;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
learn-address

运行外部脚本,创建不同组的iptables 规则(一般不需要配置);

;learn-address ./script
client-to-client

开启此选项,表示拨通 V-P-N 后,客户端之间可以彼此看到对方;

一般不开启;

;client-to-client
push 相关指令
  • push “redirect-gateway def1 bypass-dhcp”
    启用后,客户端所有流量都将通过 V-P-N 服务器(一般不需要配置);

    包括统一内网环境中的客户端之间通信,也要经过 V-P-N 服务端,所以没必要;

    ;push "redirect-gateway def1 bypass-dhcp"
    
  • push “dhcp-option DNS x.x.x.x”
    推送DNS服务器(一般不需要配置);

    ;push "dhcp-option DNS 208.67.222.222"
    
duplicate-cn

多个用户共用一个账户;
一般用于测试环境,生产环境都是一个用户一个证书;

;duplicate-cn
persist-key

开启此选项,表示启动 OpenV-P-N 服务时,不重新读取keys文件,而是保留使用之前读取的 key 文件;
一般注释掉,让 OpenV-P-N 每次启动时都重新读取以下 key 文件;

#persist-key
persist-tun

开启此选项,表示无论 OpenV-P-N 服务启动与否,都保持 tun 或 tap 设备为 UP 状态;
一般注释掉,让 tun 或 tap 设备随 OpenV-P-N 服务的 启动/停止 而 创建/回收;

#persist-tun
explicit-exit-notify

通知客户端,在服务端重启后可以自动重新连接;
仅能用于udp模式,tcp模式不需要配置即可实现断开重连接;
如果在 tcp 模式下启动此选项,会导致 OpenV-P-N 无法连接;

#explicit-exit-notify 1
压缩相关
;push "compress xxx" #告诉客户端,服务端使用的压缩算法
;compress lz4-v2 #启用压缩
;push "compress lz4-v2"
;comp-lzo #客户端兼容的压缩配置,需要客户端配置开启压缩

2.4.3:server.conf 最终配置

[root@openV-P-N-server ~]# grep -Ev "^(#|$|;)" /etc/openV-P-N/server.conf
local 0.0.0.0
port 1194
proto tcp
dev tun
ca certs/ca.crt
cert certs/server.crt
key certs/server.key  # This file should be kept secret
dh certs/dh.pem
server 10.10.10.0 255.255.255.0
push "route 10.10.10.0 255.255.255.0"
keepalive 10 120
tls-auth certs/ta.key 0 # This file is secret
cipher AES-256-CBC
max-clients 100
user nobody
group nobody
status /var/log/openV-P-N/openV-P-N-status.log
log-append /var/log/openV-P-N/openV-P-N.log
verb 3
mute 20
;crl-verify /etc/openV-P-N/easyrsa-server/3/pki/crl.pem #在首次吊销用户时再启用此配置

2.5:启动前的准备

启动 OpenV-P-N Server 前,需要确保:

  1. 防火墙处于关闭状态;
  2. 开启 ip_forward;
  3. 清空 iptables 规则,并创建需要的 iptables 规则(至关重要,关系到V-P-N能否连接);
    iptables 规则包括:
    • 去往内网网段的请求进行源地址转换(地址伪装);
    • 允许1194端口;
    • 已连接和响应的报文直接允许;

2.5.1:开启路由转发

[root@openV-P-N-server ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

[root@openV-P-N-server ~]# sysctl -p

2.5.2:配置 iptables 规则

  • 安装并启动 iptables:

    [root@openV-P-N-server ~]# yum install iptables-services iptables -y
    
    [root@openV-P-N-server ~]# systemctl enable iptables.service
    Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
    [root@openV-P-N-server ~]# systemctl start iptables.service
    
  • 清空已有规则:

    iptables -F
    iptables -X
    iptables -Z
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -Z
    
  • 创建 iptables 规则:
    第一条中的地址段为 server.conf 中 server 配置项指定的地址段;

    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
    iptables -A INPUT -p TCP --dport 1194 -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
  • 保存 iptables 规则:

    [root@openV-P-N-server ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
    
  • 验证 iptables 规则:

    [root@openV-P-N-server ~]# iptables -vnL
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        6   850 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1194
       15   977 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 21 packets, 9552 bytes)
     pkts bytes target     prot opt in     out     source               destination
    
    [root@openV-P-N-server ~]# iptables -t nat -vnL
    Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 5 packets, 366 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain POSTROUTING (policy ACCEPT 5 packets, 366 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 MASQUERADE  all  --  *      *       10.8.0.0/24          0.0.0.0/0
    

2.5.3:创建日志目录并授权

[root@openV-P-N-server ~]# mkdir /var/log/openV-P-N
[root@openV-P-N-server ~]# chown nobody.nobody /var/log/openV-P-N

2.6:启动 OpenV-P-N Server端

  • 启动并设为开机启动:

    systemctl enable openV-P-N@server
    systemctl start openV-P-N@server
    
  • 查看监听端口:

    [root@openV-P-N-server ~]# ss -tnlp | grep 1194
    LISTEN     0      32           *:1194                     *:*                   users:(("openV-P-N",pid=11468,fd=5))
    
  • 验证日志:

    在log中要看到初始化完成的信息。

    [root@openV-P-N-server ~]# tail /var/log/openV-P-N/openV-P-N.log
    Wed Dec 23 16:39:17 2020 Socket Buffers: R=[87380->87380] S=[16384->16384]
    Wed Dec 23 16:39:17 2020 Listening for incoming TCP connection on [AF_INET][undef]:1194
    Wed Dec 23 16:39:17 2020 TCPv4_SERVER link local (bound): [AF_INET][undef]:1194
    Wed Dec 23 16:39:17 2020 TCPv4_SERVER link remote: [AF_UNSPEC]
    Wed Dec 23 16:39:17 2020 GID set to nobody
    Wed Dec 23 16:39:17 2020 UID set to nobody
    Wed Dec 23 16:39:17 2020 MULTI: multi_init called, r=256 v=256
    Wed Dec 23 16:39:17 2020 IFCONFIG POOL: base=10.10.10.4 size=62, ipv6=0
    Wed Dec 23 16:39:17 2020 MULTI: TCP INIT maxclients=100 maxevents=104
    Wed Dec 23 16:39:17 2020 Initialization Sequence Completed
    
  • 验证 tun 接口设备:

    ifconfig 会看到 tun0,地址通常为指定的客户端 DHCP 地址池的第一个地址;

    [root@openV-P-N-server ~]# ifconfig tun0
    tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
            inet 10.10.10.1  netmask 255.255.255.255  destination 10.10.10.2
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

三:OpenV-P-N 应用

3.1:OpenV-P-N Windows 客户端安装

官方客户端下载地址: https://openV-P-N.net/community-downloads/
非官方地址:https://sourceforge.net/projects/securepoint/files/

本次实验安装 OpenV-P-N-2.5.0-I601-amd64;

  • Customize 自定义安装选项:
    在这里插入图片描述

  • Install Now:
    全选;
    在这里插入图片描述

  • Installing:
    在这里插入图片描述

3.2:OpenV-P-N Client 端证书签发

3.2.1:客户端免密证书签发

没密码表示证书本身是不加密的,谁拿到都可以用;(数据用证书加密,证书本身不是加密的)

  • Client 端的 req 和 key 文件生成在 Client 端的证书签发环境中进行:

    cd /etc/openV-P-N/easyrsa-client/3
    
  • 生成 req 和 key:

    nopass 选项表示免密;

    ./easyrsa gen-req yanqinchuan nopass
    
  • 将客户端 req 文件导入到 CA:

    因为 CA 是在 server 环境中,所以需要在 easyrsa 的 server 环境中执行导入客户端 req 文件的操作,import-req;

    导入后,会在 server 环境的 pki/reqs 中看到 客户端的 req 文件。

    [root@openV-P-N-server 3]# cd /etc/openV-P-N/easyrsa-server/3
    
    [root@openV-P-N-server 3]# ./easyrsa import-req /etc/openV-P-N/easyrsa-client/3/pki/reqs/yanqinchuan.req yanqinchuan
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-server/3.0.8/vars
    Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
    
    The request has been successfully imported with a short name of: yanqinchuan
    You may now use this name to perform signing operations on this request.
    
  • 签发客户端证书:

    指定证书类型为 client;
    确认后输入yes;

    ./easyrsa sign client yanqinchuan
    
  • 验证签发后的证书:

  [root@openV-P-N-server 3]# ll pki/issued/yanqinchuan.crt
  -rw------- 1 root root 4445 Dec 23 16:41 pki/issued/yanqinchuan.crt

3.2.2:客户端加密证书签发

  • Client 端的 req 和 key 文件生成在 Client 端的证书签发环境中进行:

    cd /etc/openV-P-N/easyrsa-client/3
    
  • 生成 req 和 key:
    过程中输入密码;

    [root@openV-P-N-server 3]# ./easyrsa gen-req yanqinchuan1
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-client/3.0.8/vars
    Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
    Generating a 2048 bit RSA private key
    .................+++
    .+++
    writing new private key to '/etc/openV-P-N/easyrsa-client/3/pki/easy-rsa-11587.zql8NS/tmp.3l7C22'
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Common Name (eg: your user, host, or server name) [yanqinchuan1]:
    
    Keypair and certificate request completed. Your files are:
    req: /etc/openV-P-N/easyrsa-client/3/pki/reqs/yanqinchuan1.req
    key: /etc/openV-P-N/easyrsa-client/3/pki/private/yanqinchuan1.key
    
  • 将客户端 req 文件导入到 CA:

    [root@openV-P-N-server 3]# cd /etc/openV-P-N/easyrsa-server/3
    
    [root@openV-P-N-server 3]# ./easyrsa import-req /etc/openV-P-N/easyrsa-client/3/pki/reqs/yanqinchuan1.req yanqinchuan1
    
    Note: using Easy-RSA configuration from: /etc/openV-P-N/easyrsa-server/3.0.8/vars
    Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
    
    The request has been successfully imported with a short name of: yanqinchuan1
    You may now use this name to perform signing operations on this request.
    
  • 签发客户端证书:

    确认后输入 yes;

    ./easyrsa sign client yanqinchuan1
    
  • 验证签发后的证书:

    [root@openV-P-N-server 3]# ll pki/issued/yanqinchuan1.crt
    -rw------- 1 root root 4446 Dec 23 16:45 pki/issued/yanqinchuan1.crt
    

3.3:OpenV-P-N Client 端配置

3.3.1:client.oV-P-N 常用的配置参数

client

声明自己是个客户端;

client
dev

指定接口类型,必须和 Server 端保持一致;

dev tun
proto

指定使用的协议,必须和 Server 端保持一致;

proto tcp
remote

配置 Server 端的 IP 和 端口;

可以写成域名,但需要能够解析;

remote 172.18.200.101 1194
resolv-retry infinite

始终解析 Server 端域名(配置的是 Server 端域名时使用);

如果 Server 端的域名解析发生变化,会重新解析到对应的IP;

resolv-retry infinite
nobind

表示客户端不绑定监听端口,而是随机打开端口连接到服务端的监听端口;

nobind
ca

指定 CA 证书;

ca ca.crt
cert

指定客户端的用户证书;

cert yanqinchuan.crt
key

指定客户端密钥文件;

key yanqinchuan.key
tls-auth

参见 server.conf:tls-auth 的说明;

tls-auth ta.key 1
remote-cert-tls server

指定采用 Server 端校验的方式;

remote-cert-tls server
cipher

参见 server.conf:cipher 的说明;

cipher AES-256-CBC
verb

参见 server.conf:verb 的说明;

verb 3

3.3.2:client.oV-P-N 不常用的配置参数

persist-key

参见 server.conf:persist-key 的说明;

#persist-key
persist-tun

参见 server.conf:persist-tun 的说明;

#persist-tun

3.3.3:client.oV-P-N 最终配置

  • 拷贝客户端配置文件:

    将 client.conf 配置示例文件中的有效配置项重定向到 client.oV-P-N;

    [root@openV-P-N-server ~]# grep -Ev "^(#|$|;)" /usr/share/doc/openV-P-N-2.4.9/sample/sample-config-files/client.conf > /etc/openV-P-N/users/client.oV-P-N
    
  • 最终配置:

    此处是 yanqinchuan1 的客户端配置;

    [root@openV-P-N-server ~]# vim /etc/openV-P-N/users/client.oV-P-N
    client
    dev tun
    proto tcp
    remote 8.131.243.98 1194
    resolv-retry infinite
    nobind
    ca ca.crt
    cert yanqinchuan1.crt
    key yanqinchuan1.key
    remote-cert-tls server
    tls-auth ta.key 1
    cipher AES-256-CBC
    verb 3
    

3.4:OpenV-P-N Client 端连接 V-P-N

3.4.1:打包相应文件并发送到客户端

配置 OpenV-P-N 客户端所需的文件列表:

  • CA 证书:ca.crt
  • 客户端配置文件:client.oV-P-N
  • 客户端证书:USER.crt
  • 客户端密钥:USER.key
  • tls_auth 密钥:ta.key
  • 创建用户目录:

    mkdir /etc/openV-P-N/users/yanqinchuan1
    
  • 拷贝相应文件:

    [root@openV-P-N-server ~]# cd /etc/openV-P-N/users/yanqinchuan1
    
    [root@openV-P-N-server yanqinchuan1]# cp /etc/openV-P-N/users/client.oV-P-N .
    [root@openV-P-N-server yanqinchuan1]# cp /etc/openV-P-N/easyrsa-server/3/pki/ca.crt .
    [root@openV-P-N-server yanqinchuan1]# cp /etc/openV-P-N/easyrsa-server/3/pki/issued/yanqinchuan1.crt .
    [root@openV-P-N-server yanqinchuan1]# cp /etc/openV-P-N/easyrsa-client/3/pki/private/yanqinchuan1.key .
    [root@openV-P-N-server yanqinchuan1]# cp /etc/openV-P-N/ta.key .
    
  • 验证当前文件:

    [root@openV-P-N-server yanqinchuan1]# tree
    .
    ├── ca.crt
    ├── client.oV-P-N
    ├── ta.key
    ├── yanqinchuan1.crt
    ├── yanqinchuan1.key
    
  • 打包:

    [root@openV-P-N-server yanqinchuan1]# zip yanqinchuan1.zip ./*
    
  • 发送到客户端:

    [root@openV-P-N-server yanqinchuan1]# yum install lrzsz -y
    
    [root@openV-P-N-server yanqinchuan1]# sz yanqinchuan1.zip
    

在这里插入图片描述

3.4.2:解压相关文件到 config 目录

本次实验的客户端config目录为:C:\Program Files\OpenV-P-N\config

  • 解压到 config 目录
    在这里插入图片描述

3.4.3:连接 V-P-N

  • 打开客户端,右击托盘图标,点击连接;
    在这里插入图片描述

  • 输入密码,进行连接:
    在这里插入图片描述

  • 连接成功:
    在这里插入图片描述

3.4.4:验证 V-P-N 连接

客户端路由表
  • 增加了 push 的路由条目:

    route print
    

在这里插入图片描述

客户端网络连接
  • 可以看到生成的网卡设备,为它分配的是server端配置的 DHCP 池中的地址:
    在这里插入图片描述
验证通信
  • ping 内网服务器:
    在这里插入图片描述

  • ssh 连接内网服务器

    通过 V-P-N ssh上阿里云的内网服务器后,OpenV-P-N Server 上执行 netstat -tanlp,可以看到相应的客户端 TCP 连接,foreign address 就是客户端的公网IP;

在这里插入图片描述

[root@openV-P-N-server ~]# netstat -tanlp | grep 10.10.10.161:22
tcp        0     52 10.10.10.161:22         223.12.235.250:3733     ESTABLISHED 12473/sshd: root@pt 
tcp        0      0 10.10.10.161:22         10.8.0.10:7461          ESTABLISHED 12317/sshd: root@pt 
tcp        0      0 10.10.10.161:22         10.8.0.10:7728          ESTABLISHED 12355/sshd: root@pt 
tcp        0      0 10.10.10.161:22         223.12.235.250:2839     ESTABLISHED 12288/sshd: root@pt 
tcp        0      0 10.10.10.161:22         223.12.235.250:4780     ESTABLISHED 11813/sshd: root@pt 
tcp        0      0 10.10.10.161:22         223.12.235.250:1896     ESTABLISHED 12014/sshd: root@pt 
tcp        0      0 10.10.10.161:22         223.12.235.250:2333     ESTABLISHED 12156/sshd: root@pt 
tcp        0      0 10.10.10.161:22         223.12.235.250:3457     ESTABLISHED 12380/sshd: root@pt 
验证 TCP 连接

客户端通过 连接后端服务器后,在 openV-P-N server 和后端服务器上分别查看当前的 tcp 连接(netstat -tanlp);

  • 在后端服务器可以看到它和 openV-P-N server 有 tcp 连接:

    [root@node1 ~]# netstat -tanlp | grep 10.10.10.163:22
    tcp        0     52 10.10.10.163:22         10.10.10.161:8160       ESTABLISHED 11066/sshd: root@pt 
    tcp        0      0 10.10.10.163:22         10.10.10.161:8044       ESTABLISHED 11044/sshd: root@pt 
    tcp        0      0 10.10.10.163:22         10.10.10.161:52744      ESTABLISHED 11008/sshd: root@pt 
    
  • 在 openV-P-N server 上查找对应的端口:

    [root@openV-P-N-server ~]# netstat -tanlp | grep 52744
    tcp        0      0 10.10.10.161:52744      10.10.10.163:22         ESTABLISHED 12354/ssh
    

3.5:手动吊销客户端证书

3.5.1:吊销证书

  • 查看证书当前状态:

    V 表示有效;

    [root@openV-P-N-server ~]# cat /etc/openV-P-N/easyrsa-server/3/pki/index.txt
    V       210221074249Z           7A036F20CF6A3E1EE4C62774F4031003        unknown /CN=server
    V       210221084152Z           D3FCBA14C43E26D7B02921B9728F3E45        unknown /CN=yanqinchuan
    V       210221084536Z           4F744FA6E8AEFDD54EE83F0991478AF3        unknown /CN=yanqinchuan1
    
  • 吊销证书 revoke:

    确认后输入 yes;

    [root@openV-P-N-server ~]# cd /etc/openV-P-N/easyrsa-server/3/
    [root@openV-P-N-server 3]# ./easyrsa revoke yanqinchuan1
    
  • 生成/更新证书吊销文件 crl.pem:

    [root@openV-P-N-server 3]# ./easyrsa gen-crl
    
  • 编辑 Server 端配置文件,调用证书吊销文件:

    [root@openV-P-N-server 3]# vim /etc/openV-P-N/server.conf
    crl-verify /etc/openV-P-N/easyrsa-server/3/pki/crl.pem
    
  • 重启 OpenV-P-N 服务:

    每次吊销证书后需要重启openV-P-N server;
    重启 OpenV-P-N 前一定要确保配置正确无误;

    systemctl restart openV-P-N@server
    

3.5.2:验证

  • 查看证书当前状态:

    R 表示吊销;

    [root@openV-P-N-server 3]# cat /etc/openV-P-N/easyrsa-server/3/pki/index.txt
    V       210221074249Z           7A036F20CF6A3E1EE4C62774F4031003        unknown /CN=server
    V       210221084152Z           D3FCBA14C43E26D7B02921B9728F3E45        unknown /CN=yanqinchuan
    R       210221084536Z   201223113911Z   4F744FA6E8AEFDD54EE83F0991478AF3        unknown /CN=yanqinchuan1
    
  • 客户端使用 yanqinchuan1 的证书连接 V-P-N:

    已经无法连接;

在这里插入图片描述

3.6:重名用户的证书签发

重新签发一个和之前吊销的用户名一致的用户证书;

重名用户的证书签发和新用户证书签发过程一致,只不过在查看 index.txt 时,会看到存在两个用户名相同,但 ID 不同的证书;

而之前的 req、key 以及 crt 文件会被新的文件覆盖掉;

下面重新签发 yanqinchuan1 的证书;

3.6.1:生成 req 和 key

会有是否 overwrite 的提示,输入 yes,覆盖之前的 req 和 key 文件;

[root@openV-P-N-server 3]# cd /etc/openV-P-N/easyrsa-client/3
[root@openV-P-N-server 3]# ./easyrsa gen-req yanqinchuan1

3.6.2:导入 req 文件

[root@openV-P-N-server 3]# ./easyrsa import-req /etc/openV-P-N/easyrsa-client/3/pki/reqs/yanqinchuan1.req yanqinchuan1

3.6.3:签发证书

[root@openV-P-N-server 3]# ./easyrsa sign client yanqinchuan1

3.6.4:查看证书状态

有两个 yanqinchuan1,但 ID 不同;

[root@openv-p-n-server ~]# cat /etc/openv-p-n/easyrsa-server/3/pki/index.txt
V       210221074249Z           7A036F20CF6A3E1EE4C62774F4031003        unknown /CN=server
V       210221084152Z           D3FCBA14C43E26D7B02921B9728F3E45        unknown /CN=yanqinchuan
R       210221084536Z   201223113911Z   4F744FA6E8AEFDD54EE83F0991478AF3        unknown /CN=yanqinchuan1
V       210221114739Z           96A749CB3304FF087B7DA86025BF0EE6        unknown /CN=yanqinchuan1

3.6.5:修改客户端配置文件

[root@openv-p-n-server ~]# vim /etc/openv-p-n/users/yanqinchuan1/client.ov-p-n 
client
dev tun
proto tcp
remote 8.131.243.98 1194
resolv-retry infinite
nobind
ca ca.crt
cert yanqinchuan1.crt
key yanqinchuan1.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

3.6.6:归置客户端所需文件

直接覆盖之前的文件;

[root@openv-p-n-server yanqinchuan1]# cp /etc/openv-p-n/easyrsa-server/3/pki/ca.crt .
cp: overwrite ‘./ca.crt’? yes
[root@openv-p-n-server yanqinchuan1]# cp /etc/openv-p-n/easyrsa-server/3/pki/issued/yanqinchuan1.crt .
cp: overwrite ‘./yanqinchuan1.crt’? yes
[root@openv-p-n-server yanqinchuan1]# cp /etc/openv-p-n/easyrsa-client/3/pki/private/yanqinchuan1.key .
cp: overwrite ‘./yanqinchuan1.key’? yes
[root@openv-p-n-server yanqinchuan1]# cp /etc/openv-p-n/ta.key .
cp: overwrite ‘./ta.key’? yes

3.6.7:打包证书、密钥、配置文件给客户端

[root@openv-p-n-server yanqinchuan1]# zip yanqinchuan1.zip ./*

[root@openv-p-n-server yanqinchuan1]# sz yanqinchuan1.zip

3.6.8:客户端解压相关文件到 config 目录

在这里插入图片描述

3.6.9:验证 v-p-n 连接

可以连接;

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值