OpenConnect 代替 FortiClient VPN 自動重連

想要使用 FortiClient VPN 的話,Linux 中有 openfortivpn 這個開源程式,其中的 --persistent 參數可以在斷線之後自動連線。不過 Windows 就無法使用了。使用原官方的 FortiClient VPN 時,就會遇到每 8 小時自動斷線的問題,這對於需要穩定連線的使用者來說,確實是一個不小的困擾。官方提供的解決方案是付費購買授權就能啟用自動重新連線功能,但對於許多使用者來說,這可能不是最理想的選擇。

經過多番嘗試和研究,終於找到了 OpenConnect 這個開源程式,它完全相容於 FortiConnect VPN 的協定,有提供 GUI 介面和指令模式 (CLI)。雖然在 GUI 介面中同樣沒有自動重連的功能,但在 CLI 中可以寫 bat 來達成自動重連的效果。

在設定的過程中遇到了一些問題,首先由於我們使用的是自行簽署的憑證,必須在參數中加入指令來同意這些憑證。而一開始因為沒有注意到 bat 的換行符號在 Windows 中需要使用 【^】,導致起初認為不支持這類指令。

此外,自動輸入密碼的部分也需要特別處理。Windows 環境下無法像 Linux 那樣使用 pipeline 的方式將密碼輸入,這是因為 OpenConnect 只支援使用 stdin 來接收密碼。最後的解決方法是建立一個包含密碼的文字檔案,例如 pass.txt,然後使用 < pass.txt 將內容傳輸到 stdin,順利解決了這個問題。

經過測試,這個 bat 在 VPN 8 小時斷線後成功自動重連,終於解決了這個問題。
原理是利用批次檔在執行連線後,斷線後自動返回到連線開始的地方,由此實現無限次數的自動重連。

bat 的內容如下

@echo off
REM -= FortiClient VPN 自動重連腳本 =-
REM 修改下列為你的設定
set VPN_SERVER=https://1.2.3.4:443/
set VPN_USER=VPN_USER

:RECONNECT
echo [INFO] 嘗試連線至 VPN服務器...
"C:\\Program Files\\OpenConnect-gui\\openconnect.exe" ^
  --protocol=fortinet ^
  --user=%VPN_USER% ^
  --passwd-on-stdin ^
  --servercert pin-sha256:xxxxxxx ^
  %VPN_SERVER% < pass.txt

echo [WARN] 連線中斷,10 秒後自動重連...
timeout /t 10
goto RECONNECT

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *