使用Docker与宝塔面板快速部署OpenVPN服务器指南
为了访问公司内部仅限特定IP地址访问的网站,部署一台VPN服务器作为固定出口是一个有效的解决方案。尽管网络上存在大量复杂的OpenVPN配置教程,但实际上借助Docker容器技术,部署最新版OpenVPN的过程可以变得非常简单快捷!
应用场景概述
- 需要固定出口IP以访问内部网络资源。
- 本地开发调试时,需接入设置了IP白名单的第三方接口。
- 实现远程且安全地访问公司内网的各类服务与资源。
部署环境准备与配置
在开始部署前,请确保您的服务器环境满足以下要求:
| 组件 | 版本/配置要求 |
|---|---|
| 操作系统 | Debian 12 |
| 管理面板 | 宝塔面板 V11.5 |
| Docker | 已完成安装(可使用加速地址:https://docker.1ms.run) |
| 网络端口 | 需在云服务器安全组及宝塔面板中放行 UDP 1194 端口 |

第一步:安装与配置OpenVPN服务
1.1 通过宝塔面板搜索并安装OpenVPN镜像
登录宝塔面板,进入“Docker”应用,在镜像仓库中搜索“openvpn”,选择由 kylemanna 维护的 openvpn 镜像进行拉取和容器创建。安装过程通常会自动生成初始配置。

1.2 优化客户端配置文件
安装完成后,在指定的数据卷路径中找到自动生成的 .ovpn 客户端配置文件。为了提高兼容性并避免某些连接问题,建议在配置文件中添加以下指令以禁用压缩:
comp-lzo no
此配置通常添加在 remote-cert-tls server 行的下方。

关键提示:配置文件修改并保存后,即可将其下载到本地,供OpenVPN客户端软件导入使用。
第二步:配置客户端并进行连接
2.1 在Windows系统上连接VPN
- 在本地计算机安装并运行 OpenVPN GUI 客户端。
- 找到系统托盘区的OpenVPN图标,右键点击。
- 选择菜单中的 【导入文件】 选项。
- 导入上一步下载的
.ovpn配置文件。 - 导入成功后,再次右键托盘图标,点击 【连接】。

2.2 验证连接状态
- 连接成功标志:系统托盘中的OpenVPN图标变为绿色,并且通常会显示已分配的虚拟IP地址。
- 连接失败排查:如果无法连接,请按顺序检查以下设置:
- 云服务提供商的安全组规则是否允许入站
UDP 1194端口。 - 宝塔面板的“安全”页面中是否已放行
1194端口。
- 云服务提供商的安全组规则是否允许入站

成功连接后的客户端界面示例如下:

第三步(可选):批量创建VPN用户账号
默认安装完成后已创建一个用户。若需为团队其他成员创建独立账号,可以使用以下脚本进行批量操作。
3.1 确认容器与数据卷信息
首先,需要从宝塔面板的Docker管理界面,确认两个关键参数的实际值,后续脚本将用到它们:
- OVPN_DATA: Docker数据卷在主机上的挂载路径。
- OVPN_CONTAINER: 运行的OpenVPN容器名称或ID。

3.2 执行批量用户创建脚本
以下 create_users.sh 脚本可为列表中的每个用户生成独立的证书和配置文件。请务必将 OVPN_DATA 变量的值替换为您在3.1步骤中查到的实际路径。
#!/bin/bash
# create_users.sh - 批量生成OpenVPN用户配置文件
OVPN_DATA="/www/dk_project/dk_app/openvpn/openvpn_7emH/openvpn"
USERS="test1 test2"
for USER in $USERS; do
echo "正在创建用户: $USER"
# 在容器内生成客户端证书(无密码)
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full $USER nopass
# 导出该用户的配置文件
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient $USER > ${USER}.ovpn
echo "用户 $USER 配置文件已生成: ${USER}.ovpn"
echo "注意:每个生成的.ovpn文件仍需手动在‘remote-cert-tls server’行下添加‘comp-lzo no’"
done
3.3 分发与使用配置文件
脚本运行后,会在当前目录生成各个用户对应的 .ovpn 文件。请参照第一步中的说明,在每个文件内添加 comp-lzo no 行,然后将配置文件安全地分发给相应用户。

进阶功能:OpenVPN用户综合管理脚本
为了更方便地管理用户和查看服务状态,可以使用以下集成化脚本 manage_openvpn.sh。
#!/bin/bash
# OpenVPN 用户管理脚本
OVPN_DATA="/www/dk_project/dk_app/openvpn/openvpn_7emH/openvpn"
OVPN_CONTAINER="q18qinzdjnximb"
case "$1" in
list)
echo "已创建的用户列表:"
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_listclients
;;
add)
if [ -z "$2" ]; then
echo "使用方法: $0 add 用户名 [密码]"
exit 1
fi
USER="$2"
if [ -n "$3" ]; then
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full "$USER"
else
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full "$USER" nopass
fi
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient "$USER" > "${USER}.ovpn"
echo "用户 $USER 已创建,配置文件: ${USER}.ovpn"
;;
revoke)
if [ -z "$2" ]; then
echo "使用方法: $0 revoke 用户名"
exit 1
fi
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_revokeclient "$2" remove
echo "用户 $2 的访问权限已被撤销"
;;
status)
echo "当前在线用户:"
docker exec $OVPN_CONTAINER cat /tmp/openvpn-status.log 2>/dev/null || echo "状态日志文件不存在"
;;
logs)
docker logs -f $OVPN_CONTAINER
;;
restart)
docker restart $OVPN_CONTAINER
;;
*)
echo "使用方法: $0 {list|add|revoke|status|logs|restart}"
echo " list - 列出所有已创建用户"
echo " add - 添加一个新用户"
echo " revoke - 撤销指定用户的访问权限"
echo " status - 查看服务端当前连接状态"
echo " logs - 实时查看OpenVPN服务日志"
echo " restart - 重启OpenVPN容器服务"
;;
esac
脚本常用命令参考
| 命令 | 功能描述 |
|---|---|
sh manage_openvpn.sh list |
列出所有已创建的用户证书 |
sh manage_openvpn.sh add testuser |
添加一个名为testuser的新用户(无密码) |
sh manage_openvpn.sh revoke testuser |
撤销用户testuser的证书,使其无法连接 |
sh manage_openvpn.sh status |
查看当前有哪些用户在线(可能有延迟) |
sh manage_openvpn.sh logs |
持续输出OpenVPN服务端的运行日志 |
sh manage_openvpn.sh restart |
重启OpenVPN容器,应用配置更改 |
使用须知:
- 执行前,请将脚本开头的
OVPN_DATA和OVPN_CONTAINER变量值替换为您环境的实际值。- 通过
add命令创建的用户,其.ovpn配置文件同样需要手动添加comp-lzo no配置行。status命令显示的状态信息并非实时,存在一定延迟。

常见问题与故障排除
Q: 客户端始终无法连接,应该如何排查?
A: 请按照以下步骤顺序进行检查:
- 网络层面:确认您云服务器提供商(如阿里云、腾讯云)的安全组/防火墙规则已允许
UDP 1194端口的入站流量。 - 主机层面:检查宝塔面板“安全”页面,确保系统防火墙已放行
1194端口。 - 配置层面:核对客户端使用的
.ovpn配置文件中是否已正确添加comp-lzo no指令。
Q: 一个用户证书可以在多台设备上同时使用吗?
A: 从技术上讲,同一个证书可以被导入到多台设备并同时建立连接。然而,出于安全性和审计考虑,强烈建议为每位用户或每台设备颁发独立的证书。这样便于管理,当设备丢失或员工离职时,可以单独撤销其证书而不会影响其他用户。