在Ubuntu上運行OpenVPN的基礎

您是否担心在没有太多限制和数据不安全的情况下如何自由访问互联网?不用担心!使用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。

创建OpenVPN的Docker容器

容器化就像是将代码及其所有依赖项打包成一个标准的软件单元,以便快速可靠地运行应用程序。创建 OpenVPN Docker 容器有几种方法。您可以从头开始构建容器,也可以从 Docker Hub 中拉取一个现成的容器。

但在本教程中,您将使用一个现有的 OpenVPN Docker 镜像文件。现成的容器具有多个优点,它们经过了充分的测试,防范了各种漏洞,并得到了庞大的开发者社区的支持。此外,这些容器还可以帮助您节省时间,无需重复发明轮子。

创建 OpenVPN Docker 容器的步骤如下:

1. 打开终端并运行以下 OVPN_DATA 命令,该命令不会输出任何内容,但会将数据卷名称设置为 ovpn-data-test,并将其赋值给 OVPN_DATA 变量。

OVPN_DATA="ovpn-data-test"

2. 接下来,运行以下 docker volume create 命令来创建一个数据卷,该数据卷的名称与您在 $OVPN_DATA 变量中设置的名称相同。

此命令不会输出任何内容,但会创建一个用于存储 OpenVPN 的数据、配置文件和证书的数据卷容器。

docker volume create --name $OVPN_DATA

3. 最后,运行以下 docker run 命令来下载并安装 OpenVPN Docker 镜像,命令如下:

  • 指定與容器的其餘文件系統分開的容器內部儲存空間(-v)。在這種情況下,OpenVPN Docker映像存儲在/etc/openvpn目錄中。
  • 指定保留運行容器和服務信息的日誌記錄機制(–log-driver)(none)。
  • 指示Docker在容器已經存在時自動刪除(-rm)容器。

請務必使用UDP協議將(YourPublicIP.com)替換為您的服務器(主機)的公共IP或域名(如果有)。但請注意,您也可以使用TCP協議。

TCP是一種面向連接的協議,而UDP是一種無連接的協議

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com
Installing OpenVPN on Docker container

請注意,如果您打算使用自主託管或公共IP,您必須在路由器/調制解調器上進行端口轉發。

使用證書保護OpenVPN客戶端

您已成功在計算機上安裝了OpenVPN Docker客戶端,太棒了!但在使用OpenVPN之前,您必須先設置OpenVPN客戶端的配置。

僅僅因為您正在使用OpenVPN,並不意味著您必須將您的VPN服務器開放給全世界。您需要證書來保護您的OpenVPN客戶端:

1. 執行以下的 docker run 命令以生成並檢索 CA 和客戶端證書。此命令將從主容器內指定的映像中創建運行中的 OpenVPN 容器 (–it)。

在大多數情況下,生成 CA 服務器證書需要時間,取決於您所使用的機器資源。

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

輸入 yes,然後按 Enter,如下所示,以啟動 OpenVPN PKI 系統。

Initiating the OpenVPN PKI system

2. 接下來,提供並確認新的 CA 證書密碼,然後按 Enter。請將密碼妥善保存,因為您在設置和生成客戶端證書時需要使用它。

Setting a new CA certificate password

3. 為您的 CA 證書設置一個獨特的名稱,然後按 Enter。

Naming the new CA certificate

4. 現在,輸入您在第二步中設置的 CA 密碼以檢查請求是否與簽名匹配。

Checking \the request matches the signature

5. 再次輸入您的密碼以生成私鑰。

Generate a private key by entering the CA passphrase

6. 接下來,執行以下命令在 Docker 上啟動 OpenVPN 服務器服務以設置 OpenVPN 客戶端,其中:

  • -p 選項設置監聽並初始化服務器和客戶端之間連接的端口 (1194)。

如果您不習慣使用默認的 OpenVPN 端口,可以將端口 1194 更改為符合您的偏好。

  • –cap-add=NET_ADMIN 參數通過修改 Docker 默認不授予的網絡接口來應用額外的 Linux 能力。
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
Setting the port OpenVPN will listen to

7. 端口設置完成後,執行以下 docker run 命令以執行以下操作:

  • 從Docker容器生成客戶端證書並下載客戶端配置文件(.ovpn)到主機服務器。生成的證書是無密碼的,如命令中的no-pass參數所指定的那樣。
  • 將OpenVPN證書和客戶端識別文件的名稱設置為CLIENTAPP。證書存儲在主機的用戶目錄中,而不是Docker容器中。
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass

按照下面所示輸入您的密碼,以完成證書的生成。

Generating the VPN client certificate

8. 接下來,運行下面的命令,從容器中生成並下載OpenVPN連接(ovpn_getclient)配置文件到主機服務器。

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTAPP > CLIENTAPP.ovpn

9. 在主機服務器(Linux機器)中導航到user/home目錄,並將.ovpn文件(CLIENTAPP.ovpn)傳輸到Android設備上。

10. 最後,在Android設備上啟動您的OpenVPN Connect客戶端應用程式。

在“文件”選項卡下,點擊“瀏覽”並選擇您傳輸到Android設備上的.ovpn文件(CLIENTAPP.ovpn)。這樣做會將一個新的配置文件添加到OpenVPN Connect客戶端中。

Importing the .ovpn file to the OpenVPN Connect client

成功連接後,您將看到以下結果。

Verifying successful connection to the VPN server

訪問OpenVPN Web UI

您是否擔心需要處理的命令數量以訪問VPN服務器?為什麼不試試一個簡單的基於Web的用戶界面呢?

OpenVPN 提供了一套基於網頁的安裝和配置工具,可以快速部署 VPN 遠程訪問解決方案。這套工具套件是以一個稱為 OpenVPN Access Server 的單一包裹形式提供的。

要訪問 OpenVPN 網頁界面,您需要安裝以下包裹:

1. 執行以下 docker pull 命令,從 Linux Server Docker Hub(linuxserver)下載並安裝最新的 OpenVPN Docker 容器(openvpn-as)。

docker pull linuxserver/openvpn-as
Downloading OpenVPN Access Server Docker container

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 Access Server 在容器中運行的方式。
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as
Creating a new Docker container (openvpn-as)

3. 接下來,執行以下命令docker start,以訪問在步驟二中創建的 OpenVPN Access Server Docker 容器的 OpenVPN Web UI。

docker start openvpn-as
Starting the OpenVPN access server Docker container

4. 最後,打開您喜歡的瀏覽器,使用您的本地 IP 地址(例如,https://YourIP:943/admin)導航到 OpenVPN Web UI。將YourIP替換為您實際服務器的 IP 地址。

如果一切順利,您將會看到 OpenVPN Access Server 的登錄頁面,如下所示。

輸入 admin 和 password 作為用戶名和密碼,然後點擊“Sign in”以訪問 OpenVPN Access Server 的儀表板。

請注意,默認的用戶名和密碼分別為 admin 和 password。您可以根據自己的喜好更改這些憑據。

Accessing the OpenVPN Access Server web UI

登錄後,您將看到下面的 OpenVPN Access Server 儀表板。

Accessing the OpenVPN Access Server dashboard

配置 DNS 以獲得更快和更安全的連接

此時,您的 OpenVPN Access Server 已正常運行。但為了提高 VPN 服務器的性能,您必須配置 DNS。

要配置 DNS,您必須訪問 OpenVPN 服務器的 Web UI,並使用 Google 或您偏好的 DNS 地址更新 DNS 設置。Google 提供最快速的 DNS 服務器,您將在 OpenVPN Access Server 中使用它們。

1. 在 OpenVPN Access Server 儀表板的 CONFIGURATION 標籤下,點擊 VPN Settings(左側面板)。

向下滾動到DNS設置部分,並啟用“使用特定DNS伺服器”的選項,如下所示。

Enabling custom OpenVPN DNS addresses

2. 接下來,使用Google DNS地址更新主要DNS伺服器(8.8.8.8)和次要DNS伺服器(8.8.8.4),然後點擊“保存設置”以保存更改。

Setting custom OpenVPN DNS addresses

3. 保存更改後,點擊“更新運行中的伺服器”以重新啟動伺服器,使更改生效。

Updating the server settings

4. 現在,在Linux機器上導航到OpenVPN訪問伺服器(例如,https://YourIP:943/admin)。將YourIP替換為您的伺服器IP地址。如果配置正確,您將看到以下相同的頁面。

使用默認憑據(admin和password)登錄用於用戶名和密碼。

Logging in to OpenVPN Access Server

5. 點擊任何平台圖標下載客戶端應用程序,並點擊“Yourself(user-locked profile)”下載客戶端.ovpn文件。

Downloading the .ovpn config file and client app

6. 最後,啟動您下載的OpenVPN客戶端,並如在“使用證書保護OpenVPN客戶端”教程的最後一步中所示,導入.ovpn文件。

Connecting to the OpenVPN server

結論

主機化您的VPN伺服器絕不應該是一項復雜的任務,更不用說保護伺服器連接了。幸運的是,OpenVPN Docker就在不遠處,拯救了這一天。在本教程中,您已經學會了在Ubuntu上使用Docker安裝、設置和配置OpenVPN。您還涉及了使用OpenVPN CA和客戶端證書在Docker容器中保護對OpenVPN的訪問。

除了通过命令行界面访问您的OpenVPN服务器,现在您可以通过OpenVPN Access Server Web UI进行可视化访问。通过生成OpenVPN客户端应用程序的客户端配置文件,您已经实现了快速的VPN部署。

为什么不利用这个新发现的知识,使用WireGuard VPN为您的应用程序创建VPN隧道服务呢?使用自托管的VPN服务,探索无限的可能性世界吧!

Source:
https://adamtheautomator.com/openvpn-in-docker/