培训
模块
Explore support and diagnostic tools - Training
This module introduces the tools for troubleshooting the Windows client operating system and provides guidance on how to use them.
在远程过程调用(RPC)会话期间或使用各种Microsoft管理控制台(MMC)管理单元时,连接到 Windows Management Instrumentation(WMI)或Microsoft SQL Server 时,可能会遇到“RPC 服务器不可用”错误。下图显示了 RPC 错误的示例。
这是一个常见的网络错误,需要一些基本的熟悉过程才能成功进行故障排除。 首先,需要了解几个重要的术语:
备注
端口号通常是用于故障排除的最重要信息。
下图显示了连接到服务器以运行远程操作的客户端。 客户端最初在服务器上联系 TCP 端口 135,然后与 EPM 协商动态端口号。 EPM 分配端口后,客户端会断开连接,然后使用动态端口连接到服务器。
重要
如果防火墙将客户端和服务器分开,防火墙必须允许在端口 135 和 EPM 分配的动态端口上进行通信。 管理此方案的一种方法是指定要使用的 EPM 的端口或端口范围。 有关详细信息,请参阅 配置 RPC 如何分配动态端口。
某些防火墙还允许 UUID 筛选。 在此方案中,如果 RPC 请求使用端口 135 跨越防火墙并联系 EPM,则防火墙会记下与请求关联的 UUID。 当 EPM 响应并发送该 UUID 的动态端口号时,防火墙还会记下端口号。 然后,防火墙允许针对该 UUID 和端口执行 RPC 绑定操作。
默认情况下,EPM 从为 TCP 和 UDP 配置的范围随机分配动态端口(基于使用的操作系统的实现)。 但是,这种方法可能并不可行,尤其是在客户端和服务器必须通过防火墙通信的情况下。 另一种方法是指定要使用的 EPM 的端口号或端口号范围,并在防火墙中打开这些端口。
许多依赖于 RPC 的 Windows 服务器应用程序提供选项(如注册表项)来自定义允许的端口。 Windows 服务对此任务使用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet 子项。
指定端口或端口范围时,请使用超出常用端口范围的端口。 可以在服务概述和 Windows 的网络端口要求中找到 Windows 中使用的服务器端口和主要Microsoft产品的完整列表。 本文还列出了 RPC 服务器应用程序,并提到哪些 RPC 服务器应用程序可配置为使用 RPC 运行时功能之外的自定义服务器端口。
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。
默认情况下, Internet 密钥不存在。 因此,必须创建它。 对于 Internet 密钥,可以配置以下条目:
端口REG_MULTI_SZ:指定端口或非独占端口范围。 Internet 下显示的其他条目指示这些条目是要使用的端口,还是要从使用中排除的端口。
PortsInternetAvailable REG_SZ:指定端口值是否表示要包含的端口或要排除的端口。
UseInternetPorts REG_SZ:指定默认系统策略。
应打开大于端口 5000 的端口范围。 小于 5000 的端口号可能已被其他应用程序使用,它们可能会导致与 DCOM 应用程序冲突。 此外,以前的体验表明至少应打开 100 个端口。 这是因为多个系统服务依赖于这些 RPC 端口相互通信。
备注
所需的最小端口数可能与计算机不同。 如果 RPC 动态端口受到限制,支持更多流量的计算机可能会遇到端口耗尽。 如果限制端口范围,请考虑这一点。
警告
如果在端口配置中出错,或者池中没有足够的端口,EPM 将无法注册使用动态终结点的 RPC 服务器应用程序(包括 Windows 服务(例如 Netlogon)。 如果发生配置错误,错误代码为 87 (0x57) ERROR_INVALID_PARAMETER。 例如,如果没有足够的端口,Netlogon 会记录事件 5820:
日志名称: 系统
来源:NETLOGON
事件 ID:5820
级别:错误
关键字:经典
说明:
Netlogon 服务无法添加 AuthZ RPC 接口。 服务已终止。 发生以下错误:“参数不正确。
有关 RPC 工作原理的详细信息,请参阅 通过 IT/Pro 的 RPC。
在此示例中,任意选择端口 5000 到 6000(含),以帮助说明如何配置新的注册表项。 此示例不是任何特定系统所需的最小端口数的建议。 此类配置需要在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc 下添加 Internet 密钥,并添加以下条目:
计算机必须重启才能使此配置生效。 之后,使用 RPC 的所有应用程序都分配了 5000 到 6000 范围内的动态端口(含)。
在深入探讨网络跟踪数据之前,PortQry 可以快速了解 RPC 的工作原理。 可以通过在客户端计算机上运行以下命令快速确定是否可以建立连接:
Portqry.exe -n <ServerIP> -e 135
备注
在此命令中, <ServerIP> 表示要联系的服务器 IP 地址。
例如,请考虑以下命令:
Portqry.exe -n 10.10.10.10 -e 135
此命令生成类似于以下摘录的输出:
Querying target system called:
10.10.10.10
Attempting to resolve IP address to a name...
IP address resolved to RPCServer.contoso.com
querying...
TCP port 135 (epmap service): LISTENING
Using ephemeral source port
Querying Endpoint Mapper Database...
Server's response:
UUID: d95afe70-a6d5-4259-822e-2c84da1ddb0d
ncacn_ip_tcp:10.10.10.10[49664]
通过检查此输出,可以确定以下信息:
如果这些步骤中的任何一个都失败,通常可以开始收集同时的网络跟踪,如下一部分所述。
有关 PortQry 的详细信息,请参阅 使用 PortQry 命令行工具。
可以使用 Windows netsh 工具在客户端和服务器上同时收集网络跟踪数据。
若要收集同时的网络跟踪,请在客户端和服务器上打开提升的命令提示符窗口。
在客户端上运行以下命令:
Netsh trace start scenario=netconnection capture=yes tracefile=c:\client_nettrace.etl maxsize=512 overwrite=yes report=yes
在服务器上运行以下命令:
Netsh trace start scenario=netconnection capture=yes tracefile=c:\server_nettrace.etl maxsize=512 overwrite=yes report=yes
现在,请尝试在客户端计算机上重现问题。 然后,在两个窗口中的命令提示符处运行以下命令以停止跟踪:
Netsh trace stop
在Microsoft网络监视器 3.4 或消息分析器中打开跟踪文件,并筛选服务器或客户端计算机和 TCP 端口 135 的 IP 地址的跟踪数据。 例如,使用筛选器字符串,例如:
Ipv4.address==<client-ip> and ipv4.address==<server-ip> and tcp.port==135
在此筛选器字符串中, <client-ip> 表示客户端的 IP 地址, <服务器 IP> 表示服务器的 IP 地址。
tcp.port==135
在筛选的数据中,在“协议”列中查找 EPM 条目。
查找 EPM(在服务器上)包含动态端口号的响应。 如果存在动态端口号,请记下它以供将来参考。
重新生成动态端口号和服务器 IP 地址的跟踪数据。 例如,使用筛选器字符串,例如 tcp.port==<dynamic-port-allocated> 和 ipv4.address==<server-ip。> 在此筛选器字符串中,<动态端口分配>表示动态端口号,<服务器 IP> 表示服务器的 IP 地址。
在筛选的数据中,查找客户端成功连接到动态端口的证据,或查找可能出现的任何网络问题。
“RPC 服务器不可用”错误的最常见原因是客户端无法连接到已分配的动态端口。 然后,客户端跟踪会显示动态端口的 TCP SYN 重新传输。
此行为指示以下条件之一正在阻止通信:
在联系Microsoft支持人员之前,建议收集有关问题的信息。
这些过程使用 TroubleShootingScript (TSS) 工具集。 若要使用此工具集,应注意以下先决条件:
你必须对本地计算机具有管理员级权限。
首次运行工具集时,必须接受 EULA。
确保将计算机的 Windows PowerShell 脚本执行策略设置为 RemoteSigned
。 有关 PowerShell 执行策略的详细信息,请参阅 about_Execution_Policies。
备注
如果环境阻止在计算机级别使用 RemoteSigned
,则可以在进程级别临时设置它。 为此,请在提升的 Powershell 命令提示符窗口中运行以下 cmdlet,然后再启动该工具:
PS C:\> Set-ExecutionPolicy -scope Process -ExecutionPolicy RemoteSigned
若要验证更改是否生效,请运行 PS C:\> Get-ExecutionPolicy -List
cmdlet。
进程级权限仅适用于当前的 PowerShell 会话。 关闭 PowerShell 窗口后,执行策略将还原为原始设置。
培训
模块
Explore support and diagnostic tools - Training
This module introduces the tools for troubleshooting the Windows client operating system and provides guidance on how to use them.