我的场景不使用任何类型的 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 Both
注册表设置“AssumeUDPEncapsulationContextOnSendRule”与旧的 Windows IPsec 策略代理服务相关。
上述 Powershell 命令允许 Windows 防火墙执行相同的行为,特别是它将注册表值“IPsecThroughNAT”设置为“2”。
现在一切都按预期进行,并且从一开始就应该如此,这应该是默认设置。
答案2
Windows 可能不支持服务器位于 NAT 设备后面。它要求服务器具有公共 IP 地址。可以通过添加以下注册表项来解决。
注册表子项位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent DWORD 值名称:AssumeUDPEncapsulationContextOnSendRule DWORD 值数据:2
来源: