Compartir a través de


Se produce un error interno al intentar conectarse a una máquina virtual de Azure a través de Escritorio remoto

En este artículo se describe un error que puede experimentar al intentar conectarse a una máquina virtual (VM) en Microsoft Azure.

Nota:

¿Le resultó útil este artículo? Su opinión es importante para nosotros. Use el botón Comentarios de esta página para indicarnos lo bien que ha funcionado este artículo o cómo podemos mejorarlo.

Síntomas

No se puede conectar a una máquina virtual de Azure mediante el Protocolo de escritorio remoto (RDP). La conexión se queda bloqueada en la sección Configurando remoto o recibe el siguiente mensaje de error:

  • RDP internal error (Error interno de RDP)
  • An internal error has occurred (Se ha producido un error interno)
  • This computer can't be connected to the remote computer (Este equipo no se puede conectar al equipo remoto). Try connecting again (Intente conectarse de nuevo). Si el problema no desaparece, póngase en contacto con el propietario del equipo remoto o con el administrador de red

Causa

Este error puede ocurrir debido a uno de los siguientes motivos:

  • Es posible que la máquina virtual haya sido atacada.
  • No se puede acceder a las claves locales de cifrado RSA.
  • El protocolo TLS está deshabilitado.
  • El certificado está dañado o ha expirado.

Solución

Para solucionar este problema, complete los pasos de las secciones siguientes. Antes de empezar, tome una instantánea del disco del sistema operativo de la máquina virtual afectada como copia de seguridad. Para obtener más información, consulte Instantánea de un disco.

Comprobación de la seguridad de RDP

En primer lugar, compruebe si el grupo de seguridad de red para el puerto RDP 3389 no es seguro (abierto). Si no es seguro y muestra * como dirección IP de origen de entrada, restrinja el puerto RDP a la dirección IP de un usuario específico y luego pruebe el acceso RDP. Si no funciona, complete los pasos de la sección siguiente.

Uso del control serie

Use la consola serie o repare la máquina virtual sin conexión conectando el disco del sistema operativo de la máquina virtual a una máquina virtual de recuperación.

Para empezar, conéctese a la consola serie y abra una instancia de PowerShell. Si la consola serie no está habilitada en la máquina virtual, vaya a la sección de reparación de la máquina virtual sin conexión.

Paso: 1 Compruebe el puerto RDP

  1. En una instancia de PowerShell, use NETSTAT para comprobar si otras aplicaciones utilizan el puerto 3389:

    Netstat -anob |more
    
  2. Si Termservice.exe usa dicho puerto, vaya al paso 2. Si otro servicio o aplicación que no sea Termservice.exe usa el puerto 3389, siga estos pasos:

    1. Detenga el servicio para la aplicación que utiliza el servicio 3389:

      Stop-Service -Name <ServiceName> -Force
      
    2. Inicie el servicio del terminal:

      Start-Service -Name Termservice
      
  3. Si la aplicación no se puede detener o si este método no le resulta válido, cambie el puerto de RDP:

    1. Cambie el puerto:

      Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -name PortNumber -value <Hexportnumber>
      
      Stop-Service -Name Termservice -Force
      
      Start-Service -Name Termservice
      
    2. Establezca el firewall del nuevo puerto:

      Set-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP" -LocalPort <NEW PORT (decimal)>
      
    3. Actualice el grupo de seguridad de red del nuevo puerto en el puerto RDP de Azure Portal.

Paso 2: Establezca los permisos correctos en el certificado autofirmado de RDP

  1. En una instancia de PowerShell, ejecute los siguientes comandos, uno a uno, para renovar el certificado autofirmado de RDP:

    Import-Module PKI
    
    Set-Location Cert:\LocalMachine 
    
    $RdpCertThumbprint = 'Cert:\LocalMachine\Remote Desktop\'+((Get-ChildItem -Path 'Cert:\LocalMachine\Remote Desktop\').thumbprint) 
    
    Remove-Item -Path $RdpCertThumbprint
    
    Stop-Service -Name "SessionEnv"
    
    Start-Service -Name "SessionEnv"
    
  2. Si no puede renovarlo mediante este método, pruebe a hacerlo de forma remota:

    1. Desde una máquina virtual que tenga conectividad con la máquina con problemas, escriba mmc en el cuadro Ejecutar para abrir Microsoft Management Console.

    2. En el menú Archivo, seleccione Agregar o quitar complemento, seleccione Certificadosy, después, seleccione Agregar.

    3. Seleccione Cuentas de equipo , seleccione Otro equipo y, después, agregue la dirección IP de la máquina virtual con problemas.

    4. Vaya a la carpeta Escritorio remoto/Certificados, haga clic con el botón derecho en el certificado y seleccione Eliminar.

    5. En una instancia de PowerShell, desde la consola serie, reinicie el servicio de configuración de Escritorio remoto:

      Stop-Service -Name "SessionEnv"
      
      Start-Service -Name "SessionEnv"
      
  3. Restablezca el permiso para la carpeta MachineKeys.

    remove-module psreadline 
    
    md c:\temp
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt 
    
    takeown /f "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)"
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)"
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)"
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt 
    
    Restart-Service TermService -Force
    
  4. Reinicie la máquina virtual e intente iniciar una conexión mediante Escritorio remoto a la máquina virtual. Si el error no desaparece, vaya al paso siguiente.

Paso 3: Habilitación de todas las versiones de TLS compatibles

El cliente de RDP usa TLS 1.0 como protocolo predeterminado. Sin embargo, es posible cambiarlo por TLS 1.1, que se ha convertido en el nuevo estándar. Si TLS 1.1 está deshabilitado en la máquina virtual, se producirá un error en la conexión.

  1. En una instancia de CMD, habilite el protocolo TLS:

    reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
  2. Para evitar que la directiva de AD sobrescriba los cambios, detenga temporalmente la actualización de la directiva de grupo:

    REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f
    
  3. Reinicie la máquina virtual para que los cambios surtan efecto. Si se resuelve el problema, ejecute el siguiente comando para volver a habilitar la directiva de grupo:

    sc config gpsvc start= auto sc start gpsvc
    
    gpupdate /force
    

    Si el cambio se revierte, significa que hay una directiva de Active Directory en el dominio de la empresa. Para que el problema no vuelva a aparecer tiene que cambiar dicha política.

Reparación de la máquina virtual sin conexión

Conecte el disco del sistema operativo a una máquina virtual de recuperación.

  1. Conecte el disco del sistema operativo a una máquina virtual de recuperación.
  2. Después de que el disco del sistema operativo esté conectado a una máquina virtual de recuperación, asegúrese de que el disco aparece marcado como En línea en la consola de administración de discos. Anote la letra de unidad que se asigna al disco del sistema operativo conectado.
  3. Inicie una conexión mediante el Escritorio remoto a la máquina virtual de recuperación.

Habilitación del registro de volcado de memoria y Serial Console

Para habilitar el registro de volcado de memoria y Serial Console, ejecute el siguiente script.

  1. Abra una sesión de símbolo del sistema con privilegios elevados (Ejecutar como administrador).

  2. Ejecute el siguiente script:

    En este script, se supone que la letra de unidad que se asigna al disco del sistema operativo conectado es F. Reemplácela por el valor apropiado para su máquina virtual.

    reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM
    
    REM Enable Serial Console
    bcdedit /store F:\boot\bcd /set {bootmgr} displaybootmenu yes
    bcdedit /store F:\boot\bcd /set {bootmgr} timeout 5
    bcdedit /store F:\boot\bcd /set {bootmgr} bootems yes
    bcdedit /store F:\boot\bcd /ems {<BOOT LOADER IDENTIFIER>} ON
    bcdedit /store F:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
    
    REM Suggested configuration to enable OS Dump
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    
    reg unload HKLM\BROKENSYSTEM
    

Restablezca el permiso para la carpeta MachineKeys

  1. Abra una sesión de símbolo del sistema con privilegios elevados (Ejecutar como administrador).

  2. Ejecute el siguiente script. En este script, se supone que la letra de unidad que se asigna al disco del sistema operativo conectado es F. Reemplácela por el valor apropiado para su máquina virtual.

    Md F:\temp
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt
    
    takeown /f "F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)"
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)"
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)"
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt
    

Habilitación de todas las versiones de TLS compatibles

  1. Abra una sesión de símbolo del sistema con privilegios elevados (Ejecutar como administrador) y ejecute los siguientes comandos. En el siguiente script se supone que la letra de unidad que se asigna al disco del sistema operativo conectado es F. Reemplácela por el valor apropiado para su máquina virtual.

  2. Compruebe que TLS está habilitado:

    reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
  3. Si la clave no existe o su valor es 0, habilite el protocolo, para lo que debe ejecutar los siguientes scripts:

    REM Enable TLS 1.0, TLS 1.1 and TLS 1.2
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
  4. Habilite NLA:

    REM Enable NLA
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f
    
    reg unload HKLM\BROKENSYSTEM
    
  5. Desasocie el disco del sistema operativo y vuelva a crear la máquina virtual y, a continuación, compruebe si se ha resuelto el problema.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.