详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题

本文提供详细的故障排除步骤,用于为基于 Windows 的 Azure 虚拟机诊断和修复复杂的远程桌面错误。

Important

若要消除更常见的远程桌面错误,请务必先阅读远程桌面的基本故障排除文章,然后再继续。

你可能遇到不像基本远程桌面故障排除指南中所述的任何特定错误消息的远程桌面错误消息。 请遵循以下步骤来确定远程桌面 (RDP) 客户端为何无法连接到 Azure VM 上的 RDP 服务。

Note

Azure 具有用于创建和处理资源的两个不同的部署模型:Resource Manager 和经典。 这篇文章介绍了如何使用这两种模型,但 Azure 建议大多数最新部署使用 Resource Manager 模型。

如果对本文中的任何观点存在疑问,可以联系 MSDN Azure 和 CSDN Azure 上的 Azure 专家。 或者,也可以提出 Azure 支持事件。 请转到 Azure 支持站点并单击“获取支持”。 有关使用 Azure 支持的信息,请阅读 Azure 支持常见问题解答

远程桌面连接的组件

以下是 RDP 连接所涉及的组件:

继续前,可能会有助于回想自上次远程桌面成功连接到 VM 后发生的变化。 例如:

  • VM 或包含 VM 的云服务的公共 IP 地址(也称为虚拟 IP 地址 (VIP))已更改。 RDP 失败的原因可能是 DNS 客户端缓存仍使用旧的 IP 地址 注册 DNS 名称。 请刷新 DNS 客户端缓存,并尝试重新连接 VM。 或者,尝试直接使用新 VIP 进行连接。
  • 使用第三方应用程序来管理远程桌面连接,而不是使用 Azure 门户所生成的连接。 验证应用程序配置是否包含适用于远程桌面流量的 TCP 端口。 可以通过在 Azure 门户中单击 VM 的“设置”>“终结点”来检查经典虚拟机的此端口。

预备步骤

在继续进行详细故障排除前,

在执行这些步骤后,尝试通过远程桌面重新连接到 VM。

详细故障排除步骤

由于以下源出现问题,远程桌面客户端可能无法访问 Azure VM 上的远程桌面服务:

来源 1:远程桌面客户端计算机

验证计算机是否可以与本地另一台基于 Windows 的计算机建立远程桌面连接。

如果不能,请检查计算机上的以下设置:

  • 阻止远程桌面流量的本地防火墙设置。
  • 阻止远程桌面连接的本地安装的客户端代理软件。
  • 阻止远程桌面连接的本地安装的网络监视软件。
  • 阻止远程桌面连接的其他类型的安全软件,该软件监视流量或允许/禁止特定类型的流量。

针对上述所有情况,请暂时禁用可疑软件,并尝试通过远程桌面连接到本地计算机。 如果可以通过这种方式找出实际原因,请与网络管理员合作更正软件设置,以允许远程桌面连接。

来源 2:组织 Intranet 边缘设备

验证直接连接到 Internet 的计算机是否可以与 Azure 虚拟机建立远程桌面连接。

如果没有直接连接到 Internet 的计算机,则可以在资源组或云服务中创建新的 Azure 虚拟机并使用它进行测试。 有关详细信息,请参阅在 Azure 中创建运行 Windows 的虚拟机。 在测试后,可以删除该虚拟机和资源组或云服务。

如果可以与直接连接到 Internet 的计算机建立远程桌面连接,检查组织的 Intranet 边缘设备中是否有以下问题:

  • 内部防火墙阻止 HTTPS 连接到 Internet。
  • 代理服务器阻止远程桌面连接。
  • 边缘网络设备上运行的入侵检测或网络监视软件阻止远程桌面连接。

与网络管理员合作更正组织 Intranet 边缘设备的设置,以允许与 Internet 建立基于 HTTPS 的远程桌面连接。

来源 3:云服务终结点和 ACL

对于使用经典部署模型创建的 VM,验证同一云服务或虚拟网络中的其他 Azure VM 能否与 Azure VM 建立远程桌面连接。

Note

对于在 Resource Manager 中创建的虚拟机,请跳转到 来源 4:网络安全组

如果同一云服务或虚拟网络中没有其他虚拟机,可自行创建。 遵循在 Azure 中创建运行 Windows 的虚拟机中所述的步骤。 测试完成后,删除测试虚拟机。

如果可以通过远程桌面连接到同一云服务或虚拟网络中的虚拟机,请检查以下设置:

  • 目标 VM 上远程桌面通信的终结点配置:终结点的专用 TCP 端口必须与 VM 的远程桌面服务正在侦听的 TCP 端口(默认值为 3389)匹配。
  • 目标 VM 上远程桌面通信终结点的 ACL:ACL 可根据源 IP 地址,指定允许或拒绝从 Internet 传入的流量。 错误配置 ACL 可能会阻止传入远程桌面流量到达终结点。 检查 ACL 以确保允许从代理服务器或其他边缘服务器的公共 IP 地址传入的流量。 有关详细信息,请参阅什么是网络访问控制列表 (ACL)?

要检查终结点是否是问题的源,删除当前终结点,创建新终结点,并选择范围 49152-65535 中的随机端口作为外部端口号。 有关详细信息,请参阅如何对虚拟机设置终结点

来源 4:网络安全组

使用网络安全组可以对允许的入站和出站流量进行更好的控制。 可以创建跨 Azure 虚拟网络中的子网和云服务的规则。

可以查看生效的安全组规则,确保入站“允许”NSG 规则存在并已针对 RDP 端口(默认为 3389)设置优先级。 有关详细信息,请参阅使用有效的安全规则排查 VM 流量流问题

来源 5:基于 Windows 的 Azure VM

请按此文说明执行操作。 本文会重置虚拟机上的远程桌面服务:

  • 启用“远程桌面”Windows 防火墙默认规则(TCP 端口 3389)。
  • 通过将 HKLM\System\CurrentControlSet\Control\Terminal Server\fDenyTSConnections 注册表值设置为 0,启用远程桌面连接。

尝试从计算机重新连接。 如果仍无法通过远程桌面连接,请检查是否存在以下可能问题:

  • 远程桌面服务未在目标 VM 上运行。
  • 远程桌面服务未在 TCP 端口 3389 上侦听。
  • Windows 防火墙或其他本地防火墙使用阻止远程桌面通信的出站规则。
  • Azure 虚拟机上运行的入侵检测或网络监视软件阻止远程桌面连接。

对于使用经典部署模型创建的 VM,可以使用与 Azure 虚拟机的远程 Azure PowerShell 会话。 首先,需要安装虚拟机托管云服务的证书。 转到为 Azure 虚拟机配置安全远程 PowerShell 访问,并将 InstallWinRMCertAzureVM.ps1 脚本文件下载到本地计算机。

接下来,安装 Azure PowerShell(如果尚未安装)。 请参阅如何安装和配置 Azure PowerShell

接下来,打开 Azure PowerShell 命令提示符,并将当前文件夹更改为 InstallWinRMCertAzureVM.ps1 脚本文件所在的位置。 若要运行 Azure PowerShell 脚本,必须设置正确的执行策略。 运行 Get-ExecutionPolicy 命令,以确定当前的策略级别。 有关设置相应级别的信息,请参阅 Set-ExecutionPolicy

接下来,填写你的 Azure 订阅名称、云服务名称和虚拟机名称(删除 < 和 > 字符),然后运行这些命令。

$subscr="<Name of your Azure subscription>"
$serviceName="<Name of the cloud service that contains the target virtual machine>"
$vmName="<Name of the target virtual machine>"
.\InstallWinRMCertAzureVM.ps1 -SubscriptionName $subscr -ServiceName $serviceName -Name $vmName

可以从 Get-AzureSubscription 命令显示的 SubscriptionName 属性获取正确的订阅名称。 可以从 Get-AzureVM 命令显示的 ServiceName 列中获取虚拟机的云服务名称。

检查是否有新的证书。 打开当前用户的“证书”管理单元,然后在“受信任的根证书颁发机构\证书”文件夹中查找。 应会看到在“颁发给”列中具有你的云服务的 DNS 名称的证书(示例:cloudservice4testing.chinacloudapp.cn)。

接下来,使用以下命令启动远程 Azure PowerShell 会话。

$uri = Get-AzureWinRMUri -ServiceName $serviceName -Name $vmName
$creds = Get-Credential
Enter-PSSession -ConnectionUri $uri -Credential $creds

输入有效的管理员凭据后,应显示类似以下 Azure PowerShell 提示符的信息:

[cloudservice4testing.chinacloudapp.cn]: PS C:\Users\User1\Documents>

此提示的第一部分是包含目标 VM 的云服务名称,可能与于“cloudservice4testing.chinacloudapp.cn”不同。 现在,可对此云服务发出 Azure PowerShell 命令来调查上述问题并更正配置。

手动更正远程桌面服务侦听 TCP 端口

出现远程 Azure PowerShell 会话提示时,运行此命令。

Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber"

PortNumber 属性显示当前端口号。 如果需要,可使用此命令将远程桌面端口号更改回其默认值 (3389)。

Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber" -Value 3389

使用此命令验证是否已将端口更改为 3389。

Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber"

使用此命令退出远程 Azure PowerShell 会话。

Exit-PSSession

验证 Azure VM 的远程桌面终结点是否也使用 TCP 端口 3398 作为其内部端口。 重启 Azure VM,并重新尝试远程桌面连接。

其他资源

如何为 Windows 虚拟机重置密码或远程桌面服务

如何安装和配置 Azure PowerShell

对于基于 Linux 的 Azure 虚拟机的 Secure Shell (SSH) 连接进行故障排除

对在 Azure 虚拟机上运行的应用程序的访问进行故障排除