RemoteApp no inicia en segundo servidor de sesión: solución definitiva paso a paso

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.

Índice

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.

PasoAcción recomendadaPropósito
Comprobación de RDPVerifica que Escritorio remoto está habilitado:
SystemPropertiesRemote.exe  → Permitir conexiones.
Confirma que el servicio RDS escucha correctamente.
Inspección del puerto 3389/TCPEn PowerShell:
Get-NetTCPConnection -LocalPort 3389
o bien
netstat -ano | find ":3389"
Comprueba que el puerto está en estado LISTENING.
Firewall de Windows DefenderActiva 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 IPv6Desmarca 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ónEn 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 BrokerEjecuta 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 MicrosoftConsulta 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:

  1. El cliente contacta primero con el Broker sobre HTTPS para obtener un archivo RDP personalizado.
  2. 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:

  1. Cambiar la clave de registro HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber.
  2. Abrir el nuevo puerto en firewalls y redirigirlo en el NAT si aplica.
  3. 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.

Índice