跳至内容

OpenVPN

简介

OpenVPN 是一个免费的开源虚拟专用网络 (VPN)。本文将指导您通过使用 X509 公钥基础设施 (PKI) 设置 OpenVPN。本指南需要一个具有公网 IP 地址的 Rocky Linux 系统,因为 OpenVPN 在客户端/服务器模型上运行。实现此目标的最简单方法是通过您选择的云提供商启动一个虚拟专用服务器 (VPS)。在撰写本文时,Google Cloud Platform 为其 e2-micro 实例提供免费层级。如果您正在寻找使用点到点 (p2p) VPN(不使用 PKI)的最直接的 OpenVPN 设置,请参阅他们的 静态密钥小型 HOWTO.

先决条件和假设

以下是此过程的最低要求

  • 能够以 root 用户身份运行命令或使用 sudo 提升权限
  • 一个具有公网访问权限的 Rocky Linux 系统

安装 OpenVPN

安装适用于企业版 Linux 的附加软件包 (EPEL) 存储库

sudo dnf install epel-release -y

安装 OpenVPN

sudo dnf install openvpn -y

设置证书颁发机构

安装 easy-rsa

sudo dnf install easy-rsa -y

/etc/openvpn 中创建 easy-rsa 目录

sudo mkdir /etc/openvpn/easy-rsa

创建指向 easy-rsa 文件的符号链接

sudo ln -s /usr/share/easy-rsa /etc/openvpn/easy-rsa

更改目录到 /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

使用 init-pki 参数运行 easyrsa 脚本以初始化证书颁发机构的 PKI

sudo ./easy-rsa/3/easyrsa init-pki

使用 build-canopass 参数运行 easyrsa 脚本以构建不带密码的证书颁发机构

sudo ./easy-rsa/3/easyrsa build-ca nopass

创建证书

使用 gen-reqnopass 参数运行 easyrsa 脚本以生成不带密码的服务器证书

sudo ./easy-rsa/3/easyrsa gen-req server nopass

使用 sign-reqserver 参数运行 easyrsa 脚本以签署服务器证书

sudo ./easy-rsa/3/easyrsa sign-req server server

注意

您可以根据需要重复以下步骤以创建其他客户端。

使用 gen-reqnopass 参数运行 easyrsa 脚本以生成不带密码的客户端证书

sudo ./easy-rsa/3/easyrsa gen-req client1 nopass

使用 sign-reqclient 参数运行 easyrsa 脚本以使用不带密码的客户端证书签署客户端证书

sudo ./easy-rsa/3/easyrsa sign-req client client1

OpenVPN 需要 Diffie Hellman 参数。运行此命令以生成它们

sudo ./easy-rsa/3/easyrsa gen-dh

配置 OpenVPN

PKI 创建完成后,就可以配置 OpenVPN 了。

server.conf 示例文件复制到 /etc/openvpn

sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn

使用您选择的编辑器打开并写入 server.conf

sudo vim /etc/openvpn/server.conf

接下来,您必须将证书颁发机构、服务器证书和服务器密钥的文件路径添加到 OpenVPN 服务器配置文件中。

复制并粘贴第 78-80 行上的密钥和证书的文件路径

注意

在 Vim 中,您可以使用 :set nu 为当前编辑添加行号

ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key  # This file should be kept secret

复制并粘贴示例文件 server.conf 第 85 行上的 Diffie Hellman 文件路径

dh /etc/openvpn/easy-rsa/pki/dh.pem

OpenVPN 默认情况下使用 SSL,但可以选择使用 TLS。本指南使用 SSL。

注释掉第 244 行上的 tls-auth ta.key 密钥对值

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

在关闭 server.conf 之前保存。

配置防火墙

OpenVPN 默认运行在 UDP 端口 1194 上。您将使用 firewalld 允许 OpenVPN 流量进入服务器。

安装 firewalld

sudo dnf install firewalld -y

启用 firewalld

sudo systemctl enable --now firewalld

通过将其添加为服务,允许 OpenVPN 通过防火墙

sudo firewall-cmd --add-service=openvpn --permanent

通过向防火墙添加伪装规则来启用网络地址转换 (NAT) 并隐藏公共客户端 IP 地址

sudo firewall-cmd --add-masquerade --permanent

重新加载防火墙

sudo firewall-cmd --reload

配置路由

使用以下命令允许 IP 转发

sudo sysctl -w net.ipv4.ip_forward=1

启动 OpenVPN 服务器

根据 OpenVPN 文档,“最好从命令行启动 OpenVPN 服务器”

sudo openvpn /etc/openvpn/server.conf

启动 OpenVPN 后,按 Ctrl + Z,然后将作业发送到后台

bg

配置和启动客户端

除了服务器之外,您还需要在所有客户端上安装 OpenVPN 才能正常工作。如果您尚未安装,请在客户端上安装 OpenVPN

sudo dnf install openvpn -y

创建新目录以存储客户端的密钥、证书和配置文件

sudo mkdir -p /etc/openvpn/pki`

现在使用安全传输方式复制密钥和证书,并将它们放置在 /etc/openvpn/pki 中。您可以使用 SFTP 或 SCP 协议来完成此操作。查看 Rocky Linux 指南 SSH 公钥和私钥 设置 SSH 访问权限。

以下是在客户端配置中需要的必要证书和密钥以及它们在服务器上的文件路径

  • ca.crt
  • client1.crt
  • client1.key

将必要的证书和密钥存储在 /etc/openvpn/pki 中后,将示例文件 client.conf 复制到 /etc/openvpn

sudo cp /usr/share/doc/openvpn/sample/sample-config-files/client.conf /etc/openvpn

使用您选择的编辑器打开 client.conf

sudo vim /etc/openvpn/client.conf`

将必要证书和密钥的文件路径映射到客户端配置文件。您可以通过将这些文本行复制粘贴到示例文件的第 88-90 行来完成此操作

ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/client1.crt
key /etc/openvpn/pki/client1.key

您还需要设置服务器主机名或 IP。您可以保留默认的 UDP 端口 1194。在示例文件中,它位于第 42 行

remote server 1194

在退出 client.conf 之前保存。

在客户端上启动 OpenVPN

sudo openvpn /etc/openvpn/client.conf

启动 OpenVPN 后,按 Ctrl + Z,然后将作业发送到后台

bg

运行以下命令查看在后台运行的作业

jobs

向服务器发送测试 ping。默认情况下,其私有地址为 10.8.0.1

ping 10.8.0.1

结论

您现在应该已拥有并运行自己的 OpenVPN 服务器!通过此基本配置,您已为您的系统提供了安全的专用隧道,以便通过更大的互联网进行通信。但是,OpenVPN 具有高度的可定制性,本指南仅提供了基本的信息。您可以通过查看他们的 网站 来进一步探索 OpenVPN。您也可以在您的系统上阅读更多关于 OpenVPN 的信息 - man openvpn - 通过使用手册页。

作者:Joseph Brinkman

贡献者:Steven Spencer, Ganna Zhyrnova