如何在Docker环境下安装OpenVPN,快速搭建安全的VPN服务【2025年最新】

在 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)从服务器下载到你的本地电脑、手机等设备。你可以使用 scpFileZilla、WinSCP 等工具。 例如,在你的本地电脑终端运行 (假设服务器用户是 root,IP 是 YOUR_SERVER_PUBLIC_IP):

7.2 导入配置文件

OpenVPN↗️的官网下载客户端

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

确认好信息后,点击 CONNECT

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

Views: 28

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注