返回首页
剪藏#剪藏#程序员暮狐

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

2026 年 7 月 29 日1 分钟

为什么选择 OpenVPN?

本文聚焦 Docker 环境下的 OpenVPN 部署与日常运维。

特性 OpenVPN WireGuard 成熟度 20+ 年历史,久经考验 较新,生态还在完善 防火墙穿透 TCP 模式几乎 100% 穿透 UDP 可能被拦截 客户端支持 Windows/macOS/Linux/手机 同样支持 企业认可度 高,很多企业 IT 标配 新项目首选

一、快速部署

1. 目录结构

JAVASCRIPT
service/openvpn/
├── compose.yml          # Docker Compose 配置
└── openvpn-data/        # OpenVPN 数据目录(自动生成)
    ├── server/          # 服务端配置
    └── clients/         # 客户端配置文件

2. Docker Compose 配置

JAVASCRIPT
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. 启动服务

JAVASCRIPT
docker compose up -d

首次启动会自动生成:

  • CA 证书

  • 服务端证书

  • DH 参数

  • 客户端配置文件

二、服务端配置

1. 修改端口

编辑 openvpn-data/server/server.conf

JAVASCRIPT
# 与 compose.yml 保持一致
port 443
proto udp

2. 路由配置

场景一:全局流量走 VPN

JAVASCRIPT
push "redirect-gateway def1 bypass-dhcp"

场景二:只访问特定网段

JAVASCRIPT
# 注释掉全局路由
# 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:

JAVASCRIPT
# 注释掉 DNS 推送
# push "dhcp-option DNS 8.8.8.8"
# push "dhcp-option DNS 8.8.4.4"
# push "block-outside-dns"

4. 重启生效

JAVASCRIPT
docker restart openvpn

三、客户端配置

1. 获取配置文件

JAVASCRIPT
# 查看生成的客户端配置
cat openvpn-data/clients/client.ovpn

将文件下载到本地,导入 OpenVPN 客户端即可使用。

2. 修改服务器地址

JAVASCRIPT
# 改为你的服务器 IP 和端口
remote 你的服务器IP 443

3. Windows 客户端使用

  1. 下载安装 OpenVPN GUI

  2. .ovpn 文件放入 C:\Program Files\OpenVPN\config\

  3. 右键托盘图标 → 连接

4. 连接测试

JAVASCRIPT
# 测试 VPN 内网可达性
ping 10.8.0.1

# 测试目标网段
ping 172.17.85.1

四、证书管理

1. 生成新客户端证书

JAVASCRIPT
# 进入容器
docker exec -it openvpn bash

# 生成新客户端证书
cd /etc/openvpn/server
./easyrsa build-client-full 客户端名称 nopass

# 导出客户端配置
./easyrsa export-client 客户端名称

# 退出容器
exit

新配置文件在 openvpn-data/clients/ 目录。

2. 查看证书状态

JAVASCRIPT
docker exec openvpn cat /etc/openvpn/server/pki/index.txt

输出示例:

JAVASCRIPT
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. 吊销客户端证书

用户离职或证书泄露时:

JAVASCRIPT
# 进入容器
docker exec -it openvpn bash

# 吊销证书
cd /etc/openvpn/server
./easyrsa revoke 客户端名称
# 输入 yes 确认

# 更新吊销列表
./easyrsa gen-crl

# 退出并重启
exit
docker restart openvpn

被吊销的客户端连接时会收到 certificate revoked 错误。

4. 确保吊销生效

检查 server.conf 是否有:

JAVASCRIPT
crl-verify /etc/openvpn/server/crl.pem

五、日常运维

查看连接状态

JAVASCRIPT
# 当前连接客户端
docker exec openvpn cat /var/log/openvpn/openvpn-status.log

# 实时日志
docker logs -f openvpn

查看 OpenVPN 日志

JAVASCRIPT
docker exec openvpn cat /var/log/openvpn/openvpn.log

备份数据

JAVASCRIPT
# 备份整个数据目录
tar -czvf openvpn-backup.tar.gz openvpn-data/

建议定期备份,包含:

  • CA 证书

  • 服务端证书

  • 所有客户端证书

  • 配置文件

六、常见问题

Q1: 连接超时

原因: 防火墙封禁 UDP 端口 解决:

  1. 确认云服务商安全组开放 443/UDP

  2. 或改用 TCP 模式:

JAVASCRIPT
proto tcp
JAVASCRIPT
ports:
    - "443:443/tcp"

Q2: 能连接但无法上网

原因: 没有配置路由或 NAT 解决:

JAVASCRIPT
# 检查 IP 转发
docker exec openvpn sysctl net.ipv4.ip_forward
# 应该返回 1
# 检查 NAT 规则(容器内)
docker exec openvpn iptables -t nat -L POSTROUTING

Q3: DNS 解析异常

原因: 服务端推送了错误的 DNS 解决: 注释掉 DNS 推送,使用本地 DNS

JAVASCRIPT
# push "dhcp-option DNS 8.8.8.8"
# push "block-outside-dns"

Q4: 客户端时间不同步

原因: 证书有效期校验失败 解决: 同步客户端时间

JAVASCRIPT
# 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 虽然配置稍复杂,但胜在稳定可靠、企业认可度高。掌握这些运维技能,足以应对大多数生产场景。

原文地址: https://mp.weixin.qq.com/s?__biz=Mzg2NzYzOTU5Mg==&mid=2247483919&idx=1&sn=e2e6492e3864a011bd8302b8f10a311e&chksm=cf7ca57f90d3e9024727c0b3d0e4f01ec1bbb99e45628851a8b889412225bf9ff79166a8a10b&mpshare=1&scene=1&srcid=0729L3PyjrfexGqF7ZLmLJbR&sharer_shareinfo=9e09341d56c429e3f9e4e79e7750f6fd&sharer_shareinfo_first=9e09341d56c429e3f9e4e79e7750f6fd#rd

分享Twitter / XTelegram微博

相关文章