排查 AlwaysOn VPN 问题

本文提供有关验证和排查 Always On VPN 部署问题的说明。

如果 AlwaysOn 虚拟专用网络 (VPN) 设置未将客户端连接到内部网络,则可能遇到以下问题之一:

  • VPN 证书无效。
  • 网络策略服务器 (NPS) 策略不正确。
  • 客户端部署脚本或路由和远程访问问题。

排查和测试 VPN 连接的第一步是了解 AlwaysOn VPN 基础结构的核心组件。

可以通过多种方式排查连接问题。 对于客户端问题和常规故障排除,客户端计算机上的应用程序日志非常宝贵。 对于特定于身份验证的问题,位于 NPS 服务器上的 NPS 日志可以帮助你确定问题的根源。

AlwaysOn VPN 连接问题的常规故障排除

在建立连接之前,AlwaysOn VPN 客户端需要执行几个步骤。 因此,有几个地方可能会阻止连接,有时很难弄清楚问题所在。

如果遇到问题,可以采取以下一些常规步骤来了解所发生的情况:

  • 运行 whatismyip 扫描,确保模板计算机未在外部连接。 如果计算机具有不属于你的公共 IP 地址,则应将 IP 更改为专用 IP。
  • 转到 “控制面板>网络Internet>网络连接”,打开 VPN 配置文件的属性,并检查以确保“ 常规 ”选项卡中的值可以通过 DNS 公开解析。 否则,远程访问服务器或 VPN 服务器无法解析为 IP 地址可能是导致问题的原因。
  • 打开 INTERNET 控制消息协议 (ICMP) 到外部接口,并从远程客户端 ping VPN 服务器。 如果 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 的事件。 所有错误消息都返回消息末尾的错误代码。 错误代码 列出了一些与 Always On VPN 相关的更常见的错误代码。 有关错误代码的完整列表,请参阅 路由和远程访问错误代码

NPS 日志

NPS 创建并存储 NPS 记帐日志。 默认情况下,日志存储在 %SYSTEMROOT%\System32\Logfiles\ 中,该文件名为 IN<的日志创建> 日期.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 类型设置为该特定隧道类型。
  • 确保用户数据报协议上的 Internet 密钥交换 (IKE) 端口 (UDP) 端口 500 和 4500 未阻止。
  • 确保客户端和服务器都具有正确的 IKE 证书。

错误 809:无法在本地计算机和 VPN 服务器之间建立连接

在此问题中,远程服务器不会响应,这会导致本地计算机和 VPN 服务器无法连接。 这可能是因为计算机和远程服务器之间的一个或多个网络设备(例如路由器、防火墙或网络地址转换 (NAT) 未配置为允许 VPN 连接)。 请与管理员或服务提供商联系,以确定哪个设备可能导致问题。

错误 809 原因

当 VPN 服务器或防火墙上的 UDP 500 或 4500 端口被阻止时,可能会遇到此问题。 如果计算机与远程服务器之间的某个网络设备(例如防火墙、NAT 或路由器)未正确配置,可能会发生阻止。

解决方案:检查本地计算机和远程服务器之间的设备上的端口

若要解决此问题,应首先联系管理员或服务提供商,了解阻止了哪些设备。 之后,请确保该设备的防火墙允许 UDP 500 和 4500 端口通过。 如果这不能解决问题,请检查本地计算机和远程服务器之间的每台设备上的防火墙。

错误 812:无法连接到 AlwaysOn VPN

当远程访问服务器 (RAS) 或 VPN 服务器无法连接到 AlwaysOn VPN 时,会出现此问题。 服务器用于验证用户名和密码的身份验证方法与连接配置文件中配置的身份验证方法不匹配。

每当遇到错误 812 时,我们建议你立即联系 RAS 服务器管理员,让他们知道发生了什么情况。

如果使用事件查看器进行故障排除,则可以找到标记为事件日志 20276 的问题。 当路由和远程访问 (基于 RRAS) 的 VPN 服务器身份验证协议设置与 VPN 客户端计算机上的设置不匹配时,通常会出现此事件。

错误 812 原因

当 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 操作事件日志记录这些事件。

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 客户端将使用用户证书存储中任何有效的客户端身份验证证书,身份验证会成功。

  • (NPS) 的 RADIUS 服务器尚未配置为仅接受包含 AAD 条件访问 对象标识符 (OID) 的客户端证书。

解决方案:使用 PowerShell 确定证书状态

若要转义此循环::

  1. 在 Windows PowerShell 中 Get-WmiObject ,运行 cmdlet 以转储 VPN 配置文件配置。

  2. 验证 <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
    
  3. 接下来,运行 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 根 CA Gen 1 的证书,但用户通过选择 X 关闭 Oops 消息获得了访问权限,请收集 CAPI2 事件日志以验证用于进行身份验证的证书是否不是从 Microsoft VPN 根 CA 颁发的有效客户端身份验证证书。

  4. 如果用户的个人存储中存在有效的客户端身份验证证书,并且 TLSExtensionsEKUName、 和 EKUOID 值配置正确,则用户关闭对话框后,连接不应成功。

应显示一条错误消息,指出“找不到可与可扩展身份验证协议一起使用的证书。

无法从“VPN 连接”选项卡删除证书

当无法在“VPN 连接”选项卡上删除证书时,会出现此问题。

原因

当证书设置为“ 主要”时,会出现此问题。

解决方案:更改证书设置

删除证书:

  1. “VPN 连接 ”选项卡中,选择证书。
  2. 在“ 主要”下,选择“ ”,然后选择“ 保存”。
  3. “VPN 连接 ”选项卡中,再次选择证书。
  4. 选择“删除”。