CentOS7+OpenVPN2.4+EasyRsa3的安装和配置

设备环境

设备IP网卡系统
外网主机192.168.56.30NATWindows
虚拟机OpenVPN-Server192.168.56.29
172.16.30.101
ens33
ens36
CentOS7
虚拟机内网设备172.16.30.102ens36CentOS7

预先了解

OpenVPN

OpenVPN是一种开源虚拟专用网络(VPN)解决方案,通过在公共网络上创建一个安全的、点到点的连接来实现远程访问和私人通信。其原理如下:

  1. 建立连接:客户端向服务器发送加密请求,并建立起可靠的控制信道。

  2. 加密通信:一旦建立了控制信道,双方将使用预共享密钥或数字证书来协商数据通道的加密参数。OpenVPN支持多种加密和身份验证方法。

  3. 传输数据:一旦加密参数建立,数据被分割成小块并通过虚拟隧道传输,这些数据经过加密和解密处理以保护其机密性和完整性。

  4. 断开连接:当会话结束时,双方都可以选择关闭连接,以确保数据没有泄露。

总体而言,OpenVPN利用加密技术在公共网络上建立了一个安全的、点对点的连接,使得远程用户可以访问私有网络中的资源,同时也确保了数据传输的机密性和完整性。

PKI

在 OpenVPN 中,PKI(Public Key Infrastructure,公钥基础结构)是一种用于管理和维护数字证书的框架。PKI 可以用于生成、颁发、撤销和更新数字证书。数字证书是一种加密机制,用于验证通信双方的身份并保护通信数据的安全性。

OpenVPN PKI 是一个集成了 X.509 证书签名机构的工具集合。它允许管理员创建和管理数字证书,并通过这些数字证书对 VPN 隧道进行身份验证和加密。PKI 工具包括以下组件:

  1. easy-rsa:一个 OpenSSL 管理工具,用于生成证书、密钥和其他相关文件。
  2. pkitool:一个脚本工具,用于简化证书生成和管理过程。
  3. Certificate Authority(CA):一组根证书和中间证书,用于签署其他证书。
  4. Revocation List(CRL):存储吊销证书列表的文件,防止已撤销的证书被使用。

使用 OpenVPN PKI 工具,管理员可以创建服务器证书、客户端证书和 CA 证书,并将其用于 OpenVPN 的身份验证和加密。管理员还可以轻松地撤销或更新证书,以及生成 CRL 并将其分发给需要访问 VPN 的用户。

ca.crt

ca.crt是OpenVPN中的一个证书文件,用于验证服务器和客户端之间的身份。这个文件包含了一个数字证书颁发机构(CA)的公钥,以及其他相关信息。在OpenVPN中,这个证书被用来验证服务器的身份,以便客户端能够与正确的服务器进行连接,并且确保连接是安全的。

dh.pem

在OpenVPN中,dh.pem文件是一个Diffie-Hellman密钥交换参数文件。它包含了一组预定义的数学参数,用于协商共享密钥。在OpenVPN中,这些参数用于生成临时密钥,以便在建立安全连接时进行加密和身份验证。DH密钥交换可以增强数据传输的安全性,因为即使攻击者能够截获通信,他们也无法破解密钥。

每个客户端和服务端都必须具有相同的dh.pem文件以确保密钥交换的正确性。在OpenVPN配置中,dh.pem文件路径通常通过配置项dh指定。如果未指定该配置项,则OpenVPN将使用默认的512位DH参数。然而,建议使用更长的DH参数,例如2048位或4096位,以提高安全性。

ta.key

在OpenVPN中,ta.key文件是一个预共享密钥文件,用于增强TLS(Transport Layer Security)连接的安全性。TLS是一种加密协议,用于在客户端和服务器之间建立安全连接,以确保数据传输的机密性和完整性。预共享密钥是一个由OpenVPN管理员创建的随机密钥,用于加密TLS通信。TA表示TLS-Auth,在OpenVPN中,它可以用于提供额外的身份验证和防抵赖保护。

在OpenVPN配置中,ta.key文件路径通常通过tls-auth指令指定。此指令允许OpenVPN服务器和客户端使用相同的预共享密钥进行TLS认证。当OpenVPN客户端尝试连接到服务器时,它将使用ta.key文件的内容与服务器进行身份验证。如果没有正确的ta.key文件,则无法建立连接。

使用ta.key文件可以增强OpenVPN连接的安全性,并提供防范重放攻击、MITM(中间人)攻击和其他类似攻击的保护。建议在OpenVPN中启用TLS-Auth并使用ta.key文件来加强连接的安全性。

虚拟机OpenVPN-Server安装OpenVPN和EasyRSA

yum install epel-release -y
yum update -y
yum install openvpn easy-rsa -y

cp -r /usr/share/easy-rsa/3 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa

生成各种文件

# 初始化PKI (Public Key Infrastructure)
./easyrsa init-pki

# 生成CA证书,不加密
./easyrsa build-ca nopass

# 生成交互密钥
./easyrsa gen-dh

# 生成共享密钥
openvpn --genkey --secret pki/ta.key

# 生成服务端密钥,不加密。(openvpn-server为密钥文件名称,可任意指定)
./easyrsa build-server-full openvpn-server nopass

# 生成客户端密钥,不加密。(openvpn-client为密钥文件名称,可任意指定)
./easyrsa build-client-full openvpn-client nopass

# 将相关证书拷贝到 OpenVPN 的配置文件夹
cp pki/ca.crt /etc/openvpn/ca.crt
cp pki/dh.pem /etc/openvpn/dh.pem
cp pki/ta.key /etc/openvpn/ta.key
cp pki/crl.pem /etc/openvpn/crl.pem
cp pki/issued/openvpn-server.crt /etc/openvpn/server.crt
cp pki/private/openvpn-server.key /etc/openvpn/server.key

配置服务端

cd /etc/openvpn
mv /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/server.conf

# 编辑server.conf
vi server.conf
# 26行,local 192.168.56.29
# 143行,push "172.16.30.0 255.255.255.0"

systemctl start openvpn@server

放行 OpenVPN 入网流量与开启 IP 伪装

firewall-cmd --permanent --add-service openvpn
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

检查是否开启流量转发

sysctl -a | grep net.ipv4.ip_forward

确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

配置客户端

下载安装 OpenVPN-Windows

mkdir /etc/openvpn/client
cp pki/ca.crt pki/issued/openvpn-client.crt pki/private/openvpn-client.key pki/ta.key /etc/openvpn/client
mv /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /etc/openvpn/client/client.ovpn
cd /etc/openvpn/client
# 该目录下一共五个文件, ca.crt openvpn-client.crt openvpn-client.key ta.key client.ovpn

# 编辑client.ovpn
vi client.ovpn
# 192.168.56.29 为服务端IP
# 42行,remote 192.168.56.29 1194

/etc/openvpn/client 下的所有文件拷贝到Windows主机的 ~/OpenVPN/config/

使用管理员权限打开OpenVPN,然后双击导入~/OpenVPN/config/client.ovpn,然后连接。

尝试ping服务端(172.16.30.101)和内网设备(172.16.30.102)

连接OpenVPN
连接成功的状态
Ping内网设备

参考