如何透過 PowerShell 快速建立 Windows 內建 VPN 連線並自動記憶密碼連線 | The Will Will Web

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何透過 PowerShell 快速建立 Windows 內建 VPN 連線並自動記憶密碼連線

有鑑於近日台灣 COVID-19 疫情 相當嚴峻,政府也在前幾日宣布全台疫情警戒升第三級,我們公司也在 2021/5/17 開始全員在家上班,以致於使用 VPN 的同仁暴增,進而也遇到許多連線問題。本篇文章我要來分享幾個快速建立 VPN 的 PowerShell 命令,幫助大家在不瞭解 VPN 背景知識的情況下,也能快速且正確的設定好 VPN 連線。

快速設定 VPN 連線

以下是我們公司用來快速建立 VPN 連線的 PowerShell 指令碼:

$VPNConnectionName = "MyVPN"

$VPNServer = "IP.Address"
$DNSSuffix = "AD.Domain"
$L2tpPsk   = "L2TP 的 Pre-shared key (PSK)"

Add-VpnConnection -Name $VPNConnectionName -ServerAddress $VPNServer -TunnelType L2tp -L2tpPsk $L2tpPsk -DnsSuffix $DNSSuffix -AllUserConnection -Force -RememberCredential

以下是幾個重要參數的說明:

  1. 由於我們公司的 VPN 採用 L2TP 協定進行連線,所以必須指定正確的 Pre-shared key (PSK) 才能成功連線,因此需要加上 -L2tpPsk $L2tpPsk 才行,這個參數只有在使用 -TunnelType L2tp 的時候才能用。
  2. 我們公司的網路有透過 Active Directory (AD) 進行管理,所以加上預設 DNS 尾碼會比較方便,所以加上 -DnsSuffix $DNSSuffix 參數。
  3. 為了將 VPN 連線註冊到全域的電話簿 (global phone book),所以我們要加上 -AllUserConnection 參數。
  4. 當你第一次登入 VPN 之後,如果想要記憶密碼,可以加上 -RememberCredential 參數。
  5. 如果你的 PSK 會透過不安全的頻道傳送,必須加上 -Force 才能設定成功。

完整的參數說明請看 Add-VpnConnection (VpnClient) | Microsoft Docs 文件。

關於 RAS 電話簿

我們經常會說 VPN 要用「撥接」的方式進行連線,這個概念自然來自於傳統的「電話簿」(Phone Book),然後概念也確實一樣,我們上述建立 VPN 連線的過程,其實就是建立到 Windows 10 內建的 RAS (Remote Access Services) 電話簿中。

你可以執行 rasphone 命令(C:\Windows\System32\rasphone.exe)來啟動網路連線的視窗,而你從執行檔的名稱就可以看出這其實就是 RAS 的電話簿 (RAS Phone Books)!

Network Connections (rasphone.exe)

快速撥接 VPN 連線

我前幾年有寫過一篇 如何透過命令列工具快速連接 Windows 內建的 VPN 連線 文章,其中所使用到的工具程式 rasdial.exe 就是專門用來呼叫 RAS 電話簿中的網路連線。不過,當時寫的撥接 VPN 方式是直接在命令列輸入帳號密碼來登入,且密碼會需要使用「明碼」來撰寫,非常不安全,因此本篇文章將分享另一種可以「記憶密碼」的方式來進行撥接。

我們使用 Add-VpnConnection 新增的 VPN 連線設定,有包含一個 -RememberCredential 參數,他會讓你的 VPN 網路連線可以記憶上次輸入過的 VPN 連接認證 (帳號、密碼、網域),但是需要透過以下幾個步驟的設定才能成功撥接:

  1. 請用「系統管理員權限」開啟 Notepad 或任意文字編輯器

    打開 %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk 檔案

    注意: 此檔案為 UTF-8 編碼,如果發現亂碼要記得調整編輯器設定。

  2. 調整設定無互動自動撥接 VPN 連線的參數

    上一個步驟的 rasphone.pbk 檔案,其實是一個 INI 文字檔,如果你有設定兩個不同的 VPN 連線,那麼這個檔案就會有兩個區段設定,請記得要調整正確的參數。

    你必須找到一個 PreviewUserPw=1 參數,其值預設為 1,你必須把他改成 0 之後儲存檔案,才能進行下一步。

  3. 執行 rasphone -d "MyVPN" 命令來撥接

    其中 MyVPN 是你在建立 VPN 連線時所指定的連線名稱!

    撥接 VPN 的過程中畫面會出現以下視窗,但是不會出現太久,當 VPN 連線成功後就會自動消失:

    Connecting to DuotifyVPN

上述三個步驟都設定成功,就代表你已經可以免設定密碼自動撥接 VPN 了!

今後就只要執行以下命令就可以自動撥接 VPN 了,而且還不用將連線密碼寫在批次檔AutoHotkey 的指令檔中:

rasphone -d "MyVPN"

若要斷掉連線,也可以使用以下命令:

rasphone -h "MyVPN"

額外補充

若要手動建立 VPN 連線設定,可以使用以下命令快速啟動建立 VPN 連線的精靈頁面:

rasphone -a

相關連結