基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)

一、OpenVPN介绍

OpenVPN官方文档: https://open.net/community-resources/how-to/#additional-documentation

1OpenVPN概述 

       OpenVPN是一种全功能的SSL VPN,使用行业标准SSL/TLS协议实现OSI二层或三层安全网络扩展,支持基于证书、智能卡和/或用户名/密码凭证的灵活的客户端认证方式,并通过防火墙规则应用于VPN虚拟接口,允许针对用户或组的访问控制策略。OpenVPN不是web应用程序代理,也不通过web浏览器运行。

      OpenVPN 2.0扩展了OpenVPN 1.x版本的功能。通过提供可扩展的客户端/服务器模式,允许多个客户端通过单个TCP或UDP端口连接到单个OpenVPN服务器进程。

      OpenVPN支持基于证书的双向认证,即客户端必须对服务端证书进行认证,服务端也必须对客户端证书进行认证,才能建立相互信任。

 

2OpenVPN配置模式

       OpenVPN的配置有两种模式,分别为路由VPN和桥接VPN。

      总的来说,对于大多数人来说,路由可能是一个更好的选择,因为它比桥接更有效,更容易设置(就OpenVPN配置本身而言)。路由还提供了更大的能力,可以在特定于客户端的基础上选择性地控制访问权限。

       我建议使用路由,除非你需要一个需要桥接的特定功能,比如:

  •            此VPN需要能够处理非ip协议,如IPX;
  •           正在通过VPN运行依赖网络广播的应用程序(例如局域网游戏);
  •           希望允许在不设置Samba或WINS服务器的情况下通过VPN浏览Windows文件共享。

3、加密和身份验证

(1)加密

        OpenVPN使用OpenSSL库来加密数据与控制信息。这意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

(2)身份验证

        OpenVPN提供了多种身份验证方式,用以确认连接双方的身份,包括:

            ① 预享私钥

            ② 第三方证书

            ③ 用户名/密码组合

       预享密钥最为简单,但同时它只能用于创建点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外维护一个PKI证书系统。OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍需要一份服务器证书用作加密。

 

4OpenVPN组成

在安装使用open之前,介绍OpenVPN的组成部分,在整个安装流程涉及以下4个部分:

  • Server  服务器端程序的安装和客户端程序的安装
  • Easyrsa 证书生成程序
  • Server端配置文件
  • Client 端配置文件

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第1张图片

      

       Easyrsa是一个证书生成器,它是一个独立程序,它可以为OpenVPN生成各种所需要的证书和密钥,所谓的证书就是一种绑定了额外信息的公钥,密钥则可以理解为私钥。注意:其中一个tls密钥 ta.key 并非由Easyrsa 而是由OpenVPN主程序生成。而Server 服务器端配置文件以及 Client 客户端配置文件,编译安装时在解压目录下有示例配置文件,可以通过修改示例配置文件生成。

二、拓扑及基础环境配置

1、安装环境介绍:

角色

系统

IP

网关

OpenVpn版本

easy-rsa版本

OpenVPN-Server

CentOS Linux release 7.9.2009 (Core)

172.16.10.10/24

172.16.10.254

OpenVpn-2.5.7

easy-rsa-3.1.1

VPN-Client

Window 10

192.168.50.10/24

192.168.50.254

2、拓扑

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第2张图片

3、公司分部网络环境配置:

   配置公司分部NAT,允许内部地址通过NAT转换

 

3.1、定义允许转换的地址

[AR-3]acl 2001

[AR-3-acl-basic-2001]rule 10 permit source 192.168.50.0 0.0.0.255

[AR-3-acl-basic-2001]rule 20 permit source 192.168.60.0 0.0.0.255

[AR-3-acl-basic-2001]q

3.2、在接口下配置允许NAT转换。

[AR-3]interface GigabitEthernet 0/0/0

[AR-3-GigabitEthernet0/0/0]dis th

[V200R003C00]

#

interface GigabitEthernet0/0/0

 ip address 180.10.123.1 255.255.255.252

#

[AR-3-GigabitEthernet0/0/0]nat outbound 2001

4、公司总部网络环境配置:

4.1、在防火墙配置NAT,允许总部内部网络通过NAT访问外部网络:

 

4.1.1、配置总部内网允许转换的地址组:

ip address-set NeiWang_AddressGroup type group

 address 0 172.16.10.0 mask 24

 address 1 172.16.30.0 mask 24

 

4.1.2、在总部防火墙配置NAT

nat-policy

 rule name Source_NAT

  source-zone trust

  egress-interface GigabitEthernet1/0/1

  source-address address-set NeiWang_AddressGroup   #允许内网地址组中的地址通过G1/0/1接口地址转换出去

  action nat easy-ip

 

web配置:

地址组配置:

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第3张图片

NAT地址配置

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第4张图片

 

 

4.2、将总部的OpenVPN服务器配置端口映射:

[FW-USG6000V1] nat server open 0 protocol tcp global 113.65.10.1 33808 inside 172.16.10.10

WEB配置:

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第5张图片

4.3、在总部防火墙配置访问策略:

 

4.3.1、配置允许外部网络访问内部网络的服务

 

1)、定义源地址组,只有允许外部某些地址服务内部网络

ip address-set permit__client type object

 address 0 range 180.10.123.1 180.10.123.1

2)、定义目的地址组,配置只允许访问内部的指定的地址,需要配置内部服务器地址和出口地址

ip address-set server_ type object

 address 0 range 113.65.10.1 113.65.10.1

 address 1 range 172.16.10.10 172.16.10.10

 

3)、配置访问服务端口,只允许外部网络访问OpenVPN服务器的端口

ip service-set _port type object

 service 0 protocol tcp source-port 0 to 65535 destination-port 1194

 

4)、配置允许从外部访问内部的策略

security-policy

 rule name untrust_to_trust

  source-zone untrust

  destination-zone trust                 

  source-address address-set permit__client         #调用源地址组

  destination-address address-set server_              #调用目的地址组

  service _port

  action permit

 

web配置:

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第6张图片

 

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第7张图片

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第8张图片

 

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第9张图片

 

4.3.2、从内部访问外部:

security-policy

 rule name trust_to_untrust

  source-zone trust

  destination-zone untrust

  action permit

web配置:

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第10张图片

 

4.3.3、本端访问trust

当需要从内部网络ping防火墙接口地址时需要这个配置:

security-policy

 rule name local_to_trust

  source-zone local

  destination-zone trust

  action permit

web配置:

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第11张图片

5、服务器基础环境配置:

5.1、关闭SELINUX和firewalld

systemctl stop firewalld && systemctl disable firewalld

getenforce    #查看状态

setenforce 0 && sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

5.2、配置安装时所需的yum源。

1)、需改系统自带的Base源指向清华源

我们在vi编辑中输入如下进行连接地址全文替换修改Base源指向清华源

[root@node2 yum.repos.d]# vi CentOS-Base.repo

:%s@http://mirror.centos.org/@https://mirrors.tuna.tsinghua.edu.cn/@

5.3、安装EPEL镜像

[root@node2 yum.repos.d]# yum -y install epel-release

配置EPEL

使用下面命令替换epel指向清华大学源

[root@worker01 yum.repos.d]# sed -e 's!^metalink=!#metalink=!g' \
    -e 's!^#baseurl=!baseurl=!g' \
    -e 's!//download\.fedoraproject\.org/pub!//mirrors.tuna.tsinghua.edu.cn!g' \
    -e 's!//download\.example/pub!//mirrors.tuna.tsinghua.edu.cn!g' \
    -e 's!http://mirrors!https://mirrors!g' \
    -i /etc/yum.repos.d/epel*.repo

或者使用更简便的使用EPEL镜像的方法

rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm

三、在服务器上搭建open

1、编译安装openssl:

 

    OpenVPN使用OpenSSL库来加密数据与控制信息,所以先需要安装openssl

 

1.1、下载openssl:

 

   1.1.1  openssl下载站点:

            /source/index.html

        

   1.1.2  openssl下载地址

             https://www.openssl.org/source/openssl-1.1.1q.tar.gz

 

1.2、安装依赖包:

[root@worker02 ~]# yum install -y zlib zlib-devel perl-CPAN

1.3、上传下载的openssl源码包到系统

[root@worker02 ~]# rz

rz waiting to receive.

Starting zmodem transfer.  Press Ctrl+C to cancel.

Transferring openssl-1.1.1q.tar.gz...

  100%    9632 KB    9632 KB/sec    00:00:01       0 Errors 

[root@worker02 ~]#

1.4、解压源码包并进入目录解压的openssl目录下:

[root@worker02 ~]# tar xf openssl-1.1.1q.tar.gz

[root@worker02 ~]# cd openssl-1.1.1q

[root@worker02 openssl-1.1.1q]#

1.5、配置编译参数:

[root@worker02 openssl-1.1.1q]# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --shared zlib

Operating system: x86_64-whatever-linux2

Configuring OpenSSL version 1.1.1q (0x1010111fL) for linux-x86_64

Using os-specific seed configuration

Creating configdata.pm

Creating Makefile

**********************************************************************

***                                                                ***

***   OpenSSL has been successfully configured                     ***

***                                                                ***

***   If you encounter a problem while building, please open an    ***

***   issue on GitHub   ***

***   and include the output from the following command:           ***

***                                                                ***

***       perl configdata.pm --dump                                ***

***                                                                ***

***   (If you are new to OpenSSL, you might want to consult the    ***

***   'Troubleshooting' section in the INSTALL file first)         ***

***                                                                ***

**********************************************************************

[root@worker02 openssl-1.1.1q]#

[root@worker02 openssl-1.1.1q]# ./config -t

Operating system: x86_64-whatever-linux2

/usr/bin/env __CNF_CPPDEFINES='' __CNF_CPPINCLUDES='' __CNF_CPPFLAGS='' __CNF_CFLAGS='' __CNF_CXXFLAGS='' __CNF_LDFLAGS='' __CNF_LDLIBS='' /usr/bin/perl ./Configure linux-x86_64

[root@worker02 openssl-1.1.1q]#

1.6、编译:

[root@worker02 openssl-1.1.1q]# make -j4

 

1.7、安装:

[root@worker02 openssl-1.1.1q]# make install

[root@worker02 openssl-1.1.1q]# echo $?

0

[root@worker02 openssl-1.1.1q]#

1.8、备份原openssl:

[root@worker02 openssl-1.1.1q]# mv /usr/bin/openssl /usr/bin/openssl.bak

[root@worker02 openssl-1.1.1q]#

1.9、将openssl做连接至bin目录和导出头文件:

[root@worker02 openssl-1.1.1q]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

[root@worker02 openssl-1.1.1q]# ln -s /usr/local/openssl/include/openssl /usr/include/openssl

[root@worker02 openssl-1.1.1q]#

 

1.10、配置使库文件生效:

[root@worker02 openssl-1.1.1q]# echo '/usr/local/openssl/lib/' >> /etc/ld.so.conf

[root@worker02 openssl-1.1.1q]#

[root@worker02 openssl-1.1.1q]# ldconfig -v

                                                                                  

1.11、配置openssl环节变量:

[root@worker02 openssl-1.1.1q]# vi /etc/profile.d/openssl.sh

export PATH=$PATH:/usr/local/openssl/bin

[root@worker02 openssl-1.1.1q]# source /etc/profile.d/openssl.sh      

[root@worker02 openssl-1.1.1q]#

[root@worker02 openssl-1.1.1q]# which openssl

/usr/bin/openssl

[root@worker02 openssl-1.1.1q]# openssl version

OpenSSL 1.1.1q  5 Jul 2022

[root@worker02 openssl-1.1.1q]# ll

2、安装open

 

2.1、下载源码包进行编译安装

https://open.net/community-downloads/

2.3、将下载好的源码包上传至系统

[root@worker02 ~]# rz

rz waiting to receive.

Starting zmodem transfer.  Press Ctrl+C to cancel.

Transferring open-2.5.7.tar.gz...

  100%    1812 KB    1812 KB/sec    00:00:01       0 Errors 

2.4、先安装依赖包

# yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-lib cyrus-sasl-gssapi pam_krb5  pam pam-devel lzo* -y

2.5、解压源码包:

[root@worker02 ~]#

[root@worker02 ~]# tar xf open-2.5.7.tar.gz

[root@worker02 ~]# ll

total 50588

-rw-------.  1 root root     1583 Aug  4 02:18 anaconda-ks.cfg

-rw-r--r--   1 root root 39677175 Aug 19 05:48 cni-plugins-linux-amd64-v0.9.0.tgz

-rw-r--r--   1 root root     4323 Aug 23 05:46 i.y

-rw-r--r--   1 root root     5693 Aug 19 13:47 kube-flannel.yml

-rw-r--r--   1 root root    24904 Oct 31 03:11 mysql57-community-release-sles12.rpm

drwxrwxr-x  19 root root     4096 Oct 31 02:48 openssl-1.1.1q

-rw-r--r--   1 root root  9864061 Oct 30 23:48 openssl-1.1.1q.tar.gz

drwxrwxr-x  12 1000 1000     4096 May 24 04:48 open-2.5.7

-rw-r--r--   1 root root  1855516 Oct 31 05:20 open-2.5.7.tar.gz

drwxrwxrwx   3 1000 1000     4096 Oct 31 04:04 pam_mysql-0.7pre3

-rw-r--r--   1 root root   333992 Oct 30 22:47 pam_mysql-0.7pre3.tar.gz

[root@worker02 ~]#

2.6、进入open的解压目录下,并进行安装的编译参数配置:

[root@worker02 ~]# cd open-2.5.7

[root@worker02 open-2.5.7]# ./configure OPENSSL_LIBS="-L/usr/local/openssl/lib/ -lssl -lcrypto" OPENSSL_CFLAGS="-I/usr/local/openssl/include/" --prefix=/usr/local/open

2.7、进行编译并安装:

[root@worker02 open-2.5.7]# make && make install

说明:

安装之后使用到的认证pam插件会安装到/usr/local/open/lib/open/plugins/目录下

(是从/root/open-2.5.7/src/plugins/auth-pam/.libs/open-plugin-auth-pam.so安装过去)

/usr/local/open/lib/open/plugins/open-plugin-auth-pam.so

也可以将open-plugin-auth-pam.so复制到/etc/open/目录下,但这样做法好像没有用:

[root@localhost .libs]# pwd

/root/open-2.5.7/src/plugins/auth-pam/.libs

[root@localhost .libs]#

[root@localhost .libs]# cp open-plugin-auth-pam.so /etc/open/

2.8、配置添加open的环境变量

[root@localhost .libs]# echo -e "PATH=\$PATH:/usr/local/open/sbin" >/etc/profile.d/open.sh

2.9、开启内核转发:

2.9.1、将Linux系统作为路由或者VPN服务就必须要开启IP转发功能

配置open,首先需要开启内核转发功能

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

[root@localhost]# systemctl restart network

2.9.2、配置linuxiptables地址伪装功能(MASQUERADE),改写封包来源IP为防火墙的IP,可以指定port 对应的范围,

进行完此处理动作后,直接跳往下一个规则链(mangle:postrouting)。

这个功能与 SNAT 略有不同,当进行IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取

 

这一步配置很关键了,这里如果不做配置,此时拨入的客户端只能和OpenVPN服务器通信,客户端无法访问到内部网络其他资源

[root@localhost]# iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE

或者:

[root@localhost]# iptables -t nat -A POSTROUTING -s 10.88.60.0/24 -j MASQUERADE    #10.88.60.0/24网段做地址转换

保存规则

[root@open-wzhl ~]# service iptables save     

iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

[root@open-wzhl ~]#

3、使用easy-rsa来制作ca证书和open使用到的其他证书

3.1、需要使用easy-rsa来制作ca证书,先下载easy-rsa:

  在github 上,下载最新的easy-rsa

   https://github.com/OpenVPN/easy-rsa 下载包

3.2、上传,解压缩

[root@VPN-Server ~]# rz

rz waiting to receive.

Starting zmodem transfer.  Press Ctrl+C to cancel.

Transferring easy-rsa-3.1.1.zip...

  100%    6265 KB    6265 KB/sec    00:00:01       0 Errors 

[root@VPN-Server ~]#

解压:

[root@VPN-Server ~]# unzip easy-rsa-3.1.1.zip

3.3、配置,使用easy-rsa来生成open所需的证书。

  (1)、easy-rsa-3.1.1.zip解压后在解压目录下的/easyrsa3/目下有easy-rsa的示例配置文件,将示例配置文件命名为vars:

[root@VPN-Server ~]# cd easy-rsa-3.1.1/easyrsa3/

[root@VPN-Server easyrsa3]# cp vars.example vars

  (2)、编辑vars文件,根据自己环境配置

[root@VPN-Server easyrsa3]# vim vars

1. set_var EASYRSA_REQ_COUNTRY     "CN"

2. set_var EASYRSA_REQ_PROVINCE    "GuangXi"

3. set_var EASYRSA_REQ_CITY        "NanNing"

4. set_var EASYRSA_REQ_ORG         "ITOps"

5. set_var EASYRSA_REQ_EMAIL       "[email protected]"

6. set_var EASYRSA_REQ_OU          "My OpenVPN"

   # CA证书过期时间,单位天

  set_var EASYRSA_CA_EXPIRE      36500

  # 签发证书的有效期是多少天,单位天

  set_var EASYRSA_CERT_EXPIRE    36500

(3)、vars文件修改好之后,使修改后的文件生效,需要执行下面命令:

[root@VPN-Server easyrsa3]# source vars

3.4、创建服务端证书及key

进入/root/easy-rsa-3.1.1/easyrsa3/目录

[root@VPN-Server ~]# cd /root/easy-rsa-3.1.1/easyrsa3/

① 初始化,生成一个pki目录,用于存放后面生成的证书文件。

[root@VPN-Server easyrsa3]# ./easyrsa init-pki

② 创建根证书

[root@VPN-Server easyrsa3]# ./easyrsa build-ca

注意:这部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个根据自己随便设置个独一无二的名称,也可以不用输入common name名称,直接回车即可,本次安装直接回车。

③ 创建服务器端证书

创建server端证书和私钥文件,nopass表示不加密私钥文件

[root@VPN-Server easyrsa3]# ./easyrsa gen-req server nopass

该过程中需要输入common name,随意但是不要跟之前的根证书的一样,也可直接回车,默认common name为server,本次使用默认。

④ 签约服务端证书

[root@VPN-Server easyrsa3]# ./easyrsa sign server server

该命令中.需要你确认生成,要输入yes,还需要你提供我们当时创建CA时候的密码。如果你忘记了密码,那你就重头开始再来一次吧

⑤ 创建Diffie-Hellman,确保key穿越不安全网络的命令

[root@VPN-Server easyrsa3]# ./easyrsa gen-dh

3.5、创建客户端证书

① 创建client端证书和密钥文件(nopass表示不加密密钥文件,生成过程中直接默认回车)

[root@VPN-Server easyrsa3]# ./easyrsa gen-req client nopass

c. 签约证书

[root@VPN-Server easyrsa3]# ./easyrsa sign client client

上面签约证书跟server类似,但是期间还是要输入CA的密码

3.6、把服务器端必要证书、密钥文件放到/etc/open/ 目录下

    这里因为编译安装open,所以需要先创建/etc/open/目录:

[root@VPN-Server easyrsa3]#mkdir /etc/open/

3.6.1、将ca的证书、服务端的证书、秘钥复制到/etc/open/ 目录下:

[root@VPN-Server easyrsa3]# pwd

/root/easy-rsa-3.1.1/easyrsa3

[root@VPN-Server easyrsa3]# cp -a pki/ca.crt /etc/open/              

[root@VPN-Server easyrsa3]# cp -a pki/issued/server.crt /etc/open/              

[root@VPN-Server easyrsa3]# cp -a pki/private/server.key /etc/open/              

[root@VPN-Server easyrsa3]# cp -a pki/dh.pem /etc/open/            

3.6.2、使用OpenVPN创建TLS认证密钥,创建这个密钥需要安装open之后才可以使用open命令创建这个密钥:

[root@VPN-Server easyrsa3]# /usr/local/open/sbin/open --genkey --secret /etc/open/ta.key

3.7、为服务端编写配置文件

  1)当你安装好了open时候,他会提供一个server配置的文件例子,在解压目录/open-2.5.7/sample/sample-config-files/ 下会有一个server.conf文件,我们将这个文件复制到/etc/open

[root@VPN-Server ~]# cp /root/open-2.5.7/sample/sample-config-files/server.conf /etc/open/

   2)修改配置文件

[root@VPN-Server ~]# vim /etc/open/server.conf

[root@VPN-Server ~]# grep '^[^#|;]' /etc/open/server.conf  

修改的地方如下:

port 1194

监听端口

proto tcp

监听协议

dev tun

采用路由隧道模式

ca /etc/open/ca.crt

ca证书路径

cert /etc/open/server.crt

服务器证书

key /etc/open/server.key  # This file should be kept secret

服务器秘钥

dh /etc/open/dh.pem

密钥交换协议文件

server 10.88.0.0 255.255.255.0

给客户端分配地址池,注意:不能和VPN服务器内网网段有相同

ifconfig-pool-persist ipp.txt

push "10.88.0.0 255.255.255.0" 

通告分配给客户端的网络,还需要通告内网的网段,如果不通告内网网段,那么客户端接入后将无法访问内网中的主机

push "172.16.10.0 255.255.255.0"           

 通告企业总部内部网段,这样客户端接入后才可以访问总部内网中的主机

push "redirect-gateway def1 bypass-dhcp"

给网关

push "dhcp-option DNS 8.8.8.8"

dhcp分配dns

client-to-client

VPN客户端之间互相通信

keepalive 10 120

存活时间,10秒ping一次,120 如未收到响应则视为断线

tls-auth /etc/open/ta.key 0 # This file is secret

开启TLS-auth,使用ta.key防御攻击,拒绝服务攻击的证书文件.服务器端的第二个参数值为0,客户端的为1

cipher AES-256-GCM

加密模式,默认使用CBC,需要改为GCM模式

comp-lzo

传输数据压缩

max-clients 100

最多允许 100 客户端连接

persist-key

persist-tun

status open-status.log

log         /var/log/open.log

verb 3

3.8、启动open:

[root@localhost .libs]# /usr/local/open/sbin/open /etc/open/server.conf &

[1] 36909

[root@localhost .libs]# 2022-11-01 02:46:41 WARNING: Compression for receiving enabled. Compression has been used in the past to break encryption. Sent packets are not compressed unless "allow-compression yes" is also set.

[root@localhost .libs]# netstat -tunlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1019/sshd          

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1218/master        

tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      36909/open      

tcp6       0      0 :::22                   :::*                    LISTEN      1019/sshd          

tcp6       0      0 ::1:25                  :::*                    LISTEN      1218/master        

tcp6       0      0 :::3306                 :::*                    LISTEN      1757/mysqld        

udp        0      0 0.0.0.0:68              0.0.0.0:*                           775/dhclient       

udp        0      0 127.0.0.1:323           0.0.0.0:*                           709/chronyd        

udp6       0      0 ::1:323                 :::*                                709/chronyd        

[root@localhost .libs]#

3.8.1、生成systemd启动配置文件:

生成的systemd启动配置文件可以放在/etc/systemd/system/目录下,也可以/usr/lib/systemd/system/目录下:

[root@localhost ~]# cat /usr/lib/systemd/system/open.service

[Unit]

Description=OpenVPN Server

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

ExecStart=/usr/local/open/sbin/open --config /etc/open/server.conf

ExecStop=killall open

3.8.2、加载系统服务

[root@localhost ~]# systemctl daemon-reload

#开机启动

[root@localhost ~]# systemctl enable open.service

#启动服务

[root@localhost ~]# systemctl start open.service

注意:在使用systemd来管理open时需要先把已经启动的open进程关闭,然后才使用systemd来管理。

#查看服务运行状态

[root@localhost system]# systemctl status open.service

● open.service - OpenVPN Server

   Loaded: loaded (/usr/lib/systemd/system/open.service; disabled; vendor preset: disabled)

   Active: active (running) since Tue 2023-02-21 03:10:31 EST; 6s ago

 Main PID: 1805 (open)

   CGroup: /system.slice/open.service

           ├─1805 /usr/local/open/sbin/open --config /etc/open/server.conf

           └─1806 /usr/local/open/sbin/open --config /etc/open/server.conf

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 TCPv4_SERVER link lo...94

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 TCPv4_SERVER link re...C]

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 MULTI: multi_init ca...56

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 IFCONFIG POOL IPv4: ...62

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 ifconfig_pool_read()...,'

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 succeeded -> ifconfi...0)

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 IFCONFIG POOL LIST

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 qd,10.88.0.4,

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 MULTI: TCP INIT maxc...04

Feb 21 03:10:31 localhost.localdomain open[1805]: 2023-02-21 03:10:31 Initialization Seque...ed

Hint: Some lines were ellipsized, use -l to show in full.

[root@localhost system]#

3.9、配置客户端(client)配置文件

     继续在服务器上面进行配置客户端的配置文件,服务器端口安装open之后生成了客户端的示例配置文件,在解压目录下的sample/sample-config目录下,有client.conf 模板。

3.9.1 将客户端配置文件client.conf其他拷贝到自己创建的目录下,如下拷贝到/root/client目录下:

[root@VPN-Server ~]# mkdir client

[root@VPN-Server easyrsa3]# cd /root/open-2.5.7/sample/sample-config-files

[root@VPN-Server sample-config-files]# cp client.conf /root/client

 

3.9.2、将客户端使用到的证书、密钥拷贝到/root/client目录下:

[root@VPN-Server ~]# cd  /root/easy-rsa-3.1.1/easyrsa3/

[root@VPN-Server easyrsa3]# ll

total 184

-rwxr-xr-x. 1 root root 146271 Oct 13 07:28 easyrsa

-rw-------. 1 root root      0 Oct 23 22:17 ipp.txt

-rw-r--r--. 1 root root   5043 Oct 13 07:28 openssl-easyrsa.cnf

-rw-------. 1 root root    232 Oct 23 22:23 open-status.log

drwx------. 7 root root   4096 Oct 23 21:51 pki

-rw-r--r--. 1 root root   9425 Oct 23 21:46 vars

-rw-r--r--. 1 root root   9464 Oct 13 07:28 vars.example

drwxr-xr-x. 2 root root    122 Oct 13 07:28 x509-types

[root@VPN-Server easyrsa3]#

3.9.2、将客户端证书拷贝到/root/client目录下:

[root@VPN-Server easyrsa3]# cp -a pki/ca.crt /root/client/

[root@VPN-Server easyrsa3]# cp -a pki/issued/client.crt /root/client/

[root@VPN-Server easyrsa3]# cp -a pki/private/client.key /root/client/

[root@VPN-Server easyrsa3]# cp -a /etc/open/ta.key /root/client/

3.9.3、修改client.conf 配置文件,修改内容如下:

client

dev tun

proto tcp

remote 113.65.10.1 33808

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

remote-cert-tls server

tls-auth ta.key 1

cipher AES-256-GCM

comp-lzo

verb 3

auth-nocache

3.9.4、因为客户端使用的是windows系统,所以需要将client.conf文件重新命名为client.o:

[root@VPN-Server client]# mv client.conf client.o

在Windows使用open客户端时需要将.conf文件修改为.o后缀。

将client目录打包:

[root@localhost ~]# tar xcf client.tar client

将client.tar文件拷贝至windows主机,在Windows中安装好open客户端之后,将这个client.tar压缩包解压,将client目录的下的所有文件放到安装open客户端的安装目录下的config目录下。

四、客户端连接open

1、下载open客户端安装

windows客户端

mac客户端

2、在win10安装上安装open客户端:

,默认安装(open客户端需要.net支持,网络正常会自动安装)

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第12张图片

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第13张图片

4、客户端安装完成之后把在服务器端root/client目录下的文件复制到客户端config 目录下:

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第14张图片

4、启动客户端

(1)启动,注意启动需以管理员权限启动

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第15张图片

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第16张图片

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第17张图片

(3)连接成功

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第18张图片

5、测试是否成功

(1)在client 查询ip,确实是open 给定的ip

基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)_第19张图片

你可能感兴趣的:(OpenVPN介绍,服务器,运维,linux)