本文提供詳細的故障排除步驟,用于為基于 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 的“設置”>“終結點”來檢查經典虛擬機的此端口。
預備步驟
在繼續進行詳細故障排除前,
在 Azure 門戶中檢查虛擬機的狀態,查看是否存在任何明顯問題。
按照基本故障排除指南中常見 RDP 錯誤的快速修復步驟進行操作。
在執行這些步驟后,嘗試通過遠程桌面重新連接到 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 訂閱名稱、云服務名稱和虛擬機名稱(刪除 < 和 > 字符),然后運行這些命令。
PowerShell復制
$subscr=""$serviceName=""$vmName="".\InstallWinRMCertAzureVM.ps1-SubscriptionName$subscr-ServiceName$serviceName-Name$vmName
可以從Get-AzureSubscription命令顯示的SubscriptionName屬性獲取正確的訂閱名稱。 可以從Get-AzureVM命令顯示的ServiceName列中獲取虛擬機的云服務名稱。
檢查是否有新的證書。 打開當前用戶的“證書”管理單元,然后在“受信任的根證書頒發機構\證書”文件夾中查找。 應會看到在“頒發給”列中具有你的云服務的 DNS 名稱的證書(示例:cloudservice4testing.chinacloudapp.cn)。
接下來,使用以下命令啟動遠程 Azure PowerShell 會話。
PowerShell復制
$uri=Get-AzureWinRMUri-ServiceName$serviceName-Name$vmName$creds=Get-CredentialEnter-PSSession-ConnectionUri$uri-Credential$creds
輸入有效的管理員憑據后,應顯示類似以下 Azure PowerShell 提示符的信息:
PowerShell復制
[cloudservice4testing.chinacloudapp.cn]: PS C:\Users\User1\Documents>
此提示的第一部分是包含目標 VM 的云服務名稱,可能與于“cloudservice4testing.chinacloudapp.cn”不同。 現在,可對此云服務發出 Azure PowerShell 命令來調查上述問題并更正配置。
手動更正遠程桌面服務偵聽 TCP 端口
出現遠程 Azure PowerShell 會話提示時,運行此命令。
PowerShell復制
Get-ItemProperty-Path"HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"-Name"PortNumber"
PortNumber 屬性顯示當前端口號。 如果需要,可使用此命令將遠程桌面端口號更改回其默認值 (3389)。
PowerShell復制
Set-ItemProperty-Path"HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"-Name"PortNumber"-Value3389
使用此命令驗證是否已將端口更改為 3389。
PowerShell復制
Get-ItemProperty-Path"HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"-Name"PortNumber"
使用此命令退出遠程 Azure PowerShell 會話。
PowerShell復制
Exit-PSSession
驗證 Azure VM 的遠程桌面終結點是否也使用 TCP 端口 3398 作為其內部端口。 重啟 Azure VM,并重新嘗試遠程桌面連接。
其他資源
對于基于 Linux 的 Azure 虛擬機的 Secure Shell (SSH) 連接進行故障排除
立即訪問http://market.azure.cn