OpenVPN 是一款开源的虚拟私人网络(VPN)软件,基于 SSL/TLS 协议实现安全的点对点或站点对站点连接。它广泛应用于远程访问、数据加密传输、绕过网络限制等场景。对于 Linux 用户而言,掌握 OpenVPN 的安装与配置不仅能提升网络安全性,还能灵活应对多样化的网络需求。
本文将详细介绍在 Linux 系统中安装 OpenVPN 的完整流程,包括客户端与服务端的配置、最佳实践、常见问题排查及示例用法。无论你是需要连接到现有 VPN 服务器的普通用户,还是计划搭建自己的 OpenVPN 服务端,本文都能为你提供清晰的指导。
3.1 安装 OpenVPN 服务端
服务端与客户端使用相同的 openvpn 包,安装命令与 2.1 节相同:
1 |
|
3.2 生成加密证书与密钥(使用 EasyRSA)
OpenVPN 基于证书认证(PKI),需生成 CA 根证书 、 服务端证书/密钥 、 客户端证书/密钥 、 Diffie-Hellman 参数 (DH)、 TLS 加密密钥 (可选,增强安全性)。推荐使用 OpenVPN 官方提供的 EasyRSA 工具自动化生成。
步骤 1:下载 EasyRSA
1 |
|
步骤 2:初始化 PKI(公钥基础设施)
1 | sudo ./easyrsa init-pki |
步骤 3:生成 CA 根证书(关键)
CA 根证书是所有证书的信任源,需妥善保管(泄露会导致任何人可伪造证书接入 VPN):
1 | sudo ./easyrsa build-ca nopass |
生成后,CA 证书位于 pki/ca.crt ,私钥位于 pki/private/ca.key ( 绝对禁止泄露 ca.key )。
步骤 4:生成服务端证书与密钥
1 |
|
生成后,服务端证书位于 pki/issued/server.crt ,私钥位于 pki/private/server.key 。
步骤 5:生成客户端证书与密钥(每个客户端一个)
假设客户端名为 “client1”,生成命令:
1 | sudo ./easyrsa build-client-full client1 nopass |
生成后,客户端证书位于 pki/issued/client1.crt ,私钥位于 pki/private/client1.key 。
步骤 6:生成 Diffie-Hellman 参数(DH)
DH 参数用于密钥交换,增强前向安全性:
1 | sudo ./easyrsa gen-dh |
步骤 7:生成 TLS 加密密钥(可选,推荐)
用于加密 TLS 握手过程,防止中间人攻击:
1 | openvpn --genkey secret pki/tls-auth.key |
步骤 8:复制证书/密钥到服务端目录
将生成的关键文件复制到 OpenVPN 服务端配置目录(如 /etc/openvpn/server/ ):
1 | sudo mkdir -p /etc/openvpn/server/keys |
3.3 配置服务端参数
创建服务端配置文件 /etc/openvpn/server/server.conf ,以下为推荐配置(关键参数已标注):
1 |
|
3.4 配置防火墙与端口转发
步骤 1:启用 IPv4 转发(服务端必须)
1 | sudo tee -a /etc/sysctl.conf <<EOF |
步骤 2:配置服务器防火墙
根据系统防火墙工具( ufw 或 firewalld )开放 OpenVPN 端口并允许转发。
Ubuntu/Debian(使用 ufw)
1 |
|
CentOS/RHEL(使用 firewalld)
1 |
|
使用 iptables
1 | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE |
3.5 启动服务端并验证状态
1 |
|
步骤 2:验证服务运行
1 |
|
3.6 生成客户端配置文件
客户端需使用服务端的 CA 证书、客户端证书/密钥,以及与服务端匹配的加密参数。以下为手动生成 client1.ovpn 的示例:
1 | client |
- 证书是否过期?通过
openssl x509 -in client1.crt -noout -dates查看有效期。
1 | sudo openvpn --config /etc/openvpn/client/client.ovpn --verb 6 |
问题 4:服务端日志提示“Cannot open TUN/TAP dev /dev/net/tun: No such file or directory”
- 原因 :系统未加载 TUN 模块。
- 解决 :手动加载模块:
sudo modprobe tun,并添加到开机加载:echo "tun" | sudo tee -a /etc/modules。

























