OpenVPN 介绍

重点:

一键安装 OpenVPN 脚本

后续管理:证书吊销。给新用户颁发证书

关系型数据库相关概念

三个范式

1)OpenVPN 简介

1.1)VPN 介绍

专用网络: 专用网就是 在两个网络(例如,北京和广州)之间架设一条专用线路,但是它并不需要真正地去铺设光缆之类的物理线路。虽然没有亲自去铺设,但是需要向电信运营商申请租用专线,在这条专用的线路上只传输自己的信息,所以安全稳定,同时也费用高昂。

VPN :Virtual Private Network,虚拟私有网络 ,或称为虚拟专用网络,常用于在在公用网络上建立专用网络,进行加密]讯。在企业网络中有广泛应用。VPN 网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN 可通过服务器、硬件、软件等多种方式实现。

分公司连接到总部 有多种方式,其中两种主要方式是 通过专线连接使用 VPN 连接

专线连接 是通过物理线路(如光纤、以太网等)直接连接分公司和总部的网络。这种连接通常是由专业的网络提供商提供和管理的,提供更高的带宽和稳定性。专线连接通常有固定的费用,并且在网络安全和性能方面提供较好的保障。

VPN(虚拟专用网络) 连接是通过公共网络(如互联网)进行加密通信,允许分公司的网络安全地连接到总部的网络。VPN 通过加密数据流,使其在公共网络中传输时变得安全,可以通过互联网以较低的成本建立连接。

VPN 工作逻辑

在外网的用户可以使用 vpn client 连接组织搭建的 vpn server 以建立通信隧道,随后便建立了虚拟的私人网络,处于外网的 worker 和内网中的 server 可以相互通信。

1.2)VPN 常见应用模式

1.2.1)点对站点 peer to site

允许单个用户或设备通过 VPN 客户端连接到一个已建立的 VPN 网络,实现远程安全访问。( 建议使用 OpenVPN )

1.2.2)站点对站点 site to site

是两个网络之间的连接,用于连接不同地理位置的局域网,提供安全的远程通信。( 建议使用硬件 VPN )

1.3)OpenVPN

OpenVPN 是 Linux 下开源 VPN 的应用,提供了良好的性能和友好的用户 GUI。

OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。

OpenVPN 允许参与建立 VPN 的单点使用共享密钥,电子证书,或者用户名/密码来进行身份验证。

OpenVPN 支持在各种系统,如:Linux、Windows、Mac OS X、Solaris、OpenBSD、FreeBSD、NetBSD 上运行,并包含了许多安全性的功能。它并不是一个基于 Web 的 VPN 软件,也不与 IPsec 及其他 VPN 软件包兼容。

官方网站:https://openvpn.net

GitHub 地址:GitHub - OpenVPN/openvpn: OpenVPN is an open source VPN daemon

OpenVPN 常见适用场景

实现远程主机到内网的连接

实现多个远程主机之间的连接

OpenVPN 示意图

2)OpenVPN 部署

2.1)准备 OpenVPN 部署环境

官文文档: https://openvpn.net/community-resources/how-to/

可选择以下两套环境之一实现 OpenVPN

2.1.1)环境 1 :阿里云 OpenVPN 实战环境

准备阿里云网络实验环境

// 1 阿里云创建专有网络 ( "模拟企业网络" )

1.1 指定城市和可用区: 华北 3 张家口可用区 A 区

1.2 网段名 magedu-net1 和地址段 172.16.0.0/12, 默认资源组

1.3 交换机名 magedu-net1-sw1, 可用区 A IPv4 的地址段 172.30.0.0/24

1.4 安全组开放 22 端口

// 2 创建 OpenVPN 服务器有公网 IP 的实例 1 个 ( "模拟企业 OpenVPN-Server" )

2.1 指定城市和可用区: 华北 3 张家口可用区 A 区

2.2 计算型 c6 2vCPU 4G

2.3 网络: magedu-net1 交换机: magedu-net1-sw1

2.4 公网 IP 按量收费 10 M

2.5 默认安全组 默认配置 22,3389,icmp

2.6 CentOS8.3

2.7 系统盘: 存储默认高效云盘 40 G

// 3 创建局域网的服务器无公网 IP 的实例 2 个 ( "模拟企业内网 Web-Server" )

3.1 按量付费

3.2 指定城市和可用区: 华北 3 张家口可用区 A 区

3.3 共享型 2vCPU2G

3.4 CentOS8.3

3.5 系统盘 存储默认高效云盘 40 G

网络: magedu-net1 magedu-net1-sw1

无公网 IP

默认安全组

主网卡 sw1


// 4 重设所有实例密码

// 5 修改安全组打开 1194/TCP/UDP

2.1.1.1)购买第一台有公网 IP 的 ECS

OpenVPN-Server:172.30.0.1

Web1:172.30.0.100

Web2:172.30.0.200

Client:0.0.0.0

阿里云购买链接:

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

2.1.1.2)需先 创建网络和交换机

模拟 企业专有网络( 企业专有网络 )

创建交换机( 类似划分 VLAN,划 分子网

继续 配置云服务器

登录凭证

配置概要

停机 >> 修改私网 IP 地址

2.1.1.3)再购买 两台 内网无公网的 ECS

注意: 需要和第一台主机在同一个地域和可用区( 华北 3 张家口 可用区 A

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

购买两台

**主机名:**web[1,2].magedu.org

2.1.1.4)验证主机配置

创建完成, 三台主机

将三台主机关闭 >> 批量重置实例密码

Web-Server IP 地址 分别修改为 172.30.0.100 ,172.30.0.200

更多 >> 网络与安全组 >> 修改私有 IP 地址

远程连接 >> 为 Web-Server 安装HTTPD服务


// "为两台局域网 Web-Server 安装 HTTPD 服务"

root@web1 \~\] yum install httpd -y;systemctl enable --now httpd;hostname \> /var/www/html/index.html // "验证 HTTPD 服务" \[root@web01 \~\] curl 127.0.0.1 web01.magedu.org --- // "连接 Web2" \[root@web01 \~\] ssh 172.30.0.200 \[root@web02 \~\] yum install httpd -y;systemctl enable --now httpd;hostname \> /var/www/html/index.html \[root@web02 \~\] curl 127.0.0.1 web02.magedu.org ![](https://file.jishuzhan.net/article/1759936232319619074/fce6a3d569e1fa81b7289a7217a26fd8.webp) // "连接 OpenVPN-Server" \[root@web02 \~\] ssh 172.30.0.1 \[root@open-server \~\] hostnamectl set-hostname open-server.magedu.org ![](https://file.jishuzhan.net/article/1759936232319619074/9a306c2ceb71a51ebe718a20c60bde2d.webp) **大家思考一下:** 我们连接 47.92.111.208 的云主机时,发现其网络并没有公网 IP 地址。 这是因为在这台主机之上存在一个公网 IP 为 47.92.111.208 的防火墙。 防火墙采用了 DNAT(Destination NAT)技术,当我们通过公网 IP 地址进行连接时,数据包会被转发到我们的内网主机 172.30.0.1 上。 // 基于公网 IP 地址连接 OpenVPN-Server ssh 47.92.111.208 ![](https://file.jishuzhan.net/article/1759936232319619074/4845480c272487ef34ff2168527b6c37.webp) // "免密认证" \[root@open-server \~\] ssh-keygen \[root@open-server \~\] ssh-copy-id 172.30.0.100 \[root@open-server \~\] ssh-copy-id 172.30.0.200 // "验证" \[root@open-server \~\] ssh 172.30.0.100 \[root@open-server \~\] ssh 172.30.0.200 至此\~ 我们的主机环境就配置好了! **2.1.1.5)修改网络防火墙规则(** **阿里云防火墙 )** 默认 VPN 的端口无法访问,需要修改网络防火墙规则 添加规则实现: 1194/TCP/UDP 端口允许通过。 **云服务器 ECS \>\> 安全组** ![](https://file.jishuzhan.net/article/1759936232319619074/a3ffdf43696ca362d49ff233ea72d4a1.webp) **安全组规则c** 添加 ICMP 添加 1194/TCP/UDP ![](https://file.jishuzhan.net/article/1759936232319619074/ef2156985a5f2a9d1cac7e812771d248.webp) **2.1.2)环境 2:局域网 OpenVPN 实战环境** ![](https://file.jishuzhan.net/article/1759936232319619074/765e1bec52fe2d597f5ea4cabbb18563.webp) // 共四台主机 1 openvpn server: CentOS 8.2 eth0: 10.0.0.8/24 NAT 模式, 模拟公网 IP eth1: 172.30.0.1/24 仅主机模式, 私网 IP 2 内网主机两台 第一台主机 eth0: 172.30.0.100/24 仅主机模式, 私网IP, 无需网关 第二台主机 eth0: 172.30.0.200/24 仅主机模式, 私网IP, 无需网关 3 Windows 客户端 Windows 10 **2.2)安装 OpenVPN 软件包** **2.2.1)查看版本** **2.2.1.1)查看官网的 OpenVPN 的版本** **访问官网:** [https://openvpn.net](https://openvpn.net "https://openvpn.net") [https://openvpn.net/community-downloads/](https://openvpn.net/community-downloads/ "https://openvpn.net/community-downloads/") ![](https://file.jishuzhan.net/article/1759936232319619074/eb52f970bf92b5e4829f739b6d140b6b.webp) **2.2.1.2)在不同 OS 上** **查看 OpenVPN 版本** CentOS EPEL 源存在 OpenVPN 软件包 CentOS 系统上的 EPEL 源 OpenVPN 版本 比 Ubuntu 的仓库中版本更新 以下选择在 CentOS8 上部署 OpenVPN。 **范例:** CentOS 查看 OpenVPN 版本 \[root@centos8 \~\] yum list openvpn \[root@centos7 \~\] yum list openvpn \[root@centos8 \~\] yum list easy-rsa \[root@centos7 \~\] yum list easy-rsa ![](https://file.jishuzhan.net/article/1759936232319619074/005e3628fe071fc7ad138d70af96a1b8.webp) **范例:**Ubuntu 查看 OpenVPN 版本 root@ubuntu2004:\~ apt show openvpn \[root@ubuntu1804 \~\] apt list openvpn \[root@ubuntu1804 \~\] apt-cache madison openvpn \[root@ubuntu1804 \~\] apt-cache madison easy-rsa **2.2.2)** **安装 OpenVPN** 后面环境以 CentOS8 上 基于 EPEL 源安装 OpenVPN 为例 **2.2.2.1)安装 OpenVPN 和证书工具** // "OpenVPN 服务器端" \[root@open-server \~\] yum install openvpn -y // "证书管理工具" ( 重要 ) // 后续 不管是 \< 服务器 客户端 用户 \> 都需要使用到大量证书 \[root@open-server \~\] yum install easy-rsa -y ![](https://file.jishuzhan.net/article/1759936232319619074/8ab6c1fdf319689973a0685b80ef0526.webp) **2.2.2.2)查看包中相关文件** // 查看软件包详细信息 \[root@open-server \~\] rpm -qi openvpn easy-rsa ![](https://file.jishuzhan.net/article/1759936232319619074/da8541fde108f9d66a400a82312abbe3.webp) // "查看软件包文件信息" \[root@open-server \~\] rpm -ql openvpn /etc/openvpn /etc/openvpn/client /etc/openvpn/server /run/openvpn-client /run/openvpn-server /usr/lib/.build-id /usr/lib/.build-id/01 /usr/lib/.build-id/01/3502e54aa79eca0939ed1b8f99938af3e53db5 /usr/lib/.build-id/5d /usr/lib/.build-id/5d/20d771a56878de04c0c4938f4a9448fca62fd6 /usr/lib/.build-id/b6 /usr/lib/.build-id/b6/b110decca64a429c86bc861a87ea3101e337c7 /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/[email protected] /usr/lib/tmpfiles.d/openvpn.conf /usr/lib64/openvpn /usr/lib64/openvpn/plugins /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so /usr/lib64/openvpn/plugins/openvpn-plugin-down-root.so /usr/sbin/openvpn /usr/share/doc/openvpn /usr/share/doc/openvpn/AUTHORS /usr/share/doc/openvpn/COPYING /usr/share/doc/openvpn/COPYRIGHT.GPL /usr/share/doc/openvpn/ChangeLog /usr/share/doc/openvpn/Changes.rst /usr/share/doc/openvpn/README /usr/share/doc/openvpn/README.auth-pam /usr/share/doc/openvpn/README.down-root /usr/share/doc/openvpn/README.systemd /usr/share/doc/openvpn/contrib /usr/share/doc/openvpn/contrib/OCSP_check /usr/share/doc/openvpn/contrib/OCSP_check/OCSP_check.sh /usr/share/doc/openvpn/contrib/README /usr/share/doc/openvpn/contrib/openvpn-fwmarkroute-1.00 /usr/share/doc/openvpn/contrib/openvpn-fwmarkroute-1.00/README /usr/share/doc/openvpn/contrib/openvpn-fwmarkroute-1.00/fwmarkroute.down /usr/share/doc/openvpn/contrib/openvpn-fwmarkroute-1.00/fwmarkroute.up /usr/share/doc/openvpn/contrib/pull-resolv-conf /usr/share/doc/openvpn/contrib/pull-resolv-conf/client.down /usr/share/doc/openvpn/contrib/pull-resolv-conf/client.up /usr/share/doc/openvpn/management-notes.txt /usr/share/doc/openvpn/sample /usr/share/doc/openvpn/sample/sample-config-files /usr/share/doc/openvpn/sample/sample-config-files/README /usr/share/doc/openvpn/sample/sample-config-files/client.conf /usr/share/doc/openvpn/sample/sample-config-files/firewall.sh /usr/share/doc/openvpn/sample/sample-config-files/home.up /usr/share/doc/openvpn/sample/sample-config-files/loopback-client /usr/share/doc/openvpn/sample/sample-config-files/loopback-server /usr/share/doc/openvpn/sample/sample-config-files/office.up /usr/share/doc/openvpn/sample/sample-config-files/openvpn-shutdown.sh /usr/share/doc/openvpn/sample/sample-config-files/openvpn-startup.sh /usr/share/doc/openvpn/sample/sample-config-files/roadwarrior-client.conf /usr/share/doc/openvpn/sample/sample-config-files/roadwarrior-server.conf /usr/share/doc/openvpn/sample/sample-config-files/server.conf /usr/share/doc/openvpn/sample/sample-config-files/static-home.conf /usr/share/doc/openvpn/sample/sample-config-files/static-office.conf /usr/share/doc/openvpn/sample/sample-config-files/tls-home.conf /usr/share/doc/openvpn/sample/sample-config-files/tls-office.conf /usr/share/doc/openvpn/sample/sample-config-files/xinetd-client-config /usr/share/doc/openvpn/sample/sample-config-files/xinetd-server-config /usr/share/doc/openvpn/sample/sample-scripts /usr/share/doc/openvpn/sample/sample-scripts/auth-pam.pl /usr/share/doc/openvpn/sample/sample-scripts/bridge-start /usr/share/doc/openvpn/sample/sample-scripts/bridge-stop /usr/share/doc/openvpn/sample/sample-scripts/ucn.pl /usr/share/doc/openvpn/sample/sample-scripts/verify-cn /usr/share/doc/openvpn/sample/sample-windows /usr/share/doc/openvpn/sample/sample-windows/sample.ovpn /usr/share/man/man8/openvpn.8.gz /var/lib/openvpn \[root@open-server \~\] rpm -ql easy-rsa /usr/share/doc/easy-rsa /usr/share/doc/easy-rsa/COPYING.md /usr/share/doc/easy-rsa/ChangeLog /usr/share/doc/easy-rsa/README.md /usr/share/doc/easy-rsa/README.quickstart.md /usr/share/doc/easy-rsa/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 /usr/share/licenses/easy-rsa/gpl-2.0.txt **2.2.2.3)** **准备相关配置文件** // CentOS7 执行如下命令 1. 将 openvpn 目录名修改为 openvpn \[root@open-server \~\] cd /usr/share/doc \&\& mv openvpn-2.4.12/ openvpn 2. 将 easy-rsa 目录名修改为 easy-rsa \[root@open-server \~\] cd /usr/share/doc \&\& mv easy-rsa-3.0.8/ easy-rsa // 1. 生成服务器配置文件 ( "拷贝 模板文件" ) \[root@open-server \~\] cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/ // 2. 准备证书颁发相关文件 ( "拷贝 证书相关文件" ) \[root@open-server \~\] cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-server // 3. 准备颁发证书相关变量的配置文件 ( "拷贝 证书相关变量配置文件") \[root@open-server \~\] cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa-server/3/vars // 4. 建议修改给 CA 和 OpenVPN 服务器 "颁发证书的有效期" ( 可适当加长 ) \[root@open-server \~\] vim /etc/openvpn/easy-rsa-server/3/vars // CA 的证书默认有效期为 10 年, 可以适当延长, 比如: 36500 天 # set_var EASYRSA_CA_EXPIRE 3650 set_var EASYRSA_CA_EXPIRE 36500 // "服务器证书" 默为为 825 天, 可适当加长, 比如: 3650 天 # set_var EASYRSA_CERT_EXPIRE 825 # 将上面行修改为下面 set_var EASYRSA_CERT_EXPIRE 3650 // 7 个文件夹, 12 个文件 \[root@open-server \~\] tree /etc/openvpn/ ![](https://file.jishuzhan.net/article/1759936232319619074/d37a266b7ee6de49e6acbbef92c2d8ce.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/4db662aad855b9aeeee66da37269d536.webp) **2.3)准备** **证书相关文件** **2.3.1)初始化 PKI 和 CA 颁发机构环境** **2.3.1.1)脚本 easyrsa 帮助用法** \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3/ \[root@open-server 3\] pwd \[root@open-server 3\] file ./easyrsa ./easyrsa: POSIX shell script, ASCII text executable // 执行 easyrsa 脚本 ( "不加任何选项,默认输出帮助列表" ) \[root@open-server 3\] ./easyrsa ![](https://file.jishuzhan.net/article/1759936232319619074/469803a56e943c6fe53e29fba298295e.webp) **2.3.1.2)** **初始化 PKI 生成 PKI 相关目录和文件** "初始化 PKI" \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3/ \[root@open-server 3\] pwd \[root@open-server 3\] tree // "调用 init-pki" // "初始化数据" 在当前目录下生成 pki 目录及相关文件 \[root@open-server 3\] ./easyrsa init-pki \[root@open-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 ![](https://file.jishuzhan.net/article/1759936232319619074/bcab37240a43d84c646ff6568523c433.webp) **2.3.2)** **创建 CA 机构环境** // "调用 build-ca" \[root@open-server 3\] ./easyrsa build-ca nopass Common Name (eg: your user, host, or server name) \[Easy-RSA CA\]: # 回车接受默认值即可 Your new CA certificate file for publishing is at: /etc/openvpn/easy-rsa-server/3/pki/ca.crt // 生成自签名的证书文件 // "生成了 CA 的自签名证书文件" \[root@open-server 3\] tree pki pki ├── ca.crt # 生成的自签名的证书文件 ├── certs_by_serial ├── index.txt ├── index.txt.attr ├── issued ├── openssl-easyrsa.cnf ├── private │ └── ca.key # 生成的私钥文件 ├── renewed │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── reqs ├── revoked │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── safessl-easyrsa.cnf └── serial 12 directories, 7 files // 查看生成 CA 相关的文件 \[root@open-server 3\] cat pki/serial \[root@open-server 3\] ll pki/index.txt \[root@open-server 3\] ll pki/ca.crt pki/private/ca.key // "查看生成的自签名证书" \[root@open-server 3\] cat pki/ca.crt \[root@open-server 3\] openssl x509 -in pki/ca.crt -noout -text // 基于 Windows 系统查看证书 \[root@open-server 3\] sz pki/ca.crt ![](https://file.jishuzhan.net/article/1759936232319619074/79656617de80f9aecdfa2e4dde1d5973.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/c58706fa76fb2b8d73120d184f09fb5a.webp) **2.3.3)** **创建** **OpenVPN** **服务端证书申请** \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3 \[root@open-server 3\] pwd /etc/openvpn/easy-rsa-server/3 // "创建 OpenVPN 服务器证书申请文件" // 其中 server 是文件前缀 \[root@open-server 3\] ./easyrsa gen-req server nopass Common Name (eg: your user, host, or server name) \[server\]: # 接受 Common Name 的默认值, 直接回车 Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa-server/3/pki/reqs/server.req # 生成的请求文件 key: /etc/openvpn/easy-rsa-server/3/pki/private/server.key # 生成的私钥文件 \[root@open-server 3\] tree pki pki ├── ca.crt ├── certs_by_serial ├── index.txt ├── index.txt.attr ├── issued ├── openssl-easyrsa.cnf ├── private │ ├── ca.key │ └── server.key # 生成私钥文件 ├── renewed │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── reqs │ └── server.req # 生成请求文件 ├── revoked │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── safessl-easyrsa.cnf └── serial 12 directories, 9 files ![](https://file.jishuzhan.net/article/1759936232319619074/bf064712dadd6874bbc34613fea1875e.webp) **2.3.4)颁发服务端证书** **2.3.4.1)** **查看颁发证书命令用法** \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3 \[root@open-server 3\] ./easyrsa help sign ![](https://file.jishuzhan.net/article/1759936232319619074/f17602580e9c88b8210a5b861e97ca08.webp) **2.3.4.2)** **颁发服务端证书** // 将上面 server.req 的申请, 颁发 server 类型的证书 \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3 // 第一个 server 表示证书的类型, 第二个 server 表示请求文件名的前缀 \[root@open-server 3\] ./easyrsa sign server server Request subject, to be signed as a server certificate for 3650 days: # 可以看到 vars 文件指定的有效期 Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes // 输入 yes 回车 Certificate created at: /etc/openvpn/easy-rsa-server/3/pki/issued/server.crt # 生 成服务器证书文件 ![](https://file.jishuzhan.net/article/1759936232319619074/8ddc071cd3a0c304707c9e49260495fa.webp) **2.3.4.3)** **验证结果** \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3 \[root@open-server 3\] tree pki pki ├── ca.crt ├── certs_by_serial │ └── EDAEBAB8D65066D307AE58ADC1A56682.pem # 生成的服务器证书文件 ├── index.txt ├── index.txt.attr ├── index.txt.attr.old ├── index.txt.old ├── issued │ └── server.crt # 生成的服务器证书文件 ├── openssl-easyrsa.cnf ├── private │ ├── ca.key │ └── server.key ├── renewed │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── reqs │ └── server.req ├── revoked │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── safessl-easyrsa.cnf ├── serial └── serial.old 12 directories, 14 files \[root@open-server 3\] cat pki/issued/server.crt # 查看证书相关文件 \[root@open-server 3\] cat pki/serial \[root@open-server 3\] cat pki/index.txt \[root@open-server 3\] cat pki/serial.old // "将证书上传至 Windows 系统" \[root@open-server 3\] sz pki/issued/server.crt "安装上级 CA 证书" ( 重要 ) ca.crt ![](https://file.jishuzhan.net/article/1759936232319619074/138eea258f9b9322b9b02faa6d5c4a09.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/831496292fefaf8a396c6efd37c4ca53.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/daf785d219b8755dd36d1277610f0700.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/a42d86a4eda045f5e6aca8894bcd6a95.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/daf785d219b8755dd36d1277610f0700.webp) 安装完 ca.crt 上级 CA 证书后,我们的 server.crt 证书就受系统信任啦\~ ![](https://file.jishuzhan.net/article/1759936232319619074/9053b19089c89937ea8331e41a8e4413.webp) **2.3.5)创建 Diffie-Hellman 密钥** **2.3.5.1)Diffie-Hellman 算法说明** wiki 参考链接: [https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange](https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange "https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange") Diffie-Hellman 密钥交换方法是迪菲(Whitefield Diffie)和赫尔曼(Martin Hellman)在 1976 年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种密钥交换技术的目的在于使两个用户安全地交换一个密钥,用此密钥做为对称密钥来加密后续的报文传输。 **2.3.5.2)** **创建 Diffie-Hellman 密钥** \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3 \[root@open-server 3\] pwd // 方法 1 "方法 1: 生成 Diffie-Hellman 密钥" // 这里需要等待一会儿 \[root@open-server 3\] ./easyrsa gen-dh DH parameters of size 2048 created at /etc/openvpn/easy-rsa-server/3/pki/dh.pem # 查看生成的文件 \[root@open-server 3\] ll pki/dh.pem -rw------- 1 root root 424 Dec 23 15:37 pki/dh.pem \[root@open-server 3\] cat pki/dh.pem -----BEGIN DH PARAMETERS----- MIIBCAKCAQEAu95LCerRrVeGlfpcPKZbDWWOWcEktgLdAx1vwOHGZz+3Vb2itHM9 RFulRrPJRskDDPImTxLXGvbH7QlkXXefKoVLF1o3jMeSvisDdWG1bzK9ewQW/hZP C+WbyFV8wLc/ZD1Dttbw6VehJtn61lpfGcL4W6xIpbsenqZrsoJXyE4znPEFAdJu f8knhDKA7ID0jSGXTQhGSmkakBwcxplEJhMCUwhNhbruLvmpcWqEoEYxM3CR6iPx QZfyflmZs3S9U9qsZFIbUpkXFWXkFE3qcNdwi5F8JsFrMiSZeqObqFnnbki33KTU lfxHmGdOG0T0+cTpFD/wl6F5dvvsuq4SCwIBAg== -----END DH PARAMETERS----- // 方法 2 "方法 2: 生成 Diffie-Hellman 密钥" \[root@open-server \~\] openssl dhparam -out /etc/openvpn/dh2048.pem 2048 \[root@open-server \~\] ll /etc/openvpn/dh2048.pem **2.3.6)** **准备客户端证书环境** 上面服务端证书配置完成,下面是配置客户端证书 // "准备客户端证书环境" \[root@open-server \~\] cp -a /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-client // 可选 \[root@open-server 3\] cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa-client/3/vars \[root@open-server \~\] cd /etc/openvpn/easy-rsa-client/3/ \[root@open-server 3\] ls easyrsa openssl-easyrsa.cnf vars x509-types // "验证" \[root@open-server 3\] tree . ├── easyrsa ├── openssl-easyrsa.cnf ├── vars └── x509-types ├── ca ├── client ├── code-signing ├── COMMON ├── email ├── kdc ├── server └── serverClient 1 directory, 11 file // "生成证书申请所需目录 pki 和文件" \[root@open-server 3\] ./easyrsa init-pki Your newly created PKI dir is: /etc/openvpn/easy-rsa-client/3/pki # 生成新目录 // "验证" \[root@open-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 **2.3.7)** **创建客户端证书申请** // "切换到 easy-rsa-client 目录" \[root@open-server \~\] cd /etc/openvpn/easy-rsa-client/3 \[root@open-server 3\] pwd /etc/openvpn/easy-rsa-client/3 // 生成 "客户端用户" 的证书 // 注意: "修改用户名" \[root@open-server 3\] ./easyrsa gen-req wangxiaochun nopass Common Name (eg: your user, host, or server name) \[wangxiaochun\]: # 接受默认值, 直接回车 req: /etc/openvpn/easy-rsa-client/3/pki/reqs/wangxiaochun.req # 私钥文件 key: /etc/openvpn/easy-rsa-client/3/pki/private/wangxiaochun.key # 证书申请文件 // 生成两个新文件 \[root@open-server 3\] tree . ├── easyrsa ├── openssl-easyrsa.cnf ├── pki │ ├── openssl-easyrsa.cnf │ ├── private │ │ └── wangxiaochun.key # 私钥文件 │ ├── reqs │ │ └── wangxiaochun.req # 证书申请文件 │ └── safessl-easyrsa.cnf ├── vars └── x509-types ├── ca ├── client ├── code-signing ├── COMMON ├── email ├── kdc ├── server └── serverClient 4 directories, 15 files ![](https://file.jishuzhan.net/article/1759936232319619074/6af0371a4be256d625c4bdfbd0dfac63.webp) **2.3.8)** **颁发客户端证书(** **重要 )** 基于 CA 的证书信息给 客户端颁发证书。( 因此切换回 easy-rsa-server 目录 ) // "切换到 easy-rsa-server 目录" \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3 \[root@open-server 3\] pwd /etc/openvpn/easy-rsa-server/3 // 将 "客户端证书文件" 请求复制到 CA 的工作目录 # 或者: 直接将客户端证书文件拷贝至 CA 的工作目录也可以 # ( 原理就是将客户端证书文件拷贝到了 CA 的工作目录 ) // 注意: "修改用户名" \[root@open-server 3\] ./easyrsa import-req /etc/openvpn/easy-rsa-client/3/pki/reqs/wangxiaochun.req wangxiaochun // "验证" \[root@open-server 3\] tree pki pki ├── ca.crt ├── certs_by_serial │ └── EDAEBAB8D65066D307AE58ADC1A56682.pem ├── dh.pem ├── index.txt ├── index.txt.attr ├── index.txt.attr.old ├── index.txt.old ├── issued │ └── server.crt ├── openssl-easyrsa.cnf ├── private │ ├── ca.key │ └── server.key ├── renewed │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── reqs │ ├── server.req │ └── wangxiaochun.req // "拷贝过来的客户端证书文件 ( 重要 )" ├── revoked │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── safessl-easyrsa.cnf ├── serial └── serial.old 12 directories, 16 files // 对比两个目录下的客户端证书文件 \[root@open-server 3\] ll pki/reqs/wangxiaochun.req /etc/openvpn/easy-rsa-client/3/pki/reqs/wangxiaochun.req -rw------- 1 root root 895 Dec 23 16:10 /etc/openvpn/easy-rsa-client/3/pki/reqs/wangxiaochun.req -rw------- 1 root root 895 Dec 23 16:10 pki/reqs/wangxiaochun.req // 修改 "给客户端颁发的证书的有效期" ( "修改 vars 配置文件" ) \[root@open-server \~\] cd /etc/openvpn/easy-rsa-server/3 \[root@open-server 3\] vim vars # 建议修改给客户端颁发证书的有效期, 可适当减少, 比如: 90 天 # set_var EASYRSA_CERT_EXPIRE 825 # 将上面行修改为下面 set_var EASYRSA_CERT_EXPIRE 90 ---- // "颁发客户端证书" // 注意: "修改用户名" \[root@open-server 3\] ./easyrsa sign client wangxiaochun Confirm request details: yes // 输入 yes 后回车 Certificate created at: /etc/openvpn/easy-rsa-server/3/pki/issued/wangxiaochun.crt # 证书文件 \[root@open-server 3\] tree pki pki ├── ca.crt ├── certs_by_serial │ ├── 5FE114ACC4FE6AB89D17E1B0EECF2B78.pem │ └── EDAEBAB8D65066D307AE58ADC1A56682.pem ├── dh.pem ├── index.txt ├── index.txt.attr ├── index.txt.attr.old ├── index.txt.old ├── issued │ ├── server.crt │ └── wangxiaochun.crt // "生成的客户端证书" ├── openssl-easyrsa.cnf ├── private │ ├── ca.key │ └── server.key ├── renewed │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── reqs │ ├── server.req │ └── wangxiaochun.req ├── revoked │ ├── certs_by_serial │ ├── private_by_serial │ └── reqs_by_serial ├── safessl-easyrsa.cnf ├── serial └── serial.old 12 directories, 18 files --- "验证" --- \[root@open-server 3\] cat pki/index.txt V331220072305ZA3D7C296B478AC274ABC6A4DA5C03724unknown/CN=server V240322083300ZA2375DB2C6F9E46CA36A42A9C2F7B355unknown/CN=wangxiaochun \[root@open-server 3\] ll pki/issued/ total 16 -rw------- 1 root root 4608 Dec 23 15:23 server.crt -rw------- 1 root root 4506 Dec 23 16:33 wangxiaochun.crt \[root@open-server 3\] ll pki/certs_by_serial/ \[root@open-server 3\] cat pki/issued/wangxiaochun.crt ![](https://file.jishuzhan.net/article/1759936232319619074/b7ffb190bb2be99dafbf0007a20d987c.webp) 如果需要颁发的客户端证书较多,**可以使用下面脚本实现客户端证书的批量颁发** **客户端证书自动颁发脚本** // 1) 创建脚本存放目录 \[root@open-server \~\] mkdir /root/Shell -p ---- 客户端证书自动颁发脚本 ---- // 2) 编写脚本 \[root@open-server \~\] vim /root/Shell/openvpn-user-crt.sh #!/bin/bash # 提示用户输入姓名拼音 read -p "请输入用户的姓名拼音(如:\\${NAME}): " NAME # 检查输入的姓名是否为空 if \[ -z "$NAME" \]; then echo "姓名不能为空" exit 1 fi # 定义路径变量 CLIENT_PATH="/etc/openvpn/easy-rsa-client/3" SERVER_PATH="/etc/openvpn/easy-rsa-server/3" LOG_FILE="/var/log/openvpn-script.log" # 函数:记录日志 log() { local log_message="$1" echo "$(date): $log_message" \>\> "$LOG_FILE" } # 检查客户端和服务器目录是否存在 if \[ ! -d "$CLIENT_PATH" \] \|\| \[ ! -d "$SERVER_PATH" \]; then log "未找到所需的目录" exit 1 fi # 在客户端目录生成证书请求 cd "$CLIENT_PATH" \|\| { log "无法进入客户端目录"; exit 1; } ./easyrsa gen-req "${NAME}" nopass \|\| { log "证书请求生成失败"; exit 1; } # 检查证书请求是否生成成功 if \[ ! -f "pki/reqs/${NAME}.req" \]; then log "证书请求生成失败" exit 1 fi # 在服务器目录导入客户端的证书请求 cd "$SERVER_PATH" \|\| { log "无法进入服务器目录"; exit 1; } ./easyrsa import-req "${CLIENT_PATH}/pki/reqs/${NAME}.req" "${NAME}" \|\| { log "导入证书请求失败"; exit 1; } # 签署客户端证书 ./easyrsa sign client "${NAME}" \<\\> /etc/sysctl.conf \[root@open-server \~\] sysctl -p net.ipv4.ip_forward = 1 // "添加 SNAT 规则" // 虚拟网络: 10.8.0.0 \[root@open-server \~\] echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE' \>\> /etc/rc.d/rc.local // "永久生效" \[root@open-server \~\] chmod +x /etc/rc.d/rc.local \[root@open-server \~\] /etc/rc.d/rc.local // "验证规则" \[root@open-server \~\] iptables -vnL -t nat ![](https://file.jishuzhan.net/article/1759936232319619074/2b5ca11867be57bdf874ccac31be33df.webp) **2.5)启动 OpenVPN 服务** **2.5.1)启动 OpenVPN 服务** // CentOS7 存在 [email protected] 文件 \[root@centos7 \~\] rpm -ql openvpn \| grep systemd /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/[email protected] /usr/share/doc/openvpn-2.4.9/README.systemd // "CentOS8 缺失 [email protected] 文件" // 可以从 CentOS7 复制文件 \[root@centos8 \~\] rpm -ql openvpn \| grep systemd /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/[email protected] /usr/share/doc/openvpn/README.systemd --- // "也可以主动编写 [email protected] 文件" \[root@open-server \~\] vim /usr/lib/systemd/system/[email protected] \[Unit

Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I

After=network.target

Service

Type=notify

PrivateTmp=true

ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i.conf

Install

WantedBy=multi-user.target

// "启动 OpenVPN 服务"

// 注意 service 名称和文件名不一致

root@open-server openvpn\] systemctl daemon-reload \[root@open-server openvpn\] systemctl enable --now openvpn@server \[root@open-server openvpn\] systemctl status openvpn@server ![](https://file.jishuzhan.net/article/1759936232319619074/a9f06c33b49aef228aabbcbd0f345098.webp) **2.5.2)** **验证服务状态** \[root@open-server openvpn\] systemctl status openvpn@server # 注意端口号 \[root@open-server \~\] ss -ntlp \| grep vpn # 日志 \[root@open-server \~\] cat /var/log/openvpn/openvpn.log # IP 地址 \[root@open-server \~\] ip a # 路由表 \[root@open-server \~\] route -n ![](https://file.jishuzhan.net/article/1759936232319619074/1fcd150aecc6f46c15fb90767bcb6292.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/fc7ec8d32c1de29d37798dc1ee06f428.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/a974cb78f5a6f0f615f59aabcc57132f.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/701293d77e8892521d9a204d424d4975.webp) **2.6)准备 OpenVPN 客户端配置文件** **2.6.1)客户端** **默认范例配置文件** **说明** \[root@open-server \~\] grep '\^\[\[:alpha:\]\].\*' /usr/share/doc/openvpn/sample/sample-config-files/client.conf client # 指明客户端 dev tun # 指定和服务端一致的接口类型 proto udp # 指定和服务端一致的协议类型 remote my-server-1 1194 # 服务器端的 IP 或 FQDN 及端口 resolv-retry infinite # 指定服务器端 FQDN 而非 IP 时, 当客户端重新连接后会重新解 FQDN 对应的 IP 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-CBC verb 3 **2.6.2)** **生成** **客户端** **用户的** **配置文件** OpenVPN 的 **客户端配置文件** 是通用的,适用于所有用户; 而 **客户端证书文件** 则是针对 每个用户单独生成和使用 的。 // 生成客户端文件, 文件后缀必须为 .ovpn ( "查看范例文件" ) \[root@open-server \~\] grep '\^\[\[:alpha:\]\].\*' /usr/share/doc/openvpn/sample/sample-config-files/client.conf \> /etc/openvpn/client/wangxiaochun/client.ovpn // "创建一个给 wangxiaochun 用户进行使用的 OpenVPN 客户端配置文件" // "OpenVPN 客户端配置文件" 可以复用, 后续其他用户可以使用同样的客户端配置文件 // 注意: "修改用户名" \[root@open-server \~\] ll /etc/openvpn/client/wangxiaochun/ \[root@open-server \~\] vim /etc/openvpn/client/wangxiaochun/client.ovpn \[root@open-server \~\] cat /etc/openvpn/client/wangxiaochun/client.ovpn client dev tun # 需与服务器端配置文件的信息匹配 proto tcp # 需与服务器端配置文件的信息匹配 remote 10.0.0.8 1194 # 生产中为 OpenVPN 公网 IP 或者 FQDN 域名 resolv-retry infinite nobind #persist-key #persist-tun ca ca.crt cert wangxiaochun.crt // "注意修改用户名" key wangxiaochun.key // "注意修改用户名" remote-cert-tls server #tls-auth ta.key 1 cipher AES-256-CBC verb 3 # 此值不能随意指定, 否则无法通信 compress lz4-v2 # 此项在 OpenVPN2.4.X 版本使用, 需要和服务器端保持一致, 如不指定, 默认使用 comp-lz 压缩 ![](https://file.jishuzhan.net/article/1759936232319619074/383f411d33a97b129aa911ebe66ca025.webp) **2.7)实现 OpenVPN 客户端** **2.7.1)** **Windows** **配置部署 OpenVPN 客户端** **2.7.1.1)** **Windows** **安装 OpenVPN 客户端** 官方客户端下载地址: [https://openvpn.net/community-downloads/](https://openvpn.net/community-downloads/ "https://openvpn.net/community-downloads/") ![](https://file.jishuzhan.net/article/1759936232319619074/a4ef0d6a088155ec814161afbc1cb684.webp) OpenVPN 客户端安装过程: ![](https://file.jishuzhan.net/article/1759936232319619074/72d9cb8b71f8f8885ead42f8d761d103.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/f43bdcbdc2284fb8261059e0fab50549.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/f43bdcbdc2284fb8261059e0fab50549.webp) **安装完成** ![](https://file.jishuzhan.net/article/1759936232319619074/d85eabd479948974541de13460c4224a.webp) **2.7.1.2)** **Windows** **客户端配置准备** 保存 配置文件与证书 到 Windows OpenVPN 客户端安装目录 Windows 右键打开 OpenVPN GUI 文件所在位置 在 OpenVPN 服务器打包 用户证书与配置文件 并下载发送给 Windows 客户端 // 在 OpenVPN 服务器 "打包用户证书与配置文件" // 并下载发送给 Windows 客户端 \[root@open-server \~\] cd /etc/openvpn/client/wangxiaochun/ // "打包用户证书与配置文件" \[root@open-server wangxiaochun\] tar cf /root/wangxiaochun.tar ./ \[root@open-server wangxiaochun\] ll /root -rw-r--r-- 1 root root 20480 Dec 23 19:13 wangxiaochun.tar \[root@open-server wangxiaochun\] sz /root/wangxiaochun.tar 放置到 Windows 客户端默认安装目录下 C:\\Program Files\\OpenVPN\\config 目录 ![](https://file.jishuzhan.net/article/1759936232319619074/fd7ddd388aad44f167931cdc43be68e9.webp) **OpenVPN 客户端配置文件** ![](https://file.jishuzhan.net/article/1759936232319619074/24d3476725224f53a2a3797de213e038.webp) **2.7.1.3)** **Windows** **客户端建立 OpenVPN 连接** 在 Windows 中 打开 OpenVPN GUI 工具 ![](https://file.jishuzhan.net/article/1759936232319619074/d85eabd479948974541de13460c4224a.webp) 稍等一会儿,在状态栏显示以下图标,**右键点连接** ![](https://file.jishuzhan.net/article/1759936232319619074/beeff484055401501d57681bf429bd27.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/6d5df0bd7bb62b21cedcdd8f2027d45b.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/9608d8425c1df75e2ac1b4a8cebac546.webp) **2.7.1.4)Windows 客户端** **验证通信** **2.7.1.4.1)在 Windows 客户端** **测试访问 OpenVPN 内网服务器** **注:** 内网服务器**显示是来自于 OpenVPN 服务器的连接** C:\\Users\\WangJ\> ping 172.30.0.100 C:\\Users\\WangJ\> ssh [email protected] ![](https://file.jishuzhan.net/article/1759936232319619074/364e57201ec855e1f931e386391140df.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/d8c774dcdc2dff4dd5b1a986f40e45f8.webp) **2.7.1.4.2)** **观察 OpenVPN 服务器日志** \[root@open-server \~\] cat /var/log/openvpn/openvpn.log \[root@open-server \~\] cat /var/log/openvpn/openvpn-status.log ![](https://file.jishuzhan.net/article/1759936232319619074/a8b4de4806cd6bf32a6572c70fce8c88.webp) ![](https://file.jishuzhan.net/article/1759936232319619074/d22a62a92026c1401ae3bde3c0d32178.webp) **2.7.1.4.3)验证 OpenVPN 服务器连接状态** 可以在 OpenVPN 服务器看到 公网客户端 IP 地址 连接我们 OpenVPN 服务器 1194 端口的连接 \[root@open-server \~\] ss -nt ![](https://file.jishuzhan.net/article/1759936232319619074/c1c9af99abd0d2899428ebbabd3c97ef.webp) **2.7.1.4.4)验证** **Windows** **客户端的 IP地址** ![](https://file.jishuzhan.net/article/1759936232319619074/2c435d82cfb645bb9e48194217788a4d.webp) **2.7.1.4.5)验证** **Windows** **客户端的路由表** **Windows** **客户端的路由表** route print ![](https://file.jishuzhan.net/article/1759936232319619074/d21c74d5f732bed1871b13503ca6b794.webp) **2.7.2)** **Linux** **配置部署 OpenVPN 客户端** **2.7.2.1)客户端安装 OpenVPN** \[root@openvpn-client \~\] yum install openvpn -y **2.7.2.2)下载客户端公钥与私钥以及 CA 证书至客户端** \[root@openvpn-client \~\] cd /etc/openvpn/ \[root@openvpn-client openvpn\] scp openvpn-server:/data/easy-rsa-server/pki/ca.crt ./ \[root@openvpn-client openvpn\] scp openvpn-server:/data/easy-rsa-client/pki/issued/client.crt ./ \[root@openvpn-client openvpn\] scp openvpn-server:/data/easy-rsa-client/pki/private/client.key ./ **2.7.2.3)客户端有了公钥和私钥后,还需要准备对应的客户端配置文件** \[root@openvpn-client \~\] cat /etc/openvpn/client.ovpn client # 指定当前 VPN 是客户端 dev tun # 使用 tun 隧道传输协议 proto tcp # 使用 tcp 协议传输数据 remote OpenVPN服务器地址 1194 # openvpn 服务器 IP 地址端口号 resolv-retry infinite # 断线自动重新连接, 在网络不稳定的情况下非常有用 nobind # 不绑定本地特定的端口号 ca ca.crt # 指定 CA 证书的文件路径 cert client.crt # 指定当前客户端的证书文件路径 key client.key # 指定当前客户端的私钥文件路径 verb 3 # 指定日志文件的记录详细级别, 可选0-9, 等级越高日志内容越详细 persist-key # 重启服务时默认会重新读取key文件, 开启此配置后保持使用第一次的 key文件 persist-tun # 重新启动 VPN 时, 仍会一直保持tun是up状态 **2.7.2.4)启动 OpenVPN 客户端** \[root@openvpn-client \~\] openvpn --daemon --cd /etc/openvpn --config client.ovpn --log-append /var/log/openvpn.log --daemon # openvpn 以 daemon 方式启动 --cd dir # 配置文件的目录, openvpn 初始化前, 先切换到此目录 --config file # 客户端配置文件的路径 --log-append file # 日志文件路径, 如果文件不存在会自动创建 **2.7.3)** **MacOS** **配置部署 OpenVPN 客户端** 官方没有提供基于 MacOS 的 OpenVPN 的客户端 可以使用第三方 OpenVPN 客户端 参考链接: [https://tunnelblick.net/downloads.html](https://tunnelblick.net/downloads.html "https://tunnelblick.net/downloads.html") ( 需要科学访问 ) ![](https://file.jishuzhan.net/article/1759936232319619074/714bb29de76fabdc42585e1600726174.webp) **2.7.4)IOS 配置部署 OpenVPN 客户端** 第一步: 自己申请 美国区 APPLE ID 或淘宝购买( 8-10 元一个) [email protected] Unicorn.1996 第二步:用 美国 ID 登陆 APPLE STORE( 千万不要登陆 ICLOUD); 第三步:搜索 OpenVPN 的APP 下载 ,安装; 第四步:安装完成后根据以下图文教程按步骤操作。 ![](https://file.jishuzhan.net/article/1759936232319619074/9cf8d6f530cbc43cd21f75fb3cba50f9.webp) **2.8)实现访问 VPN 服务器的内网主机** **2.8.1)OpenVPN 服务器打开 ip_forward 功能** # 在服务器开启 ip_forward 转发功能 \[root@open-server \~\] echo net.ipv4.ip_forward = 1 \>\> /etc/sysctl.conf \[root@open-server \~\] sysctl -p net.ipv4.ip_forward = 1 **2.8.2)配置实现内网服务器回应外网的请求的路由** **2.8.2.1)在内网每个主机上添加路由** # 阿里云服务器不支持修改路由 \[root@rocky8 \~\] route add -net 10.8.0.0/24 gw 172.30.0.1 **2.8.2.2)在内网主机指定的路由器上添加路由** \[root@router \~\] route add -net 10.8.0.0/24 gw 172.30.0.1 **2.8.2.3)在 OpenVPN 服务器配置 iptables 规则** # 添加 SNAT 规则 # 方法 1 \[root@open-server \~\] echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j MASQUERADE' \>\> /etc/rc.d/rc.local # 方法 2 \[root@open-server \~\] echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 172.30.0.1' \>\> /etc/rc.d/rc.local \[root@open-server \~\] chmod +x /etc/rc.d/rc.local \[root@open-server \~\] iptables -vnL \[root@open-server \~\] iptables -vnL -t nat

相关推荐
搬砖天才、4 天前
日常记录-设置新增pve的ct容器
ssh·pve·nas·时区·openvpn·ct容器
Winlams4 个月前
linux部署openvpn的成功案例,以及解决无法ping通客户端
linux·运维·服务器·openvpn
努力冲10 个月前
openVPN
openvpn
量化交易学徒10 个月前
【DevOps】OpenVPN 实现分流的几种方法和实战
运维·路由·devops·openvpn·分流
aa一叶知秋aa1 年前
OpenVPN的部署连接(linux客户端版),附脚本操作
linux·运维·服务器·openvpn
hacker_lpy1 年前
openvpn组网技术原理及配置过程(centos服务器/安卓客户端/linux客户端)
运维·网络技术·openvpn
luopeng2076634361 年前
Centos中openvpn服务端客户端快速安装
linux·运维·centos·openvpn