系统: 担心您在访问互联网时受到许多限制和数据不安全的困扰吗?不用担心!通过Docker在OpenVPN中搭建您自己的VPN服务器吧。
借助Docker和OpenVPN技术,您可以在短时间内设置和运行您的VPN服务器。在本教程中,您将学到在Docker容器中托管OpenVPN服务器的基本原理。
请继续关注,使用OpenVPN Docker保护您的VPN服务器!
先决条件
本教程将进行实际演示。如果您跟着做,您将需要以下内容:
- A Linux-based operating system (OS) – This tutorial uses Ubuntu v22.04, but other Linux distributions will work.
- 已安装并运行Docker – 本教程使用Docker v20.10.17。
- 已在Android设备上安装了OpenVPN Connect应用程序 – 本教程使用Android v11和OpenVPN Connect v3.2.7。
为OpenVPN创建Docker容器
系统: 容器化就像将代码和所有依赖项封装为标准软件单元,以便快速而可靠地运行应用程序。有几种创建 OpenVPN Docker 容器的方法。您可以从头开始构建容器,也可以从 Docker Hub 拉取现成的容器。
但在本教程中,您将使用现有的 OpenVPN Docker 镜像文件。现成的容器具有多重优势,因为它们经过充分测试,针对各种漏洞进行了验证,并得到了庞大的开发者社区的支持。此外,这些容器可以帮助您节省时间,消除重新发明轮子的需要。
要创建一个 OpenVPN Docker 容器:
1. 打开终端并运行下面的 OVPN_DATA 命令,该命令不提供输出,但将数据卷名称设置为 ovpn-data-test,并将其赋给 OVPN_DATA 变量。
2. 接下来,运行以下 docker volume create 命令,以创建一个数据卷,其名称与 $OVPN_DATA 变量中设置的名称相同。
此命令不提供输出,但创建了一个用于存储 OpenVPN 所有数据、配置文件和证书的数据卷容器。
3. 最后,运行以下 docker run 命令来下载并安装 OpenVPN Docker 镜像,具体命令如下:
- 指定容器内与容器文件系统其他部分分开的存储空间(`-v`)。在本例中,OpenVPN Docker镜像存储在`/etc/openvpn`目录中。
- 指定保留运行容器和服务信息的日志记录机制(`–log-driver`)(`none`)。
- 指示Docker在容器已存在时自动删除(`–rm`)该容器。
请确保通过UDP协议使用服务器的(主机)公共IP或域名(如果有)。但请注意,您也可以使用TCP协议。
TCP是一种面向连接的协议,而UDP是一种无连接的协议

请注意,如果您打算使用自托管或公共IP,则必须在路由器/调制解调器上进行端口转发。
使用证书保护OpenVPN客户端
您已成功在您的计算机上安装了OpenVPN Docker客户端,太棒了!但在使用OpenVPN之前,您必须先设置OpenVPN客户端的配置。
仅仅因为您正在使用OpenVPN并不意味着您必须将您的VPN服务器对外开放。您需要证书来保护您的OpenVPN客户端:
1. 运行以下docker run命令以生成并检索CA和客户端证书。此命令从主容器内指定的镜像创建正在运行的OpenVPN容器(-it)。
在大多数情况下,生成CA服务器证书需要一些时间,具体取决于您使用的计算机资源。
像下面显示的那样,键入yes,然后按Enter以启动OpenVPNPKI系统。

2. 接下来,请提供并确认新的CA证书密码,然后按Enter键。请将密码存放在安全的地方,因为在设置和生成客户端证书时您会需要它。

3. 为您的CA证书设置一个唯一的名称,然后按Enter键。

4. 现在,请输入您在第二步设置的CA密码以检查请求是否与签名匹配。

5. 再次输入您的密码以生成私钥。

6. 接下来,运行以下命令在Docker上启动OpenVPN服务器服务以设置OpenVPN客户端,其中:
- -p选项设置端口(1194),该端口在服务器和客户端之间进行连接和初始化。
如果您不习惯使用默认的OpenVPN端口,则可以将端口1194更改为符合您偏好的端口。
- –cap-add=NET_ADMIN参数通过修改Docker默认不授予的网络接口来应用额外的Linux功能。

7. 端口设置完成后,运行以下docker run
命令执行以下操作:
- 生成客户端证书并从Docker容器下载客户端配置文件(.ovpn)到主机服务器。生成的证书无需密码,如命令中的no-pass参数所指定。
- 将OpenVPN证书和客户端标识的文件名设置为CLIENTAPP。证书存储在主机的用户目录中,而不是Docker容器中。
按照下面显示的方式输入您的密码,以完成证书的生成。

8. 接下来,运行下面的命令,从容器中生成并下载OpenVPN连接(ovpn_getclient)配置文件到主机服务器。
9. 导航到您主机服务器(Linux机器)的user/home目录,并将.ovpn文件(CLIENTAPP.ovpn)传输到您的Android设备。
10. 最后,在您的Android设备上启动OpenVPN Connect客户端应用程序。
在FILE选项卡下点击BROWSE,并选择您传输到Android设备上的.ovpn文件(CLIENTAPP.ovpn)。这样做会将新的配置文件添加到OpenVPN Connect客户端中。

连接成功后,您将看到下面的结果。

访问OpenVPN Web UI
您是否担心您必须执行的命令数量以访问您的VPN服务器?为什么不尝试一个简单的基于Web的用户界面呢?
OpenVPN提供了一个基于web的安装和配置工具集,可以快速部署VPN远程访问解决方案。这个工具包以一个名为OpenVPN访问服务器的单一包的形式提供。
要访问OpenVPN web UI,您必须安装该软件包:
1. 运行以下docker pull命令,从Linux服务器Docker Hub(linuxserver)下载并安装最新的OpenVPN Docker容器(openvpn-as)。

2. 下载完成后,运行下面的docker create命令创建一个名为openvpn-as的新Docker容器,并包括以下内容:
-v /home/docker/openvpn-as/config:/config
– 设置用于存储配置文件的目录。
--restart=always
– 确保容器在系统启动时始终启动。如果不希望容器重新启动,可以选择不添加此参数。
-e PGID=1001 -e PUID=1001
– 设置用户ID以消除主机服务器和容器之间的权限问题。
-e TZ=Africa/Nairobi
– 指定时区信息。
- –net=host –privileged – 指定OpenVPN访问服务器在容器中运行的方式。

3. 接下来,运行以下docker start命令,通过在第二步创建的OpenVPN Access Server Docker容器访问OpenVPN Web界面。

4. 最后,打开您喜爱的Web浏览器,并使用本地IP地址导航到OpenVPN Web界面(例如,https://YourIP:943/admin)。将YourIP替换为您实际服务器的IP地址。
如果一切顺利,您将看到OpenVPN Access Server的登录页面,如下所示。
输入管理员和密码作为用户名和密码,然后单击登录以访问OpenVPN Access Server仪表板。
请注意,默认用户名和密码分别为admin和password。您可以根据您的喜好更改凭据。

登录后,您将看到下面的OpenVPN Access Server仪表板。

配置DNS以实现更快和安全的连接
此时,您的OpenVPN Access Server已经正确运行。但为了提高VPN服务器的性能,您必须配置DNS。
要配置DNS,您必须访问OpenVPN服务器Web界面,并使用Google或您喜欢的DNS地址更新DNS设置。Google提供了最快的可用DNS服务器,您将在OpenVPN Access Server中使用它。
1. 在OpenVPN Access Server仪表板的CONFIGURATION选项卡下,点击VPN设置(左侧面板)。
向下滚动到 DNS 设置部分,并启用“客户端使用特定 DNS 服务器”选项,如下所示。

2. 接下来,使用以下谷歌 DNS 地址更新主要 (8.8.8.8) 和次要 DNS 服务器 (8.8.8.4),然后单击“保存设置”以保存更改。

3. 保存更改后,单击“更新运行服务器”以重新启动服务器,使更改生效。

4. 现在,转到您的 Linux 机器上的 OpenVPN 访问服务器(例如,https://YourIP:943/admin)。将 YourIP 替换为您服务器的 IP 地址。如果配置正确,您将看到如下所示的相同页面。
使用默认凭据(用户名和密码均为 admin)登录。

5. 单击任何平台图标以下载客户端应用程序,并单击“Yourself(用户锁定配置文件)”以下载客户端 .ovpn 文件。

6. 最后,启动您下载的 OpenVPN 客户端,并像在“使用证书保护 OpenVPN 客户端”最后一步中那样导入 .ovpn 文件,如下所示。

结论
托管您的 VPN 服务器从来都不应该是一项复杂的任务,更不用说保护服务器连接了。幸运的是,OpenVPN Docker 就在附近挺身而出。在本教程中,您已经学会了如何在 Ubuntu 中使用 Docker 安装、设置和配置 OpenVPN。您还涉及了如何使用 OpenVPN CA 和客户端证书在 Docker 容器中保护对 OpenVPN 的访问。
除了通过命令行界面访问您的 OpenVPN 服务器之外,您现在还可以通过 OpenVPN Access Server Web UI 进行可视化访问。通过为 OpenVPN 客户端应用程序生成客户端配置文件,您已经实现了快速 VPN 部署。
为什么不利用这些新发现的知识,为您的应用程序创建使用 WireGuard VPN 的 VPN 隧道服务呢?通过自托管的 VPN 服务,探索无限可能的世界吧!