文档定位:本文档聚焦 OpenVPN 客户端侧的两大核心课题——认证模式选型与固定 IP 分配。服务端基础部署参见部署指南,工业网关设备接入参见私有化方案。
一、认证模式总览
OpenVPN 提供两种主要认证模式,它们在服务端配置、凭证分发和运维复杂度上有本质差异:
| 维度 | 用户名/密码 | X.509 证书 |
| 服务端指令 | auth-user-pass-verify + client-cert-not-required | 默认(无需额外指令) |
| 客户端文件 | ca.crt(+ 可选的 tls-crypt.key) | ca.crt + client.crt + client.key |
| 凭证分发 | 告知用户名密码 | 每个设备签发独立证书 |
| 吊销机制 | 修改认证脚本/凭据文件 | CRL 吊销列表或 easyrsa revoke |
| 安全模型 | 密码泄露 = 该用户冒用风险 | 单设备证书泄露 ≠ 影响其他设备 |
| 嵌入式设备 | 配置最简单 | 需导入 3 个文件,但免人工记忆密码 |
决策原则:
- 设备 ≤ 10 台且更换频繁 → 用户名/密码(配
duplicate-cn) - 设备 > 10 台或生产环境 → 证书认证(推荐)
- 等保合规 → 必须证书 + CRL
二、方案 A:用户名/密码 + 固定 IP
2.1 机制原理
传统方案下一个用户名代表一个”虚拟身份”,但若服务器未启用 client-config-dir(CCD),所有客户端从同一个 IP 池随机分配地址。启用 CCD 后,OpenVPN 连接建立时自动查找 /etc/openvpn/ccd/ 下与客户端 Common Name 同名的文件,从中读取该客户端的专属配置指令。
Common Name 的来源取决于认证方式:
- 用户名/密码 +
username-as-common-name→ CN = 用户名 - 证书认证 → CN = 证书 Subject 的 CN 字段
2.2 服务端增量配置
在部署指南生成的 server.conf 基础上,确保已包含:
2.3 创建 CCD 条目
2.4 ifconfig-push 参数解释
TUN 模式下的 IP 对 A B:
- A:分配给客户端的 VPN IP(实际使用的地址,如
10.8.0.100) - B:服务器端虚拟端点地址
⚠️ CCD 分配的 IP 不应落在
server指令定义的 DHCP 池内(池默认.2~.253),否则会发生冲突。建议将固定 IP 分配在池的末尾区段(如.100+),同时在server.conf中用ifconfig-pool 10.8.0.2 10.8.0.99 255.255.255.0显式限定 DHCP 池范围。
2.5 验证固定 IP
连接后查看 OpenVPN 状态文件:
三、方案 B:X.509 证书 + 固定 IP
3.1 生成客户端身份证书
生成位置:
| 文件 | 路径 |
证书 .crt | pki/issued/<CN>.crt |
私钥 .key | pki/private/<CN>.key |
3.2 切换为证书认证
从部署指南的 server.conf 中移除用户名/密码相关行:
关键陷阱:OpenVPN 配置文件中,
#仅在行首时才被视为注释。option # comment这种行内写法不可靠——client-cert-not-required可能仍然生效,导致证书认证失败。务必彻底删除该行或确保#为行首第一个字符。
重启生效:
3.3 导出客户端证书文件
3.4 CCD 配置(证书模式)
证书模式下 CCD 文件名 = 证书 CN,严格区分大小写:
令 OpenVPN 重新读取配置:
推荐使用证书模式:证书认证下由于 CN 使用设备标识(如序列号),CCD 文件名建立后即固定,不会像用户名方式那样因改密码而变动——这是推荐用于生产环境的关键原因之一。
3.5 证书吊销
当设备退役或私钥泄露时:
重启服务以加载新的 CRL。
四、PC 客户端接入
4.1 用户名/密码模式
client.ovpn(替换 YOUR_SERVER_IP 与 CA 证书内容):
安装 OpenVPN GUI,将 .ovpn 放入 C:\Program Files\OpenVPN\config\,连接时输入凭据。
重要:
data-ciphers、data-ciphers-fallback、compress的值必须与部署指南 §3.1 中的server.conf完全一致。若服务端启用了tls-crypt,需在<ca>块后追加<tls-crypt>块并粘贴tls-crypt.key内容。
4.2 证书模式
remote-cert-tls server 强制验证服务端证书的 EKU 扩展(TLS Web Server Authentication),是防中间人攻击的关键安全选项——证书模式下务必包含。
五、故障排查速查表
| 现象 | 典型原因 | 解决 |
AUTH_FAILED | 用户名/密码不匹配 | 手动执行认证脚本测试:echo -e "sanker\nreknas" | /etc/openvpn/check-password.sh |
AUTH_FAILED | 认证脚本无执行权限 | chmod +x /etc/openvpn/check-password.sh |
certificate required | 服务端仍配置了 client-cert-not-required | 检查该行是否彻底删除(行内注释可能仍生效) |
| 固定 IP 不生效 | 未配置 client-config-dir | grep client-config-dir /etc/openvpn/server/server.conf 确认 |
| 固定 IP 错乱 | CCD 文件名与 CN 不匹配 | openssl x509 -in cert.crt -noout -subject 确认 CN |
| IP 冲突 | 固定 IP 落在 DHCP 池内 | 用 ifconfig-pool 显式限定池范围,见 §2.4 |
TLS Error | 证书时间校验失败 | date 对比服务器与客户端系统时间,偏差须 < 5 分钟 |
TLS Error | 加密算法不匹配 | 检查客户端 data-ciphers 与服务端是否一致 |
| 证书模式下连接无响应 | 客户端未提供证书私钥 | 验证 .ovpn 中 <cert>/<key> 块完整无缺 |
Options error: --cipher not allowed | 旧客户端使用了不支持的算法 | 将客户端 cipher 改为 data-ciphers-fallback |
参考文献
- OpenVPN Community. How To: Client-specific configurations. https://community.openvpn.net/openvpn/wiki/HowTo#Client-specificconfigurations, 2025.
- OpenVPN Technologies. Access Server: Certificate Revocation. https://support.openvpn.com/, 2025.
- EasyRSA 3 Project. EasyRSA 3 Documentation. https://github.com/OpenVPN/easy-rsa/tree/master/doc, 2024.
- 研华科技. EdgeLink 中 OpenVPN 双证书认证设置说明. https://advdownload.advantech.com.cn/, 2025.
