星期四, 10月 20, 2016

在Windows Server設定L2TP over IPSec VPN

簡單地說,macOS Sierra與iOS 10發表後,大家忽然發現Apple不再支援PPTP,所以一定得設定其他的VPN型態。若不要另外裝client,用L2TP是最方便的,SSL VPN雖然好,但若沒有安裝Agent要連線到任一電腦或是非網頁服務還是挺麻煩的。
這裡假設已經知道怎麼設定PPTP Server。打開RAS管理程式,路由及遠端管理

把連接埠的數量訂好
用憑證是很麻煩的事,所以設定成預先共用金鑰,只要講好打這一串文字就好,類似WiFi的密碼。
在防火牆除了要設定 UDP 1701 (L2TP)之外,還要開UDP 500 (IPSec) 及UDP 4500 (NAT traversal)。

但是我測試後,在Android/macOS/iOS都可以,但Windows就怎麼也不會過,為什麼呢?查了很久,終於詢問高手後得知答案,原來是:
根據預設,Windows Vista 及 Windows Server 2008 作業系統不支援網際網路通訊協定安全性 (IPsec) 網路位址轉譯 (NAT) 周遊 (NAT-T) 安全性關聯到位於 NAT 裝置後面的伺服器。因此,如果虛擬私人網路 (VPN) 伺服器位於 NAT 裝置後面, Windows vista 的 VPN 用戶端電腦或 Windows Server 2008 為基礎的 VPN 用戶端電腦就無法進行第二層通道通訊協定 (L2TP) / IPsec 連線到 VPN 伺服器。此案例包含執行 Windows Server 2008 的 VPN 伺服器與 Microsoft Windows Server 2003。
因為 NAT 裝置的轉譯網路流量的方式,所以,您架設在 NAT 裝置後方的伺服器,然後使用 [IPsec NAT-T 環境時,可能會遇到未預期的結果。因此,如果您必須有 IPsec 進行通訊,我們建議您的所有伺服器使用可以從網際網路連接到之公用 IP 位址。不過,如果您有將 NAT 裝置後方的伺服器,然後使用 [IPsec NAT-T 環境,則您可以變更的登錄值,在 VPN 用戶端電腦與 VPN 伺服器上啟用通訊。
步驟
若要建立和設定
AssumeUDPEncapsulationContextOnSendRule
登錄值,請依照下列步驟執行︰
  1. 使用者是系統管理員群組的成員身分登入 Windows Vista 用戶端電腦。
  2. 按一下 [開始] [Start button,指向 [所有程式]、 按一下 [附屬應用程式、 按一下 [執行]、 輸入 regedit,然後按一下 [確定]。如果 使用者帳戶控制] 對話方塊顯示在螢幕上,並提示您升級系統管理員 Token,按一下 [繼續]。
  3. 找出並按一下下列登錄子機碼︰
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
    附註
    AssumeUDPEncapsulationContextOnSendRule
    使用 Microsoft Windows XP Service Pack 2 (SP2) 的 DWORD 值-基礎 VPN 用戶端電腦。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
  4. 在 [編輯] 功能表上,指向 [新增],然後按一下 [ DWORD (32 位元) 值]。
  5. 輸入AssumeUDPEncapsulationContextOnSendRule,然後再按 ENTER 鍵。
  6. 以滑鼠右鍵按一下AssumeUDPEncapsulationContextOnSendRule,,,然後按一下 [修改]
  7. 在 [數值資料] 方塊中,輸入下列值之一︰
    • 0
      值為 0 (零) 會將 Windows 設定,讓它無法建立與伺服器位於 NAT 裝置後面的安全性關聯。
    • 1
      值為 1 設定 Windows,以便它可以建立與伺服器位於 NAT 裝置後面的安全性關聯。
    • 2
      值為 2 設定 Windows,以便伺服器與 Windows Vista 或 Windows Server 2008 為基礎的 VPN 用戶端電腦同時 NAT 裝置後面時,它可以建立安全性關聯。
  8. 按一下 [確定],然後結束 [登錄編輯程式。
  9. 重新啟動電腦。

5 則留言:

龍貓 提到...

請問
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
是在伺服器設置,還是使用者端設置?


如果找不到這個機碼怎麼處理呢?
謝謝。

Tseng Teng-Yi 提到...

就是要加在使用者端,所以很麻煩。找不到這個機碼就新增,但是限於Windows XP ,Windows 7以上應該是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent。

龍貓 提到...

謝謝你的答覆。

我的狀況是win7更改了這個機碼:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
以後可以連上。

但是手機都無法用L2TP連不上windows 2008的vpn伺服器。(但是用PPTP可以。)

Tseng Teng-Yi 提到...

我的macOS/iOS/Android都可以,只有Linux還沒搞定。手機的問題,可能是設定不對。

Android在類型請選 L2TP/IPSec PSK ,
L2TP密碼和IPSec識別碼 都別設定 ,
只要設定 IPSec 預先共用金鑰就好。
轉寄路徑是內網的網段,例如 192.168.0.0/16。

龍貓 提到...

謝謝你的回覆。

我目前還是不得其門而入。
另外我發現iPhone的設定沒有轉寄路徑的欄位。

我會再摸索看看,有突破再與你分享。

謝謝。