Docker部署OpenVPN:企业级VPN服务搭建

为什么选择 OpenVPN?
本文聚焦 Docker 环境下的 OpenVPN 部署与日常运维。
特性 OpenVPN WireGuard 成熟度 20+ 年历史,久经考验 较新,生态还在完善 防火墙穿透 TCP 模式几乎 100% 穿透 UDP 可能被拦截 客户端支持 Windows/macOS/Linux/手机 同样支持 企业认可度 高,很多企业 IT 标配 新项目首选
一、快速部署
1. 目录结构
service/openvpn/
├── compose.yml # Docker Compose 配置
└── openvpn-data/ # OpenVPN 数据目录(自动生成)
├── server/ # 服务端配置
└── clients/ # 客户端配置文件2. Docker Compose 配置
services:
openvpn:
image: hwdsl2/openvpn-server:latest
container_name: openvpn
restart: always
ports:
# 改用 443 端口,避开防火墙对 1194 的限制
- "443:443/udp"
volumes:
- ./openvpn-data:/etc/openvpn
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
sysctls:
- net.ipv4.ip_forward=1
- net.ipv6.conf.all.forwarding=1为什么要改端口? 很多网络环境下默认封禁 UDP 1194 端口。用 443 端口可以绕过这个限制,连接成功率更高。
3. 启动服务
docker compose up -d首次启动会自动生成:
-
CA 证书
-
服务端证书
-
DH 参数
-
客户端配置文件
二、服务端配置
1. 修改端口
编辑 openvpn-data/server/server.conf:
# 与 compose.yml 保持一致
port 443
proto udp2. 路由配置
场景一:全局流量走 VPN
push "redirect-gateway def1 bypass-dhcp"场景二:只访问特定网段
# 注释掉全局路由
# push "redirect-gateway def1 bypass-dhcp"
# 只推送需要的路由
push "route 172.17.85.0 255.255.255.0"
push "route 172.17.0.0 255.255.255.0"3. DNS 配置
使用客户端本地 DNS:
# 注释掉 DNS 推送
# push "dhcp-option DNS 8.8.8.8"
# push "dhcp-option DNS 8.8.4.4"
# push "block-outside-dns"4. 重启生效
docker restart openvpn三、客户端配置
1. 获取配置文件
# 查看生成的客户端配置
cat openvpn-data/clients/client.ovpn将文件下载到本地,导入 OpenVPN 客户端即可使用。
2. 修改服务器地址
# 改为你的服务器 IP 和端口
remote 你的服务器IP 4433. Windows 客户端使用
-
下载安装 OpenVPN GUI
-
将
.ovpn文件放入C:\Program Files\OpenVPN\config\ -
右键托盘图标 → 连接
4. 连接测试
# 测试 VPN 内网可达性
ping 10.8.0.1
# 测试目标网段
ping 172.17.85.1四、证书管理
1. 生成新客户端证书
# 进入容器
docker exec -it openvpn bash
# 生成新客户端证书
cd /etc/openvpn/server
./easyrsa build-client-full 客户端名称 nopass
# 导出客户端配置
./easyrsa export-client 客户端名称
# 退出容器
exit新配置文件在 openvpn-data/clients/ 目录。
2. 查看证书状态
docker exec openvpn cat /etc/openvpn/server/pki/index.txt输出示例:
V 250101120000Z 241231120000Z 01 unknown /CN=server
V 250101120000Z 241231120000Z 02 unknown /CN=zhangsan
R 250101120000Z 241231120000Z 03 unknown /CN=lisi标记 含义 V Valid,有效 R Revoked,已吊销
3. 吊销客户端证书
用户离职或证书泄露时:
# 进入容器
docker exec -it openvpn bash
# 吊销证书
cd /etc/openvpn/server
./easyrsa revoke 客户端名称
# 输入 yes 确认
# 更新吊销列表
./easyrsa gen-crl
# 退出并重启
exit
docker restart openvpn被吊销的客户端连接时会收到 certificate revoked 错误。
4. 确保吊销生效
检查 server.conf 是否有:
crl-verify /etc/openvpn/server/crl.pem五、日常运维
查看连接状态
# 当前连接客户端
docker exec openvpn cat /var/log/openvpn/openvpn-status.log
# 实时日志
docker logs -f openvpn查看 OpenVPN 日志
docker exec openvpn cat /var/log/openvpn/openvpn.log备份数据
# 备份整个数据目录
tar -czvf openvpn-backup.tar.gz openvpn-data/建议定期备份,包含:
-
CA 证书
-
服务端证书
-
所有客户端证书
-
配置文件
六、常见问题
Q1: 连接超时
原因: 防火墙封禁 UDP 端口 解决:
-
确认云服务商安全组开放 443/UDP
-
或改用 TCP 模式:
proto tcpports:
- "443:443/tcp"Q2: 能连接但无法上网
原因: 没有配置路由或 NAT 解决:
# 检查 IP 转发
docker exec openvpn sysctl net.ipv4.ip_forward
# 应该返回 1
# 检查 NAT 规则(容器内)
docker exec openvpn iptables -t nat -L POSTROUTINGQ3: DNS 解析异常
原因: 服务端推送了错误的 DNS 解决: 注释掉 DNS 推送,使用本地 DNS
# push "dhcp-option DNS 8.8.8.8"
# push "block-outside-dns"Q4: 客户端时间不同步
原因: 证书有效期校验失败 解决: 同步客户端时间
# Linux
ntpdate pool.ntp.org
# Windows:设置 → 时间 → 同步七、安全建议
建议 说明 定期更新镜像 docker pull hwdsl2/openvpn-server:latest 保护配置文件 .ovpn 文件相当于钥匙,妥善保管 及时吊销证书 用户离职时立即吊销,不要拖延 定期备份 至少每周备份一次数据目录 监控日志 查看是否有异常连接尝试
总结
步骤 命令 启动服务 docker compose up -d 修改配置 编辑 server.conf 重启生效 docker restart openvpn 获取客户端配置 cat openvpn-data/clients/client.ovpn 吊销证书 ./easyrsa revoke 客户端名称
OpenVPN 虽然配置稍复杂,但胜在稳定可靠、企业认可度高。掌握这些运维技能,足以应对大多数生产场景。
相关文章
- 用群晖MailPlus搭建自己域名的邮件服务
- 让 NAS 自己写研究报告?这个 Docker 容器确实有点离谱
- 取代FTP和网盘!开源神器croc:内网无端口转发,高速加密传文件
- 天下苦罗技久已,开源罗技鼠标管理工具:替代 Logitech Options+
- KSpeeder:轻松搭建Docker镜像加速,新手也能快速掌握
- 把《GTA:罪恶都市》塞进 NAS,浏览器点开即玩
- Hermes Agent 记忆系统完全指南:从2200字符上限到 Mem0 无限记忆
- 中医AI技能库,把这位经方大师的六经辨证、伤寒论、金匮要略、本草经等全套教学内容蒸馏成结构化数据供AI调用
- 给“爱马仕”hermes plugins装个外挂缺啥能力就装啥
- 自建 NAS 书库:Docker 部署 SoNovel + 手机阅读传书全程
- Agent上网查资料,碰到反爬就哑火?一个开源Skill,把浏览器变成AI Agent的专业手臂
- 淘汰的旧手机别扔!无需Root,把它改造成24小时在线的Linux服务器——打造家庭影音库。