我的場景不使用任何類型的 VPN,也不使用 RRAS。
我正在嘗試在兩台位於不同 Nat 裝置後面的 Windows 10 電腦(均已完全修補 1709)之間建立 IPsec 連線。
透過Windows防火牆,我在兩台機器上建立了兩條傳輸規則,這些規則與Smb協定相關。
兩台機器都位於一個 Nat 後面,兩個 Nat 裝置透過 Internet 連接。
我在兩台電腦上建立了註冊表項“AssumeUDPEncapsulationContextOnSendRule”,並將兩台電腦上的值設為“2”。
在伺服器前面的 Nat 裝置上,我嘗試將 Udp 連接埠 500 和 4500 以及所有 Smb 相關連接埠轉送到伺服器本身。
在兩台電腦中,我都允許透過 Windows 防火牆、入站和出站 Udp 連接埠 500、4500,甚至允許在伺服器電腦上連接 Smb 的「邊緣遍歷」。
當我嘗試遠端存取伺服器時,會建立快速模式安全關聯,但連線不起作用。 (命令Get-NetIpsecQuickmodeSa的輸出看起來沒問題,即Udp封裝已正確建立)
當用戶端位於 Nat 後面且伺服器具有公共 Ip 時,連線確實有效,但當用戶端具有公共 Ip 且伺服器位於 Nat 後面或用戶端和伺服器都位於 Nat 後面時,連線不起作用。
一定有一些我忽略的設定。
請幫我解決這個問題。
多謝
答案1
我確信有一些設定被我忽略了,那就是:
設定 NetFirewallSetting -AllowIPsecThroughNAT 兩者
註冊表設定「AssumeUDPEncapsulationContextOnSendRule」與舊的 Windows IPsec 策略代理服務相關。
上述 Powershell 指令允許 Windows 防火牆執行相同的行為,特別是將登錄值「IPsecThroughNAT」設定為「2」。
現在一切都按預期工作,並且從一開始就應該如此,這應該是預設值。
答案2
Windows 可能不支援伺服器位於 NAT 裝置後面。它要求伺服器具有公共 IP 位址。有一個解決方法是新增以下註冊表項。
登錄子項位置: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent DWORD 值名稱: AssumeUDPEncapsulationContextOnSendRule DWORD 值資料: 2
來源: