我有一个 Windows 10 客户端,已配置为连接到 L2TP VPN。
使连接正常工作,我必须添加"AssumeUDPEncapsulationContextOnSendRule"
注册表项,然后完全禁用 Windows 防火墙——VPN 通过这种方式完美连接。
然而,我不能获取 VPN 以连接到已启用 Windows 防火墙我确实需要保持 Windows 防火墙处于启用状态并能够连接到 L2TP VPN。
我也允许了...
- 协议
50
(ESP) 输入和输出 - UDP
1701
,4500
,500
输入和输出
但是,仅当我完全禁用 Windows 防火墙而不是启用它时,VPN 仍然会连接。
问题:有任何帮助或指导可以进一步解决此问题吗?
答案1
无法让 Windows 连接到 L2TP VPN
首先,如果 VPN 服务器位于NATVPN 客户端位于NAT这可能会引起问题,因为显然“默认情况下,Windows 不支持与位于 NAT 设备后面的服务器建立 IPSec 网络地址转换 (NAT) 遍历 (NAT-T) 安全关联”,这仍然适用于 Windows 10。
微软给出的建议“如果您必须将服务器置于 NAT 设备后面,然后使用 IPsec NAT-T 环境,则可以通过更改注册表值来启用通信VPN 客户端计算机和 VPN 服务器“”。
PowerShell(建议修复)
笔记: 您必须在管理员提升的 PowerShell 会话中运行此操作。
## -- Add registry key to support for L2TP communications via double NAT
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force;
重要的: 您必须重新启动应用此功能的机器才能使其生效。
创建并配置
AssumeUDPEncapsulationContextOnSendRule
注册表项的值2
低于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
注册表子项并将其定义为DWORD
值。
- 值
2
配置 Windows,以便当 Windows Server 和 Windows VPN 客户端计算机都位于 NAT 设备后面时,它可以建立安全关联。
PowerShell(删除修复)
笔记: 您必须在管理员提升的 PowerShell 会话中运行此操作。
## -- Remove registry key for L2TP communications support via double NAT
Remove-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" –Force;
重要的: 您必须重新启动应用此功能的机器才能使其生效。
如果不是双重 NAT 问题那么...
似乎在某些配置中,端口1701
不仅用于 UDP,还用于 TCP 和 UDP。调整规则以允许 TCP 端口1701
通过,看看是否能解决问题。
第二层隧道协议 (L2TP)使用 TCP 端口 1701,是点对点隧道协议的扩展。L2TP 通常与 IPSec 一起使用来建立虚拟专用网络 (VPN)。2020-06-25:修正拼写错误,L2TP 使用 UDP,而不是 TCP
- 此外,请确保您的 Windows 防火墙“允许”规则适用的 TCP 和 UDP 端口(和任何相关的 VPN 客户端软件 exe等)选项
Advanced
卡已选中所有private
、domain
和public
配置文件。
经过进一步研究,我不太清楚其中一些是否适用于 L2TP 的客户端而不是 VPN 服务器端,但一些建议实际上允许 UDP 端口
50
。还有另一篇文章也谈到了
ESP (value 50) <- Used by IPSec data path
以及其他指IPSec协议和端口所使用的端口。
-
记住,我不确定#4和#5是否都适用于连接客户端,但需要考虑进一步调查并为相关协议和/或端口开放额外的访问权限。
进一步故障排除
为了进一步排除故障,请考虑运行Wireshark在禁用 Windows 防火墙的情况下,成功建立 VPN 连接并保存该跟踪。然后在启用 Windows 防火墙的情况下,运行新的跟踪,尝试建立 VPN 连接并保存该跟踪。
现在,您可以查看成功和不成功的 L2TP VPN 连接跟踪、过滤并在数据包级别查看实际情况,以确定可能需要进一步允许通过 Windows 防火墙的操作。
支持资源
答案2
您在 Windows 防火墙中配置了错误的端口。
对于 L2TP,您需要 UDP 端口 500、1701 和 4500。
端口 5000 不正确(如果这不是打字错误的话)。
答案3
你可能会错过IP 协议 ID 51,用于身份验证头 (AH) 流量。
L2TP 实际上是 IP 封装协议的变体。L2TP 隧道是通过将 L2TP 帧封装在用户数据报协议 (UDP) 数据包中而创建的,而后者又封装在 IP 数据包中。此 IP 数据包的源地址和目标地址定义了连接的端点。由于外部封装协议是 IP,因此您可以将 IPSec 协议应用于复合 IP 数据包。这可以保护在 L2TP 隧道内流动的数据。然后您可以应用认证标头 (AH)、封装安全有效负载 (ESP) 和互联网密钥交换 (IKE) 协议。
认证头 (AH) 为 IP 数据报提供无连接数据完整性和数据来源认证,并提供针对重放攻击的保护。
答案4
DNS(端口 53 [以及 TLS 上的 853])?
假设您非常清楚自己在做什么,并且已经勾选了所有列出的必需端口,我猜您被 DNS 查询搞得焦头烂额。这就是困扰我的问题。我使用的是主机名而不是 IP,所以它一直尝试先进行 DNS 查找(通过阻止它们的防火墙)。