Cuando los usuarios de Remote Desktop Services intentan abrir una aplicación RemoteApp publicada en un segundo host de sesión y se encuentran con los mensajes «Windows cannot start the remote program…» o «Remote Desktop can’t connect to the computer», la frustración puede paralizar la productividad de toda la organización. A continuación encontrarás una guía completa, práctica y probada en entornos Windows Server para erradicar definitivamente este fallo.
Escenario típico de una granja RDS con dos hosts
Imagina una granja compuesta por los servidores:
- Servidor A: aloja el rol de Session Host, además de Connection Broker y RD Web Access.
- Servidor B: aloja únicamente el rol de Session Host y publica varias aplicaciones RemoteApp.
Las RemoteApp del Servidor A funcionan sin incidencias, pero las del Servidor B devuelven los errores citados. El objetivo es restaurar la disponibilidad completa del Servidor B.
Síntomas que confirman el problema
- Al hacer clic en la aplicación RemoteApp alojada en B, el cliente muestra «program is not in the list of authorized programs» antes de que aparezca la ventana RDP.
- En los equipos cliente, el Visor de eventos de RDP registra el ID 113: RemoteApp and Desktop Connection could not be started.
- En el Servidor B, el visor de eventos TerminalServices-LocalSessionManager genera el ID 1012: Remote Desktop Services failed to listen on port 3389.
Diagnóstico paso a paso
El siguiente cuadro resume el flujo de trabajo recomendado. Asegúrate de ejecutar cada punto en ambos hosts de sesión.
Paso | Acción recomendada | Propósito |
---|---|---|
Comprobación de RDP | Verifica que Escritorio remoto está habilitado:SystemPropertiesRemote.exe → Permitir conexiones. | Confirma que el servicio RDS escucha correctamente. |
Inspección del puerto 3389/TCP | En PowerShell:Get-NetTCPConnection -LocalPort 3389 o bien netstat -ano | find ":3389" | Comprueba que el puerto está en estado LISTENING. |
Firewall de Windows Defender | Activa la regla predefinida «Remote Desktop» para perfiles Privado y Público.Set-NetFirewallRule -DisplayGroup "Remote Desktop" -Enabled True | Garantiza que no se bloquee la llegada de paquetes RDP. |
Desactivación de IPv6 | Desmarca IPv6 en las propiedades del adaptador y reinicia. Alternativa sin reinicio: Disable-NetAdapterBinding -Name "Ethernet" -ComponentID ms_tcpip6 | Evita conflictos de pila dual que aborten la negociación. |
Validación de la colección | En Server Manager → Remote Desktop Services → Collections, verifica que B forma parte de la colección y que la RemoteApp figura como Allowed. | Elimina la alerta «program not in the list of authorized programs». |
Comprobación del Broker | Ejecuta en A:Get-RDSessionHost y Get-RDRemoteApp Asegúrate de que los nombres FQDN están actualizados. Renueva los certificados si caducaron. | Previene redirecciones fallidas del Connection Broker. |
Guía oficial de Microsoft | Consulta la sección «Can’t establish a Remote Desktop session – Windows Server» en Microsoft Learn. | Cubre licenciamiento, políticas de sesión y otros escenarios avanzados. |
Por qué el puerto 3389 debe estar abierto en todos los hosts
El Load-Balancing de RDS funciona en dos fases:
- El cliente contacta primero con el Broker sobre HTTPS para obtener un archivo RDP personalizado.
- Ese archivo contiene la IP o FQDN del host asignado por el Broker, y el cliente inicia entonces una sesión RDP directa al puerto 3389/TCP de ese host.
Si el puerto 3389 no está expuesto en cualquiera de los hosts de la granja, el cliente nunca completará la segunda fase y mostrará el error de conexión que observas. Por tanto todos los hosts de sesión —incluso el que aloja también el Broker— deben permitir tráfico entrante RDP en sus firewalls y en todos los dispositivos de red intermedios.
Solución detallada y comandos prácticos
Reiniciar el servicio de escucha RDP
En PowerShell elevado:
Restart-Service -Name TermService -Force
Después confirma el estado:
Get-Service TermService
Reparar la base WMI (únicamente si el servicio no arranca)
Winmgmt /salvagerepository
Winmgmt /resetrepository
Regenerar el certificado autofirmado RDP
Si el error persiste y el Visor de eventos muestra la ID 1058 (SSL certificate is expired):
tsconfig.msc
Borra el certificado asignado e inicia sesión RDP localmente para forzar la creación de uno nuevo.
Eliminar claves corruptas de RemoteApp
En el Editor del Registro del Servidor B:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList
Borra las subclaves que hagan referencia a aplicaciones ya inexistentes y vuelve a publicar las RemoteApp desde Server Manager.
Actualizar DNS y nombres SPN
Un SPN mal configurado obliga a Kerberos a fallar y provoca también el mensaje «can’t connect». Para registrar el SPN correcto:
setspn -S WSMAN/SERVIDOR-B dominio\ServidB$
setspn -S TERMSRV/SERVIDOR-B dominio\ServidB$
Luego limpia cachés:
ipconfig /flushdns
klist purge
Buenas prácticas adicionales
- Monitorización NLA: habilita Network Level Authentication solo si todos los clientes usan al menos Windows 7 SP1 o Windows 10. De lo contrario, la comprobación de credenciales previa abortará la conexión.
- Límite de conexiones simultáneas: en GPO → Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Connections revisa el parámetro «Limit number of connections».
- Política de reconexión consciente de Broker: usa
Set-RDSessionCollectionConfiguration -AutomaticReconnectionEnabled $true
para garantizar que un usuario reconectará a su sesión existente incluso tras un reinicio. - Multi-homing: si los hosts tienen varias NIC, fija la métrica de la interfaz deseada o deshabilita las secundarias para evitar confusión en la ruta de retorno.
- Pruebas periódicas: automatiza con PowerShell la apertura de
mstsc /v:ServidorB /admin
cada madrugada y registra el resultado en el SIEM para detectar fallos antes que los usuarios.
Preguntas frecuentes
¿Puedo usar un puerto distinto al 3389?
Sí, pero deberás:
- Cambiar la clave de registro
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber
. - Abrir el nuevo puerto en firewalls y redirigirlo en el NAT si aplica.
- Recrear la colección o reimportar las RemoteApp para que el archivo RDP apunte al puerto correcto.
¿El rol de Remote Desktop Gateway ayuda en este caso?
No es obligatorio cuando los clientes están dentro de la red. Sin embargo, si la granja se expone a Internet, un RD Gateway ofrece TLS 1.2, MFA y registrará mejor los motivos específicos de rechazo.
¿Qué sucede si un parche de seguridad de Windows rompe el servicio RDS?
Revisa el catálogo Microsoft Update antes de instalar parches relacionados con CVE-2024‑30083 o similares. Mantén siempre snapshots o backups para revertir rápidamente.
Conclusión
Una única regla de firewall mal configurada o un certificado caducado en el Servidor B puede desencadenar un efecto dominó que bloquee todas las aplicaciones RemoteApp publicadas en él. Siguiendo el procedimiento anterior —comenzando por habilitar Escritorio remoto, validando el puerto 3389 y confirmando la pertenencia a la colección— devolverás la granja RDS a la normalidad en cuestión de minutos y con una mínima interrupción para los usuarios.