重要提醒:使用 Root 权限
以下所有命令都需要 root 权限执行,您可以通过 sudo -i 切换到 root 用户,或者在命令前加上 sudo。

第一步:环境准备
-
一台干净的 Linux 服务器
- 推荐使用 CentOS 7 / RHEL 7 / AlmaLinux / Rocky Linux,本教程以此为例。
- 推荐配置:1 核 CPU, 1GB 内存, 20GB 硬盘。
- 公网 IP 地址:服务器必须有一个公网 IP,并且防火墙允许 VPN 端口(默认
1194)和SSH端口(22)的流量。 - 操作系统:确保系统已更新。
-
更新系统
yum update -y
第二步:安装 OpenVPN 和 Easy-RSA
Easy-RSA 是一个用于管理 PKI (Public Key Infrastructure) 的工具集,我们将用它来创建和管理服务器与客户端的证书。
-
安装 EPEL 仓库
(图片来源网络,侵删)yum install -y epel-release
-
安装 OpenVPN 和 Easy-RSA
yum install -y openvpn easy-rsa
第三步:配置证书颁发机构 (CA)
这是整个 VPN 安全的核心,用于签发服务器和客户端的证书。
-
创建 CA 工作目录
mkdir -p /etc/openvpn/easy-rsa/keys cp -rf /usr/share/easy-rsa/3.0.8/* /etc/openvpn/easy-rsa/
注意:您的
easy-rsa版本号可能不是0.8,请根据实际情况调整。 -
编辑
vars文件 这个文件包含了 CA 的一些默认变量,如国家、城市、组织名等,修改它可以让后续生成证书更方便。cd /etc/openvpn/easy-rsa/ vim vars
找到并修改以下几行(取消注释并修改为你自己的信息):
set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "Beijing" set_var EASYRSA_REQ_CITY "Beijing" set_var EASYRSA_REQ_ORG "My Company Name" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "My VPN Unit"
保存并退出 (
wq)。 -
初始化 PKI (Public Key Infrastructure)
./easyrsa init-pki
-
构建 CA 证书 这会创建根证书,是所有其他证书的信任基础。
./easyrsa build-ca nopass
nopass参数表示 CA 私钥不设置密码,方便服务器自动启动,如果安全性要求极高,可以去掉此参数,但需要在服务器启动时手动输入密码。- 过程中会要求输入 Common Name,直接按回车使用默认值(
Easy-RSA CA)即可。
-
创建并签发服务器证书
# 为服务器创建一个证书请求,并指定 Common Name 为 "server" ./easyrsa gen-req server nopass # 使用 CA 签发服务器证书 ./easyrsa sign-req server server
- 在签发时,会问你 "Confirm request details: [y/n]",输入
y确认。
- 在签发时,会问你 "Confirm request details: [y/n]",输入
-
创建 Diffie-Hellman (DH) 参数 DH 参数用于增强前向安全性,防止密钥交换被破解,这个过程可能需要几分钟时间,请耐心等待。
./easyrsa gen-dh
-
生成 HMAC 密钥 HMAC 用于提供额外的身份验证层,防止 DDoS 攻击。
openvpn --genkey --secret pki/ta.key
-
整理证书文件 将所有需要的证书和密钥文件复制到 OpenVPN 配置目录。
cp pki/ca.crt /etc/openvpn/ cp pki/issued/server.crt /etc/openvpn/ cp pki/private/server.key /etc/openvpn/ cp pki/dh.pem /etc/openvpn/ # dh.pem 是 gen-dh 的输出文件 cp pki/ta.key /etc/openvpn/
第四步:配置 OpenVPN 服务器
-
创建服务器配置文件 我们将使用一个示例配置文件作为模板。
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
-
编辑
server.conf文件vim /etc/openvpn/server.conf
确保以下配置项正确:
port 1194 proto udp dev tun # 证书和密钥路径 ca ca.crt cert server.crt key server.key dh dh.pem # 网络配置 server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt # 推给客户端的路由 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" # 安全和性能 keepalive 10 120 cipher AES-256-CBC auth SHA256 user nobody group nobody # 日志 status openvpn-status.log log-append /var/log/openvpn.log # 启用 TLS 认证 tls-crypt ta.key # 允许客户端之间互相通信(可选) client-to-client # 每个客户端使用独立的证书(推荐) duplicate-cn
配置解释:
port 1194:VPN 服务器监听的端口,可以修改为其他未被占用的端口。proto udp:使用 UDP 协议,速度更快,更适合流媒体,UDP 被墙,可以改为tcp。server 10.8.0.0 255.255.255.0:定义 VPN 服务器为客户端分配的虚拟子网。push "redirect-gateway def1":指示客户端将所有网络流量都通过 VPN 传输。push "dhcp-option DNS ...":为客户端指定 DNS 服务器,这里使用 Google DNS,你也可以换成 Cloudflare DNS (1.1.1) 或其他。cipher AES-256-CBC和auth SHA256:指定加密和认证算法,这是目前安全且广泛兼容的组合。tls-crypt ta.key:启用 TLS 密钥交换,能有效防御 DDoS 攻击。
-
创建日志文件并设置权限
touch /var/log/openvpn.log chown nobody:nobody /var/log/openvpn.log
第五步:配置服务器端网络和防火墙
这是最关键的一步,确保 VPN 流量能够正确路由。
-
启用 IP 转发 编辑
/etc/sysctl.conf文件:vim /etc/sysctl.conf
找到
net.ipv4.ip_forward = 0这一行,将其改为1:net.ipv4.ip_forward = 1
保存后,立即生效:
sysctl -p
-
配置防火墙 (firewalld)
# 添加 OpenVPN 服务 (默认端口 1194/udp) firewall-cmd --permanent --add-service=openvpn # 启用 NAT (网络地址转换) 并伪装流量 firewall-cmd --permanent --add-masquerade # 重新加载防火墙 firewall-cmd --reload
-
配置 SELinux (如果启用) 如果你的系统启用了 SELinux,需要为 OpenVPN 设置正确的上下文。
# 安装 SELinux 管理工具 yum install -y policycoreutils-python # 为 OpenVPN 的
