OpenVPN
简介¶
OpenVPN 是一个免费且开源的虚拟专用网络 (VPN)。本文将指导您使用 X509 公钥基础设施 (PKI) 设置 OpenVPN。本指南需要一个具有公共 IP 地址的 Rocky Linux 系统,因为 OpenVPN 采用客户端/服务器模型。实现这一点的最简单方法是通过您选择的云提供商创建一个虚拟专用服务器 (VPS)。在撰写本文时,Google Cloud Platform 为其 e2-micro 实例提供免费套餐。如果您正在寻找一种最简单的 OpenVPN 设置,使用无需 PKI 的点对点 (p2p) VPN,请参考他们的 静态密钥简易指南。
先决条件和假设¶
以下是此过程的最低要求
- 能够以 root 用户身份运行命令或使用
sudo
提升权限 - 一个具有公共可访问 IP 的 Rocky Linux 系统
安装 OpenVPN¶
安装企业 Linux 附加软件包 (EPEL) 存储库
sudo dnf install epel-release -y
安装 OpenVPN
sudo dnf install openvpn -y
设置证书颁发机构 (CA)¶
安装 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-ca
和 nopass
参数的 easyrsa
脚本以在没有密码的情况下构建证书颁发机构
sudo ./easy-rsa/3/easyrsa build-ca nopass
创建证书¶
运行带 gen-req
和 nopass
参数的 easyrsa
脚本以在没有密码的情况下生成服务器证书
sudo ./easy-rsa/3/easyrsa gen-req server nopass
运行带 sign-req
和 server
参数的 easyrsa
脚本以签名服务器证书
sudo ./easy-rsa/3/easyrsa sign-req server server
注意
您可以根据需要重复以下步骤来为其他客户端创建证书。
运行带 gen-req
和 nopass
参数的 easyrsa
脚本以在没有密码的情况下生成客户端证书
sudo ./easy-rsa/3/easyrsa gen-req client1 nopass
运行带 sign-req
和 client
参数的 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
复制并将 Diffie Hellman 文件路径粘贴到示例文件 server.conf
的第 85 行
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 协议。有关设置 SSH 访问,请查阅 Rocky Linux 指南 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。您也可以通过在系统上运行 man openvpn
命令,使用 man 手册页来了解更多关于 OpenVPN 的信息。
作者:Joseph Brinkman
贡献者:Steven Spencer, Ganna Zhyrnova