排查 Always On VPN 问题
本文提供有关验证和排查 AlwaysOn VPN 部署问题的说明。
如果 AlwaysOn 虚拟专用网络 (VPN) 设置未将客户端连接到内部网络,则可能遇到了以下问题之一:
- VPN 证书无效。
- 网络策略服务器 (NPS) 策略不正确。
- 客户端部署脚本或路由和远程访问的问题。
对 VPN 连接进行故障排除和测试的第一步是了解 Always On VPN 基础结构的核心组件。
可以通过多种方式排查连接问题。 对于客户端问题和常规故障排除,客户端计算机上的应用程序日志非常有价值。 对于特定于身份验证的问题,位于 NPS 服务器上的 NPS 日志可以帮助你确定问题的根源。
AlwaysOn VPN 连接问题的常规故障排除
Always On VPN 客户端在建立连接之前需要经过几个步骤。 因此,有几个位置的连接可能会被阻止,而且有时很难弄清楚问题所在。
如果遇到问题,可以采取以下一些常规步骤来查明发生了什么:
- 运行 whatismyip 扫描以确保模板计算机未连接到外部的位置。 如果计算机具有不属于你的公共 IP 地址,则应将 IP 更改为专用 IP。
- 转到控制面板>网络 和 Internet>网络连接,打开 VPN 配置文件的属性,并检查以确保 常规 选项卡中的值可以通过 DNS 公开解析。 否则,远程访问服务器或 VPN 服务器无法解析 IP 地址可能是问题的原因。
- 将互联网控制消息协议 (ICMP) 面向外部接口打开,并从远程客户端对名称执行 ping 命令。 如果 ping 成功,则可以删除 ICMP 允许规则。 如果没有成功,则无法访问 VPN 服务器可能就是问题所在。
- 检查 VPN 服务器上的内部和外部 NIC 的配置。 具体而言,请确保它们位于同一子网上,并且外部 NIC 连接到防火墙上的正确接口。
- 检查客户端防火墙、服务器防火墙和任何硬件防火墙,确保它们允许通过 UDP 500 和 4500 端口活动。 此外,如果使用 UDP 端口 500,请确保未在任何位置禁用或阻止 IPSEC。 否则,客户端到 VPN 服务器外部接口的端口未打开是问题所在。
- 验证 NPS 服务器是否具有可为 IKE 请求提供服务的服务器身份验证证书。 此外,请确保 NPS 客户端在其设置中具有正确的 VPN 服务器 IP。 应仅使用 PEAP 进行身份验证,且 PEAP 属性应仅允许证书身份验证。 可以在 NPS 事件日志中检查是否存在身份验证问题。 有关详细信息,请参阅安装和配置 NPS 服务器。
- 如果可以连接但无法访问 Internet 或本地网络,请检查 DHCP 或 VPN 服务器 IP 池是否存在配置问题。 此外,请确保客户端可以访问这些资源。 可以使用 VPN 服务器路由请求。
VPN_Profile.ps1 脚本问题的常规故障排除
手动运行 VPN_Profile.ps1 脚本时最常见的问题包括:
- 如果使用远程连接工具,请确保不使用远程桌面协议 (RDP) 或其他远程连接方法。 远程连接可能会干扰服务在你登录时检测操作的能力。
- 如果受影响的用户是本地计算机上的管理员,请确保他们在运行脚本时具有管理员权限。
- 如果已启用其他 PowerShell 安全功能,请确保 PowerShell 执行策略未阻止脚本。 在运行脚本之前禁用约束语言模式,然后在脚本完成运行后重新激活该模式。
日志
还可以检查应用程序日志和 NPS 日志中,看是否存在可以指示问题发生时间和位置的事件。
应用程序日志
客户端计算机上的应用程序日志记录 VPN 连接事件的较高级别详细信息。
排查 AlwaysOn VPN 问题时,请查找标记为 RasClient 的事件。 所有错误消息都会在消息末尾返回错误代码。 错误代码列出了与 AlwaysOn VPN 相关的一些更常见的错误代码。 有关错误代码的完整列表,请参阅路由和远程访问错误代码。
NPS 日志
NPS 创建并存储 NPS 记帐日志。 默认情况下,日志存储在名为创建<日志>日期的 %SYSTEMROOT%\System32\Logfiles\ 文件中.txt。
默认情况下,这些日志采用逗号分隔值格式,但不包含标题行。 以下代码块包含标题行:
ComputerName,ServiceName,Record-Date,Record-Time,Packet-Type,User-Name,Fully-Qualified-Distinguished-Name,Called-Station-ID,Calling-Station-ID,Callback-Number,Framed-IP-Address,NAS-Identifier,NAS-IP-Address,NAS-Port,Client-Vendor,Client-IP-Address,Client-Friendly-Name,Event-Timestamp,Port-Limit,NAS-Port-Type,Connect-Info,Framed-Protocol,Service-Type,Authentication-Type,Policy-Name,Reason-Code,Class,Session-Timeout,Idle-Timeout,Termination-Action,EAP-Friendly-Name,Acct-Status-Type,Acct-Delay-Time,Acct-Input-Octets,Acct-Output-Octets,Acct-Session-Id,Acct-Authentic,Acct-Session-Time,Acct-Input-Packets,Acct-Output-Packets,Acct-Terminate-Cause,Acct-Multi-Ssn-ID,Acct-Link-Count,Acct-Interim-Interval,Tunnel-Type,Tunnel-Medium-Type,Tunnel-Client-Endpt,Tunnel-Server-Endpt,Acct-Tunnel-Conn,Tunnel-Pvt-Group-ID,Tunnel-Assignment-ID,Tunnel-Preference,MS-Acct-Auth-Type,MS-Acct-EAP-Type,MS-RAS-Version,MS-RAS-Vendor,MS-CHAP-Error,MS-CHAP-Domain,MS-MPPE-Encryption-Types,MS-MPPE-Encryption-Policy,Proxy-Policy-Name,Provider-Type,Provider-Name,Remote-Server-Address,MS-RAS-Client-Name,MS-RAS-Client-Version
如果将此标题行粘贴为日志文件的第一行,然后将该文件导入 Microsoft Excel,则 Excel 将正确标记列。
NPS 日志可帮助你诊断与策略相关的问题。 有关 NPS 日志的详细信息,请参阅解释 NPS 数据库格式日志文件。
错误代码
以下部分介绍如何解决最常遇到的错误。
错误 800:远程连接无法连接
当服务无法建立远程连接时,会出现此问题,因为尝试的 VPN 隧道失败,通常是因为 VPN 服务器无法访问。 如果连接尝试使用第 2 层隧道协议 (L2TP) 或 IPsec 隧道,则此错误意味着 IPsec 协商所需的安全参数未正确配置。
原因:VPN 隧道类型
当 VPN 隧道类型设置为自动并且连接尝试在所有 VPN 隧道中失败时,可能会遇到此问题。
解决方案:检查 VPN 配置
由于 VPN 设置导致此问题,因此应通过尝试以下方法排查 VPN 设置和连接问题:
- 如果你知道要用于部署的隧道,请在 VPN 客户端将 VPN 类型设置为该特定隧道类型。
- 确保没有阻止用户数据报协议 (UDP) 端口 500 和 4500 上的 Internet 密钥交换 (IKE) 端口。
- 确保客户端和服务器上都存在正确的 IKE 证书。
错误 809:无法在本地计算机与 VPN 服务器之间建立连接
在此问题中,远程服务器不会响应,这会阻止本地计算机和 VPN 服务器连接。 这可能是因为你的计算机和远程服务器之间的一个或多个网络设备(例如,路由器、防火墙、或网络地址转换 (NAT))未配置为允许 VPN 连接。 请与管理员或服务提供商联系,确定导致该问题的设备。
错误 809 原因
当 VPN 服务器或防火墙上的 UDP 500 或 4500 端口被阻止时,可能会遇到此问题。 如果计算机与远程服务器(例如防火墙、NAT 或路由器)之间的某个网络设备未正确配置,则可能会发生阻止。
解决方案:检查本地计算机和远程服务器之间设备上的端口
若要解决此问题,应首先联系管理员或服务提供商,查明哪些设备已被阻止。 之后,请确保该设备的防火墙允许通过 UDP 500 和 4500 端口。 如果这无法解决问题,请检查本地计算机和远程服务器之间每台设备上的防火墙。
错误 812:无法连接到 Always On VPN
当远程访问服务器 (RAS) 或 VPN 服务器无法连接到 AlwaysOn VPN 时,会出现此问题。 服务器用于验证用户名和密码的身份验证方法与连接配置文件中配置的身份验证方法不匹配。
每当遇到错误 812 时,建议立即联系 RAS 服务器管理员,让他们知道发生了什么。
如果使用事件查看器进行故障排除,则可以发现此问题标记为事件日志 20276。 当基于路由和远程访问 (RRAS) 的 VPN 服务器身份验证协议设置与 VPN 客户端计算机上的设置不匹配时,通常会显示此事件。
错误 809 原因
当 NPS 指定了客户端无法满足的身份验证条件时,通常就会遇到此错误。 例如,如果 NPS 指定它需要证书来保护受保护的可扩展身份验证协议 (PEAP) 连接,则客户端尝试改用 EAP-MSCHAPv2 时无法进行身份验证。
解决方案:检查客户端和 NPS 服务器身份验证设置
若要解决此问题,请确保客户端和 NPS 服务器的身份验证要求匹配。 否则,请做出相应的更改。
错误 13806:IKE 找不到有效的计算机证书
当 IKE 找不到有效的计算机证书时,会出现此问题。
错误 13806 原因
当 VPN 服务器没有所需的计算机或根计算机证书时,通常会遇到此错误。
解决方案:在相关证书存储中安装有效的证书
若要解决此问题,请确保在客户端计算机和 VPN 服务器上都安装了所需的证书。 否则,请联系网络安全管理员,并要求他们在相关证书存储中安装有效的证书。
错误 13801:IKE 身份验证凭据无效
当服务器或客户端无法接受 IKE 身份验证凭据时,会遇到此问题。
错误 13801 原因
此错误可能由以下原因导致:
- RAS 服务器上用于 IKEv2 验证的计算机证书在增强型密钥用法下没有启用服务器身份验证。
- RAS 服务器上的计算机证书已过期。
- 客户端计算机没有用于验证 RAS 服务器证书的根证书。
- 客户端计算机上使用的 VPN 服务器名称与服务器证书的 subjectName 值不匹配。
解决方案 1:验证服务器证书设置
如果问题是 RAS 服务器计算机证书,请确保证书在增强密钥使用下包括服务器身份验证。
解决方案 2:确保计算机证书仍然有效
如果问题在于 RAS 计算机证书已过期,请确保该证书仍然有效。 如果已经无效,请安装有效的证书。
解决方案 3:确保客户端计算机具有根证书
如果问题与客户端计算机没有根证书有关,请先检查 RRAS 服务器上的受信任的根证书颁发机构,以确保正在使用的证书颁发机构正常显示。 如果未显示,请安装有效的根证书。
解决方案 4:使客户端计算机的 VPN 服务器名称与服务器证书匹配
首先,请确保 VPN 客户端使用 VPN 服务器证书使用的同一完全限定域名 (FQDN) 进行连接。 如果不是,请更改客户端名称以匹配服务器证书名称。
错误 0x80070040:服务器证书的使用条目中没有服务器身份验证
当服务器证书没有将服务器身份验证作为其证书使用条目之一时,就会发生此问题。
错误 0x80070040 原因
当 RAS 服务器上未安装服务器身份验证证书时,就会发生此错误。
解决方案:确保计算机证书具有所需的证书使用条目
若要解决此问题,请确保 RAS 服务器用于 IKEv2 验证的计算机证书将服务器身份验证作为其证书使用条目之一。
错误 0x800B0109:在根证书中处理过但已终止的证书链
完整的错误说明是:“在信任提供程序不信任的根证书中处理但终止了证书链。
通常,VPN 客户端计算机已加入基于 Active Directory (AD) 的域。 如果使用域凭据登录到 VPN 服务器,则服务会将证书自动安装在受信任的根证书颁发机构存储中。 如果计算机未加入 AD 域,或者你使用备用证书链,则可能会遇到此问题。
错误 0x800B0109 原因
如果客户端计算机上的受信任根证书颁发机构存储中未安装相应的受信任根 CA 证书,则可能会遇到此错误。
解决方案:安装受信任的根证书
若要解决此问题,请确保客户端计算机在其受信任的根证书颁发机构存储中安装了受信任的根证书。 如果未安装,请安装适当的根证书。
错误:抱歉,您现在还无法执行此操作
此错误消息与 Microsoft Entra 条件访问连接问题相关联。 当发生此问题时,条件访问策略未得到满足,从而阻止 VPN 连接,但在用户关闭对话框窗口后又会连接。 如果用户选择确定,则会启动另一次身份验证尝试,该尝试也未成功,并提示相同的错误消息。 客户端Microsoft Entra Operational 事件日志记录这些事件。
Microsoft Entra 条件访问错误原因
出现此问题的原因有以下几个:
用户在其个人证书存储中具有客户端身份验证证书,该证书有效但不是来自 Microsoft Entra ID。
VPN 配置文件
<TLSExtensions>
部分缺失或不包含<EKUName>AAD Conditional Access</EKUName><EKUOID>1.3.6.1.4.1.311.87</EKUOID><EKUName>AAD Conditional Access</EKUName><EKUOID>1.3.6.1.4.1.311.87</EKUOID>
条目。<EKUName>
和<EKUOID>
条目告诉 VPN 客户端在将证书传递到 VPN 服务器时要从用户的证书存储中检索哪个证书。 如果没有<EKUName>
和<EKUOID>
条目,VPN 客户端将使用用户证书存储中的任何有效客户端身份验证证书,并且身份验证成功。RADIUS 服务器 (NPS) 尚未配置为仅接受包含 AAD 条件访问对象标识符 (OID) 的客户端证书。
解决方案:使用 PowerShell 确定证书状态
若要转义此循环,请使用以下代码:
在 Windows PowerShell 中,运行
Get-WmiObject
cmdlet 以转储 VPN 配置文件配置。验证
<TLSExtensions>
、<EKUName>
和<EKUOID>
变量是否存在,且它们的输出显示正确的名称和 OID。以下代码是 cmdlet 的示例
Get-WmiObject
输出。PS C:\> Get-WmiObject -Class MDM_VPNv2_01 -Namespace root\cimv2\mdm\dmmap __GENUS : 2 __CLASS : MDM_VPNv2_01 __SUPERCLASS : __DYNASTY : MDM_VPNv2_01 __RELPATH : MDM_VPNv2_01.InstanceID="AlwaysOnVPN",ParentID="./Vendor/MSFT/VPNv2" __PROPERTY_COUNT : 10 __DERIVATION : {} __SERVER : DERS2 __NAMESPACE : root\cimv2\mdm\dmmap __PATH : \\DERS2\root\cimv2\mdm\dmmap:MDM_VPNv2_01.InstanceID="AlwaysOnVPN",ParentID="./Vendor/MSFT/VP Nv2" AlwaysOn : ByPassForLocal : DnsSuffix : EdpModeId : InstanceID : AlwaysOnVPN LockDown : ParentID : ./Vendor/MSFT/VPNv2 ProfileXML : <VPNProfile><RememberCredentials>false</RememberCredentials><DeviceCompliance><Enabled>true</ Enabled><Sso><Enabled>true</Enabled></Sso></DeviceCompliance><NativeProfile><Servers>derras2.corp.deverett.info;derras2.corp.deverett.info</Servers><RoutingPolicyType>ForceTunnel</RoutingPolicyType><NativeProtocolType>Ikev2</NativeProtocolType><Authentication><UserMethod>Eap</UserMethod><MachineMethod>Eap</MachineMethod><Eap><Configuration><EapHostConfigxmlns="https://www.microsoft.com/provisioning/EapHostConfig"><EapMethod><Typexmlns="https://www.microsoft.com/provisioning/EapCommon">25</Type><VendorIdxmlns="https://www.microsoft.com/provisioning/EapCommon">0</VendorId><VendorTypexmlns="https://www.microsoft.com/provisioning/EapCommon">0</VendorType><AuthorIdxmlns="https://www.microsoft.com/provisioning/EapCommon">0</AuthorId></EapMethod><Configxmlns="https://www.microsoft.com/provisioning/EapHostConfig"><Eap xmlns="https://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1"><Type>25</Type><EapType xmlns="https://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV1"><ServerValidation><DisableUserPromptForServerValidation>true</DisableUserPromptForServerValidation><ServerNames></ServerNames></ServerValidation><FastReconnect>true</FastReconnect><InnerEapOptional>false</InnerEapOptional><Eap xmlns="https://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1"><Type>13</Type> <EapType xmlns="https://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV1"><CredentialsSource><CertificateStore><SimpleCertSelection>true</SimpleCertSelection></CertificateStore></CredentialsSource><ServerValidation><DisableUserPromptForServerValidation>true</DisableUserPromptForServerValidation><ServerNames></ServerNames><TrustedRootCA>5a 89 fe cb 5b 49 a7 0b 1a 52 63 b7 35 ee d7 1c c2 68 be 4b </TrustedRootCA></ServerValidation><DifferentUsername>false</DifferentUsername><PerformServerValidation xmlns="https://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV2">true</PerformServerValidation><AcceptServerName xmlns="https://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV2">false</AcceptServerName><TLSExtensionsxmlns="https://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV2"><FilteringInfo xml ns="https://www.microsoft.com/provisioning/EapTlsConnectionPropertiesV3"><EKUMapping><EKUMap><EKUName>AAD Conditional Access</EKUName><EKUOID>1.3.6.1.4.1.311.87</EKUOID></EKUMap></EKUMapping><ClientAuthEKUListEnabled="true"><EKUMapInList><EKUName>AAD Conditional Access</EKUName></EKUMapInList></ClientAuthEKUList></FilteringInfo></TLSExtensions></EapType></Eap><EnableQuarantineChecks>false</EnableQuarantineChecks><RequireCryptoBinding>false</RequireCryptoBinding><PeapExtensions><PerformServerValidation xmlns="https://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2">false</PerformServerValidation><AcceptServerName xmlns="https://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2">false</AcceptServerName></PeapExtensions></EapType></Eap></Config></EapHostConfig></Configuration></Eap></Authentication></NativeProfile></VPNProfile> RememberCredentials : False TrustedNetworkDetection : PSComputerName : DERS2
若要确定用户的证书存储中是否有有效的证书,请运行
Certutil
命令:C:\>certutil -store -user My My "Personal" ================ Certificate 0 ================ Serial Number: 32000000265259d0069fa6f205000000000026 Issuer: CN=corp-DEDC0-CA, DC=corp, DC=deverett, DC=info NotBefore: 12/8/2017 8:07 PM NotAfter: 12/8/2018 8:07 PM Subject: E=winfed@deverett.info, CN=WinFed, OU=Users, OU=Corp, DC=corp, DC=deverett, DC=info Certificate Template Name (Certificate Type): User Non-root Certificate Template: User Cert Hash(sha1): a50337ab015d5612b7dc4c1e759d201e74cc2a93 Key Container = a890fd7fbbfc072f8fe045e680c501cf_5834bfa9-1c4a-44a8-a128-c2267f712336 Simple container name: te-User-c7bcc4bd-0498-4411-af44-da2257f54387 Provider = Microsoft Enhanced Cryptographic Provider v1.0 Encryption test passed ================ Certificate 1 ================ Serial Number: 367fbdd7e6e4103dec9b91f93959ac56 Issuer: CN=Microsoft VPN root CA gen 1 NotBefore: 12/8/2017 6:24 PM NotAfter: 12/8/2017 7:29 PM Subject: CN=WinFed@deverett.info Non-root Certificate Cert Hash(sha1): 37378a1b06dcef1b4d4753f7d21e4f20b18fbfec Key Container = 31685cae-af6f-48fb-ac37-845c69b4c097 Unique container name: bf4097e20d4480b8d6ebc139c9360f02_5834bfa9-1c4a-44a8-a128-c2267f712336 Provider = Microsoft Software Key Storage Provider Private key is NOT exportable Encryption test passed
注意
如果用户的个人存储中存在来自颁发者“CN=Microsoft VPN root CA gen 1”的证书,但用户选择 X 关闭错误消息后获得了访问权限,在这种情况下,请收集 CAPI2 事件日志,以确认用于进行身份验证的证书是有效的客户端身份验证证书但并不是由 Microsoft VPN 根 CA 颁发。
如果用户的个人存储中存在有效的客户端身份验证证书,并且
TLSExtensions
EKUName
正确配置了EKUOID
值,则用户关闭对话框后,不应成功连接。
应会显示一条错误消息,指出“找不到能够与可扩展身份验证协议一起使用的证书”。
无法从“VPN 连接”选项卡中删除证书
当在 VPN 连接选项卡上无法删除证书时,就会出现此问题。
原因
当证书设置为主时,会出现此问题。
解决方案:更改证书设置
若要删除证书:
- 在 VPN 连接选项卡中,选择证书。
- 在“主要”下,选择“否”,然后选择“保存”。
- 在 VPN 连接选项卡中,再次选择证书。
- 选择删除。