之前寫過兩篇介紹在樹莓派搭 IKEv2 VPN Server,以及按需連線(On Demand)的文章

當時很多人跟我說步驟太多太複雜,其中一個步驟搞錯就搭不起來

最近我新入手一台 Intel i5 mini PC,主要想把群暉 NAS 上面很多在跑的軟體都移轉過去,順手整理一下內部網路環境

因為我發現我給群暉 NAS 太多工作,他有點不是很開心,速度越來越慢了。。。

然後我看了一看之前文章,我自己也覺得很繁瑣,就乾脆重新用 Docker 來搭建 VPN Server 🤣

當初會用原生來搭建是因為擔心樹莓派用 Docker 模擬的方法效能不足。。

搜尋一下 Docker Hub 相關資源,找到一個不錯的版本

只要兩行指令就能搭好 IKEv2 VPN Server 與 On Demand 的 iOS / macOS 描述檔,非常方便!

原始程式網站在這: https://github.com/billimek/ikev2-vpn-server

不過在開始前,要先製作一個 strongswan.conf 的設定檔

因為作者 Docker 映像檔裡面塞了一個國外的 DNS Server,我們在台灣使用的話速度超慢

所以我們要另外做一個設定檔,把它換成 CloudFlare 跟 Google 的 DNS 速度就會快上許多

當然你也可以改成你自己的,甚至是你自己搭的 AdGuard Home or PiHole 廣告阻擋器

# SSH 登入到你要安裝的主機中
$ ssh username@IP
# 建立一個設定檔
$ nano ~/strongswan.conf

複製貼上以下內容:

charon {
  load_modular = yes
  plugins {
    include strongswan.d/charon/*.conf
    attr {
    dns = 1.1.1.2, 8.8.8.8
    }
  }
}
include strongswan.d/*.conf

然後保存退出

接著複製以下指令(需替換成你的設定),直接執行就能順利跑一個 IKEv2 VPN Server

$ docker run --cap-add=NET_ADMIN -d --name vpn-server --restart=always \
-p 500:500/udp -p 4500:4500/udp \
-v ~/strongswan.conf:/etc/strongswan.conf \
-e "HOST=你的域名或者 IP" -e "HOSTNAME=你主機名" \
-e "EXCLUDE_SSID=你的 SSID" \
billimek/ikev2-vpn-server

其中「你的 SSID」要輸入你家中或者公司的 WiFi SSID,只要遇到這些 SSID,系統就會自動把 VPN 斷線

連到其他名稱的 WiFi 包含在行動網路時都會自動連回 VPN

接下來我們需要讓 Docker 內這個 VPN 容器製作一個 iOS /macOS 的描述檔

作者也已經把這腳本放進去容器了,我們只要執行下面指定即可自動產生一個可以在 iOS / macOS 上面安裝的描述檔

docker exec -it vpn-server generate-mobileconfig > ikev2-vpn.mobileconfig

以上 .mobileconfig 描述檔完成後你可以使用 scp、ftp 或者其他方法把檔案傳輸到你電腦上面

弄到電腦上以後你可以發 email 給自己 iOS 設備,或者是用 AirDrop 直接丟給 iOS 設備都可以

丟到 iOS 上面之後,會跳出一個視窗,告訴你要去設定裡面找出來安裝

在「設定」、「一般」裡面就會看見「描述檔」,點進去就會看見剛剛丟過來的檔案

如果你 iOS 有設定密碼的話,這邊會跳出讓你輸入密碼的提醒,注意!是平常 iOS 解鎖的密碼,不是你 Apple ID 或者其他的

接下來會有一段警告,但不用管他,這是自己架的伺服器,沒什麼好擔心的,直接點右上角的「安裝」即可

Docker 真是一個偉大的發明!

把以前要花 30 分鐘來回測試繁瑣的操作過程簡化到變成幾行指令就搞定。。