建立 iOS/macOS 按要求連線(On Demand) IKEv2 VPN

上一篇有介紹在 Raspberry Pi 樹莓派上面建立 IKEv2 VPN Server

速度不錯,也非常穩定,已經很好用,但是想要讓它在更好用!

這是因為之前建立的 VPN,每次出門時候都要手動去設定裡面打開 VPN,回到家時後也需要手動去關閉 VPN

有點不方便,不夠智能化啊~

於是開始琢磨 iOS 自動 VPN 連線的功能,蘋果也其實早就有提供 On Demand 的設定

蘋果也有提供相關圖形化設定工具,不過是在 macOS 上面而已,其他平台只能自己手動編寫

但也不是非常麻煩,因為目前網路上也有一堆設定檔可以參考

如果你還沒在樹莓派上安裝過 IKEv2 VPN Server 的話,請先翻上一篇文章,然後再繼續

VPN Server 這邊只要改兩個文件的設定,一個是 ipsec.conf,另外一個是 ipsec.secrets

所以同樣 SSH 進去 Pi 並切換成 root,開始編輯 ipsec.conf

1
2
3
$ ssh [email protected]
$ sudo -s
$ vim /etc/ipsec.conf

改成以下這樣:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# ipsec.conf - strongSwan IPsec configuration file

config setup
charondebug="cfg 2, dmn 2, ike 2, net 2"
uniqueids=never

conn %default
compress=yes
dpdaction=restart
dpddelay=30s
inactivity=300s
fragmentation=yes
forceencaps=yes
rekey=no
keyexchange=ikev2

left=%any
[email protected]
leftauth=pubkey
leftcert=vpn-host-certificate.pem
leftsendcert=always
leftsubnet=0.0.0.0/0

right=%any
rightsourceip=10.0.0.0/24
rightdns=8.8.8.8,8.8.4.4
[email protected]
rightauth=eap-mschapv2

ike=aes256gcm16-sha256-ecp521,aes256-sha256-ecp384!
esp=aes256gcm16-sha256,aes256gcm16-ecp384!

conn iOS
auto=add

conn OSX-EAP-TLS
auto=add

include /var/lib/strongswan/ipsec.conf.inc

接著再修改 ipsec.secrets 檔案

1
$ vim /etc/ipsec.secrets

在該文件的最下面,加入一行:

1
username : EAP "somepassword"

「username」:要登入的帳號名稱

「somepassword」:請修改成自己偏好的密碼

(上述的 ike 與 esp 在「macOS 10.13.4」、「iOS 11.3.1」測試通過,Windows 10 應該也沒有問題~)

以上修改完 Server 端以後,我們開始琢磨 Client 端的設定

先去 macOS 的 App Store 下載 Apple Configurator 2: https://itunes.apple.com/app/apple-configurator-2/id1037126344

下載完畢打開 App 後,在上面選單找到「檔案」 > 「新增描述檔」

/media/2017/12/snipaste_20171224_180233.png

打開之後,在「一般」欄位,名稱可以隨意取,方便自己識別即可

/media/2017/12/snipaste_20171224_181415.png

接著到「憑證」欄位,這裡我們要匯入上一篇自己簽名的 jkgtw.p12 憑證

/media/2017/12/snipaste_20171224_181530.png

如果你還有記憶,這個憑證是有密碼的,此處可以先輸入憑證安裝密碼

或者此處不輸入的話,Client 端在安裝時候也會要求輸入,我這邊選擇不輸入

/media/2017/12/snipaste_20171224_181549.png

然後跳到「VPN」欄位,直接點「設定」

/media/2017/12/snipaste_20171224_181618.png

這邊可以根據下面我的設定來自己修改,其中要注意的是「透過 VPN 傳送所有流量」記得打勾

/media/2017/12/snipaste_20171224_182047.png

啟用「EAP」要打勾,然後「EAP 認證」那邊選擇「使用者名稱/密碼」

帳號跟密碼就是剛剛我們在 ipsec.secrets 最底下添加的一行

「啟用完美前向保密」也打勾

/media/2017/12/Xnip2018-05-26_10-43-46.jpg

下面的「IKE SA 參數」跟「子 SA 參數」的欄位,我們要稍微修改一下

加密演算法:AES-2560-GCM

完整演算法:SHA2-256

Diffie-Hellman 群組號碼:21

「IKE SA 參數」跟「子 SA 參數」兩個欄位都要修改

以上設定完畢後就可以保存這個 mobileconfig 檔案

/media/2017/12/snipaste_20171224_182342.png

剛剛在憑證那邊如果沒有輸入安裝密碼的話,這邊會提示一個錯誤

但是不用管他,我們直接轉「強制保存」即可

/media/2017/12/snipaste_20171224_182403.png

保存好以後,找到檔案位置,用自己習慣的文字編輯器打開這個檔案

/media/2017/12/snipaste_20171225_102447.png

打開之後,找到 </array>,在</array>上面一行加入以下規則

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>Disconnect</string>
<key>InterfaceTypeMatch</key>
<string>WiFi</string>
<key>SSIDMatch</key>
<array>
<string>MyWiFiSSID001</string>
<string>MyWiFiSSID002</string>
</array>
</dict>
<dict>
<key>Action</key>
<string>Connect</string>
</dict>

第 12 跟 13 行請自行修改,改成你自家的 WiFi 名稱

以上的規則內容是:只要設備連上你設定的這些 WiFi 名稱,VPN 就會自動關閉,反之就會自動打開 VPN

如果你需要更多詳細設定內容,可以參閱蘋果官方的說明文件: https://developer.apple.com/library/content/featuredarticles/iPhoneConfigurationProfileRef/Introduction/Introduction.html

還能設定當設備訪問到「特定網址」時候,再打開 VPN 之類的設定,都在以上官方說明文件裡面有

編輯完畢保存以後,把這個 mobileconfig 檔案透過 email 或者是 AirDrop 丟到設備上都可以

安裝完畢後就能立刻使用囉!iOS 跟 macOS 都通用!

另外如果你有時不想讓它 On Demand 撥號 VPN

iOS 可以到「設定」 >  「一般」 > 「VPN」裡面找到「按要求連線」,把它關閉

macOS 可以到「系統偏好設定」 > 「網路」裡面找到該 VPN,也是能看見「按要求連線」,取消勾選即可