之前公務電腦剛換成 Windows 10 後,就有發現內建的 VPN 連線沒辦法連回家裡的 Synology VPN Server,不過因為想繞過的東西通常是網站,而 SSH tunnel 還是可以穩定運作,所以也就置之不理,但最近為了 prepare 以後可能會用到的狀況,還是研究了一下怎麼解決。
症狀
我在 Synology DS213+ with DSM 6.1 上安裝了官方的 VPN Server package,前面接了一台 Wifi 分享器,有開 UDP 500, 1701, 4500 的 port-forwarding。(參考:Synology 服務使用哪些網路連接埠?)
在手機上或是 Mac 筆電都可以正常連線 VPN,所以排除是 VPN server, 或是 firewall, port forwarding 之類的問題,Windows 10 的 VPN 設定也是正確的,使用 L2TP/IPSec,填了正確的金鑰,但會出現下列錯誤:
新增 Registry 機碼解決
查了一下,似乎是個從 Vista 時代就一直有的錯誤(也太古老了吧?!),Microsoft 官方的說明在:How to configure an L2TP/IPsec server behind a NAT-T device in Windows Vista and in Windows Server 2008
解決方法是在 Registry 裡增加一個新的機碼:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
新增一個 32-bit DWORD,名稱為AssumeUDPEncapsulationContextOnSendRule
然後把值設為2
理論上要重開機才會生效,不過我試了兩台 Windows 10,一台沒重開也 OK 就是了。Anyway, 如果發現沒有效果就重開試試吧!
其他安全性設定
基本上這樣 VPN 就可以連線了,不過還是有一些安全性的設定可以調整。在連線的設定裡,「安全性」標籤,資料加密欄位改為「需要加密(如果伺服器拒絕就中斷連線)」(預設是「可省略加密」),另外允許這些通訊協定的選項,只勾選「MS-CHAP v2」,如下圖:
如此一來,連上 VPN 就可以繞過一些惱人的問題啦!