部署 OpenVPN 服務

此映像檔僅確保基本功能無誤,若您有能力自行設定,建議您自行架設,或參考此映像檔的實作方法來完成。使用前,您需要具備 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 修改為您需要的 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 等 APP
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 中使用
# 其中包含一段 properties.local 註解部分,您可以將其中的 openvpn.* 設定
# 複製到 /data/usr/properties.local 中以實現自動連線 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