在 Docker 环境中部署 OpenVPN 也是一个非常流行且方便的选择。这样做的好处是环境隔离、易于管理和迁移。我们将使用一个广受欢迎的 Docker 镜像 kylemanna/openvpn
,它极大地简化了 OpenVPN 服务器的搭建和管理过程。
1. 安装 Docker (如果安装了,跳到第2步)
如果你的服务器上还没有安装 Docker,请先安装:
sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker
将当前用户添加到 docker 组,以避免每次都使用 sudo
(需要重新登录或新开一个 shell 生效):
sudo usermod -aG docker ${USER} # newgrp docker # 或者重新登录
Docker Compose (可选,但对于管理多个相关容器很方便):
sudo apt install -y docker-compose-v2 # 对于较新版本的 Docker Compose # 或者 # sudo apt install -y docker-compose # 对于旧版本
服务器公网 IP 或域名: 你需要知道你的服务器的公网 IP 地址,或者你为其配置的域名。
2. 创建数据存储卷
OpenVPN 的配置和证书需要持久化存储,即使容器停止或删除,这些数据也应该保留。我们将创建一个 Docker 卷或一个宿主机目录来存储这些数据。
推荐使用宿主机目录,方便直接访问和备份。
sudo mkdir -p /opt/docker-openvpn-data
我们将把这个目录 (
) 挂载到容器的 /opt/docker-openvpn-data
/etc/openvpn
目录。
3. 初始化 OpenVPN 配置和 PKI (公钥基础设施)
3.1 生成服务器配置文件 (ovpn_genconfig
):
运行以下命令,将 YOUR_SERVER_PUBLIC_IP
替换为你的 Vultr 服务器的公网 IP 地址或域名。
docker run -v /opt/docker-openvpn-data:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://YOUR_SERVER_PUBLIC_IP
ℹ️ 将YOUR_SERVER_PUBLIC_IP 换为自己服务器的公网IP
-v /opt/docker-openvpn-data:/etc/openvpn
: 将宿主机的/opt/docker-openvpn-data
目录挂载到容器内的/etc/openvpn
。--rm
: 容器执行完毕后自动删除。kylemanna/openvpn
: 使用的 Docker 镜像。ovpn_genconfig
: 镜像内用于生成配置的命令。-u udp://YOUR_SERVER_PUBLIC_IP
: 指定 OpenVPN 服务器监听的协议和地址。UDP 是推荐的协议。如果你想使用 TCP,可以改成tcp://YOUR_SERVER_PUBLIC_IP
。默认端口是 1194。如果你想用其他端口,例如 443 (TCP),可以写成tcp://YOUR_SERVER_PUBLIC_IP:443
。
3.2 初始化 PKI 并生成证书 (ovpn_initpki
)
docker run -v /opt/docker-openvpn-data:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
ℹ️ 输入并记住 CA 密码: 系统会提示你输入 “Enter New CA Key Passphrase“。这个密码非常重要,用于签署新的客户端证书。请务必设置一个强密码并妥善保管。
ℹ️ 输入 Common Name: 之后会提示 “Common Name (eg: yourhost.example.com) []:”,这里直接按 Enter 使用默认值即可。
4. 启动 OpenVPN 服务器容器
现在配置和证书已经生成,我们可以启动 OpenVPN 服务器容器了。
docker run -d \ -v /opt/docker-openvpn-data:/etc/openvpn \ -p 1194:1194/udp \ --cap-add=NET_ADMIN \ --name my-openvpn-server \ --restart=always \ kylemanna/openvpn
参数解释:
-d
: 后台运行容器 (detached mode)。-v /opt/docker-openvpn-data:/etc/openvpn
: 挂载数据卷。-p 1194:1194/udp
: 将宿主机的 UDP 1194 端口映射到容器的 UDP 1194 端口。如果你在ovpn_genconfig
中使用了不同的端口或协议,这里也要相应修改。--cap-add=NET_ADMIN
: 授予容器修改网络接口的权限,OpenVPN 需要这个权限来创建 TUN/TAP 设备和配置路由。--name my-openvpn-server
: 给容器起一个方便管理的名字。--restart=always
: 当 Docker 服务重启或容器意外退出时,自动重启该容器。kylemanna/openvpn
: 使用的 Docker 镜像。
可以使用 docker ps
查看容器是否正在运行,使用 docker logs my-openvpn-server
查看日志。

5. 生成客户端配置文件 (.ovpn)
为每个需要连接 VPN 的设备生成一个客户端配置文件。
5.1 生成客户端证书 (无密码保护的 .ovpn 文件):
将 CLIENTNAME
替换为你想要的客户端名称,例如 myphone
或 laptop1
。
docker run -v /opt/docker-openvpn-data:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
nopass
: 表示生成的客户端密钥不需要密码。这使得连接更方便。- 执行此命令时,会要求你输入之前设置的 CA 密码。
5.2 生成带密码保护的客户端证书 (可选):
如果希望客户端配置文件本身也受密码保护(连接时需要输入此密码,而不是 CA 密码),去掉 nopass
:
docker run -v /opt/docker-openvpn-data:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME_WITH_PASS
这会要求你输入客户端密钥的密码。
5.3 导出客户端配置文件 (.ovpn):
docker run -v /opt/docker-openvpn-data:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > ~/CLIENTNAME.ovpn
- 这会将名为
CLIENTNAME
的客户端配置输出到你当前用户的家目录下的CLIENTNAME.ovpn
文件中。 - 如果你生成的是带密码的客户端,请使用对应的
CLIENTNAME_WITH_PASS
。
ℹ️ 此处需将CLIENTNAME 替换成自定义的名称
6. 配置防火墙(ℹ️重要)
即使 Docker 会处理容器的端口映射,你的宿主机防火墙 (如 UFW) 和 Vultr 的云防火墙仍然需要允许 OpenVPN 流量进入。
UFW (宿主机防火墙): 确保你在步骤 3 中映射的端口和协议是允许的。如果使用默认的 1194/UDP:
sudo ufw allow 1194/udp sudo ufw reload
7. 在客户端使用配置文件
7.1 下载生成的.ovpn文件
将生成的 .ovpn
文件(例如 ~/CLIENTNAME.ovpn
)从服务器下载到你的本地电脑、手机等设备。你可以使用 scp
、FileZilla、WinSCP 等工具。 例如,在你的本地电脑终端运行 (假设服务器用户是 root
,IP 是 YOUR_SERVER_PUBLIC_IP
):

7.2 导入配置文件
在OpenVPN↗️的官网下载客户端

下载完成后点击UPLOAD FILE >> 选择刚才下载的 .ovpn 文件

确认好信息后,点击 CONNECT

当出现这个画面时说明已经连接成功了
Views: 28