OpenVPN 服务端部署指南
OpenVPN 服务端部署指南

OpenVPN 服务端部署指南

OpenVPN 服务端部署指南

文档定位:本文档为服务端部署与运维篇,覆盖从环境准备到服务上线的完整流程。客户端认证方案(用户名/密码 vs 证书)请参阅认证与固定 IP 方案;工业网关设备端配置请参阅工业网关私有化方案。

本文档基于 Alibaba Cloud Linux 3 环境验证,兼容 CentOS 7/8、RHEL 8/9、Rocky Linux 9。采用用户名/密码认证模式作为基准部署路径。

⚠️ 关于配置文件格式:OpenVPN 使用其原生的指令式配置格式(.conf / .ovpn),此格式由 OpenVPN man page(openvpn.8)明确规定,2.7.x 及更早版本均无变更计划。请勿将其与 frp(.toml)等其他工具的配置格式混淆

⚠️ 加密算法说明:新部署已默认使用 data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305。仅当需兼容不支持 AEAD 的旧嵌入式设备时,才通过 data-ciphers-fallback BF-CBC 保留回退(见 §3.3 安全加固)。


一、环境准备

1.1 资源要求

资源最低配置推荐配置(50 设备)
CPU1 核2 核
内存1 GB2 GB
带宽1 Mbps5 Mbps
磁盘20 GB40 GB(日志保留)

1.2 端口放行

登录云控制台 → 安全组 → 添加入方向规则:TCP 1194,来源 0.0.0.0/0。若后续改为 TCP 443 或其他端口,替换对应数字。

1.3 国内网络环境优化

OpenVPN 与 EasyRSA 的软件包和源码托管在境外,国内服务器需预先配置镜像加速以提高安装速度与成功率。

1.3.1 替换 Yum/DNF 源为阿里云镜像

1.3.2 替换 EPEL 源为阿里云镜像

1.3.3 OpenVPN 源码与 Release 加速下载

方式URL / 命令
阿里云镜像站 Release 下载https://mirrors.aliyun.com/openvpn/latest/
GitHub 加速克隆(kkgithub)git clone https://kkgithub.com/OpenVPN/openvpn.git
GitHub 加速克隆(bgithub)git clone https://bgithub.xyz/OpenVPN/openvpn.git
单文件/Release 下载加速wget https://gh-proxy.com/https://github.com/.../openvpn-2.6.12.tar.gz
Git 全局代理(替代 GitHub 域名)git config --global url."https://kkgithub.com/".insteadOf "https://github.com/"

注意:国内镜像站点可能随时变更,如上述地址不可用,可在 清华 TUNA 镜像站中科大 USTC 镜像站 搜索 OpenVPN 相关资源。


二、安装与 PKI 初始化

2.1 安装软件

2.2 初始化 PKI

2.3 检查文件路径与权限

⚠️ 私钥文件(.key)必须设为 600,证书文件(.crt)设为 644。不要对私钥使用 644——这会导致安全审计不通过。


三、服务端配置

3.1 server.conf

创建 /etc/openvpn/server/server.conf

3.2 配置项速查

指令作用注意事项
server 10.8.0.0 255.255.255.0VPN 子网,服务端占 .1避免与本地局域网冲突
data-ciphersNCP 协商加密算法列表(按优先级排列)OpenVPN 2.5+ 替代 ncp-ciphers;2.6+ 默认含 CHACHA20
data-ciphers-fallback旧客户端(无 NCP)的回退算法OpenVPN 2.5+ 替代 cipher;仅对 2.3 及更早的旧客户端生效
compress lzoLZO 压缩(替代旧指令 comp-lzo公网环境建议完全禁用(VORACLE 攻击);专网可保留
push "redirect-gateway def1 bypass-dhcp"强制所有客户端流量经 VPN增加带宽消耗,按需启用
keepalive 10 120心跳检测,120s 无响应判死防火墙 NAT 超时应大于此值
user nobody / group nobody降权运行Ubuntu/Debian 需改为 nogroup
duplicate-cn多客户端共用一个 CN 标识多设备场景必须启用
client-config-dir按客户端分配固定 IP目录须存在且文件名严格匹配 CN
verb 3日志级别生产推荐 3,调试阶段可用 6

3.3 安全加固

3.3.1 切换到证书认证

server.conf移除或行首加 #(不要使用行内注释——OpenVPN 不完全支持 # 在行中):

3.3.2 升级加密强度

新部署标准配置(兼容现代客户端与旧嵌入式设备):

3.3.3 压缩安全警告(VORACLE)

VPN 压缩存在 VORACLE 攻击风险(CVE-2018-7544):攻击者通过观察密文大小变化推断明文内容(类似 HTTPS 的 CRIME/BREACH 攻击)。

场景推荐配置理由
生产环境 / Internet 暴露禁用压缩(删除 compress lzo消除 VORACLE 风险
工业 IoT 专网 / 带宽受限compress lzo(评估风险后保留)受控网络,但需同步禁用 HTTP 压缩

四、认证脚本

4.1 单用户硬编码(via-env 模式)

⚠️ heredocEOF 结束标记必须独占一行且行首无空格。缺少 EOF 将导致脚本语法错误。

4.2 多用户凭据文件(via-file 模式)

via-file 模式更安全——凭据写入临时文件而非通过 /proc 暴露。

步骤 1:创建凭据文件

步骤 2:修改 server.conf 中的认证指令

步骤 3:创建 via-file 认证脚本


五、网络与防火墙

验证:


六、启停与日志

实时日志:

常见启动失败速查

日志关键词原因解决
Cannot open CA file证书路径错误核对 ca 指令的绝对路径
Permission denied证书文件权限chmod 644 *.crt; chmod 600 *.key
Address already in use端口占用ss -tlnp | grep 1194
script-security认证脚本无法执行chmod +x check-password.sh
Options error: unauthorized option缺少 script-security 3检查 server.conf 中该指令是否存在

七、导出客户端所需文件

将完整输出(含 -----BEGIN CERTIFICATE----------END CERTIFICATE-----)保存为 ca.crt。若启用了 tls-crypt,还需导出 tls-crypt.key


八、部署验证清单

  • systemctl status openvpn-server@serveractive (running)(持续 > 5min 无异常退出)
  • firewall-cmd --list-ports1194/tcp
  • firewall-cmd --query-masqueradeyes
  • sysctl net.ipv4.ip_forward1
  • 云控制台安全组已放行对应端口
  • CA 证书已导出供客户端使用
  • (生产环境)已启用 tls-crypttls-version-min 1.2

下一步:服务端就绪后,转至客户端认证与固定 IP 方案配置认证方式与静态 IP,或工业网关私有化方案完成设备端联调。


参考文献