部署 VPN 服務

此映像僅確保基本功能無誤。如果您具備自行設定的能力,建議自行搭建,或參考此映像的實作方法。使用前,您需要掌握 Linux 和 Docker 相關基礎知識。此映像在 Debian 9 上測試通過。本文介紹如何在 Debian 9 上使用,通常情況下也適用於其他系統,例如 Ubuntu。本服務預設埠為 1190/UDP,請確保已在防火牆中允許該規則。

準備工作

您還需要在伺服器上做出如下修改,並執行以下命令:

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p

如果您的伺服器上安裝了 ufw,還需在 /etc/ufw/before.rules 檔案開頭寫入如下內容。這裡的 eth0 和網段需要根據您實際的伺服器介面和設定進行修改,注意是加在 *filter 規則前(如果有)。

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.27.27.0/24 -o eth0 -j MASQUERADE
COMMIT

修改 /etc/default/ufw 中的如下設定為 ACCEPT。

DEFAULT_FORWARD_POLICY="ACCEPT"

最後,執行如下命令重新載入 ufw 防火牆規則:

ufw reload

如果您伺服器沒有安裝 ufw,請確保 iptables 的 FORWARD 規則為 ACCEPT,並執行如下命令:

注意

伺服器重啟後您可能需要重新應用此規則,建議安裝 ufw。

iptables -P FORWARD ACCEPT

初始化設定

現在,建立一個目錄來儲存 OpenVPN 服務的設定。

mkdir -p ~/lamda-openvpn-server

接著,執行以下命令進行 OpenVPN 服務的初始化操作:

docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-server-new

等待命令執行結束。現在您可以在 ~/lamda-openvpn-server 目錄下看到服務設定檔 config.ovpn。您可以使用編輯器開啟此檔案,建議僅修改以下幾個欄位:

# VPN 的網段及遮罩
server 172.27.27.0 255.255.255.0
# VPN 服務埠
port 1190

# 如果需要 VPN 客戶端存取伺服器上的某個網路介面,可增加路由。
# 注意:此時客戶端只能存取目前主機在該網段的 IP,
# 若要實現對該網段的完全存取,還需額外設定。
push "route 192.168.68.0 255.255.255.0"

# 將 114.114.114.114 修改為您所需的 DNS 伺服器位址
push "dhcp-option DNS 114.114.114.114"

建立用戶端連線憑證

編輯完成後,建立一個用戶端。myname 可替換為您想要的其他名稱,但不可重複。

docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-new myname

建立完成後,使用如下命令取得此用戶端的登入憑證:

# 注意:設定中的 IP 是自動取得的目前公網 IP,如果不正確請自行修改。
#
# 產生 ovpn 設定並重新導向儲存到檔案 myname.ovpn。該檔案可用於 OpenVPN Connect 等用戶端。
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-profile ovpn myname >myname.ovpn
# 產生 lamda 使用的 OpenVPNProfile,可直接在 lamda 中使用。
# 輸出中包含 openvpn.* 相關設定,請參閱服務設定章節了解如何填入,以實現自動連線 VPN。
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-profile lamda myname

撤銷用戶端憑證

如果需要撤銷某個用戶端憑證,請執行以下命令。撤銷後可能需要重啟 OpenVPN 服務。

docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-revoke myname

啟動 OpenVPN 服務

現在您可以執行以下命令在前景啟動 OpenVPN 服務,以便直接查看用戶端連線記錄和排查錯誤。

docker run -it --rm --name openvpn-server --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn run

確認無誤後,建議讓服務在背景執行。使用以下命令背景啟動服務:

docker run -d --rm --name openvpn-server --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn run

參考文件

基礎文件:https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/

路由設定:https://community.openvpn.net/openvpn/wiki/BridgingAndRouting