Guía de solución de problemas de errores de llamada a procedimiento remoto (RPC)
Es posible que encuentre un error de "servidor RPC no disponible" al conectarse a Instrumental de administración de Windows (WMI) o Microsoft SQL Server, durante una sesión de llamada a procedimiento remoto (RPC), o cuando se usan varios complementos de Microsoft Management Console (MMC). En la imagen siguiente se muestra un ejemplo de un error RPC.
Se trata de un error de red común que requiere cierta familiaridad básica con el proceso para solucionar problemas correctamente. Para comenzar, hay varios términos importantes para comprender lo siguiente:
- Asignador de puntos de conexión (EPM): un servicio que escucha en el servidor y guía las aplicaciones cliente a las aplicaciones de servidor mediante la información de puerto e UUID. El servicio forma parte del subsistema RPC que resuelve los puntos de conexión dinámicos en respuesta a las solicitudes de cliente. En algunos casos, asigna dinámicamente puntos de conexión a los servidores.
- Torre: describe el protocolo RPC para permitir que el cliente y el servidor negocien una conexión.
- Pisos: las capas de contenido dentro de una torre que contienen datos específicos, como puertos, direcciones IP e identificadores.
- UUID: UN GUID conocido que identifica una aplicación RPC. Durante la solución de problemas, puede usar el UUID para realizar un seguimiento de las conversaciones RPC de un solo tipo de aplicación (entre los muchos tipos que se producen en un solo equipo a la vez).
- Opnum: identifica una función que el cliente quiere que realice el servidor. Esto es simplemente un número hexadecimal. Sin embargo, un buen analizador de red traducirá la función automáticamente. Si no se puede identificar la función, póngase en contacto con el proveedor de la aplicación.
- Puerto: punto de conexión de comunicación para la aplicación cliente o servidor. EPM asigna puertos dinámicos (también conocidos como puertos altos o puertos efímeros) para los clientes y servidores que se van a usar.
Nota:
Normalmente, el número de puerto es la información más importante que usará para solucionar problemas.
- Datos de código auxiliar: los datos intercambiados entre las funciones del cliente y las funciones del servidor. Estos datos son la carga útil, la parte importante de la comunicación.
Funcionamiento de la conexión
En el diagrama siguiente se muestra un cliente que se conecta a un servidor para ejecutar una operación remota. El cliente se pone en contacto inicialmente con el puerto TCP 135 en el servidor y, a continuación, negocia con EPM para un número de puerto dinámico. Una vez que EPM asigna un puerto, el cliente se desconecta y, a continuación, usa el puerto dinámico para conectarse al servidor.
Importante
Si un firewall separa el cliente y el servidor, el firewall tiene que permitir la comunicación en el puerto 135 y en los puertos dinámicos que asigna EPM. Un enfoque para administrar este escenario es especificar puertos o intervalos de puertos para que EPM los use. Para obtener más información, consulte Configuración de cómo RPC asigna puertos dinámicos.
Algunos firewalls también permiten el filtrado UUID. En este escenario, si una solicitud RPC usa el puerto 135 para cruzar el firewall y ponerse en contacto con EPM, el firewall anota el UUID asociado a la solicitud. Cuando EPM responde y envía un número de puerto dinámico para ese UUID, el firewall también anota el número de puerto. A continuación, el firewall permite las operaciones de enlace RPC para ese UUID y puerto.
Configuración de cómo RPC asigna puertos dinámicos
De forma predeterminada, EPM asigna puertos dinámicos aleatoriamente desde el intervalo configurado para TCP y UDP (en función de la implementación del sistema operativo que se usa). Sin embargo, este enfoque podría no ser práctico, especialmente si el cliente y el servidor deben comunicarse a través de un firewall. Un método alternativo consiste en especificar un número de puerto o un intervalo de números de puerto para que EPM los use y abrir esos puertos en el firewall.
Muchas aplicaciones de Windows Server que dependen de RPC proporcionan opciones (como claves del Registro) para personalizar los puertos permitidos. Los servicios de Windows usan la subclave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet para esta tarea.
Al especificar un puerto o intervalo de puertos, use puertos que están fuera del intervalo de puertos usados habitualmente. Puede encontrar una lista completa de los puertos de servidor que se usan en Windows y los principales productos de Microsoft en Información general del servicio y requisitos de puertos de red para Windows. En el artículo también se enumeran las aplicaciones de servidor RPC y se mencionan las aplicaciones de servidor RPC que se pueden configurar para usar puertos de servidor personalizados más allá de las funcionalidades del entorno de ejecución de RPC.
Importante
Esta sección, método o tarea contiene pasos que le indican cómo modificar el Registro. No obstante, pueden producirse problemas graves si modifica el registro de manera incorrecta. Por lo tanto, asegúrese de que sigue estos pasos con atención. Como medida de protección, haga una copia de seguridad del registro antes de modificarlo para poder restaurarlo si se produce algún problema. Para obtener más información sobre cómo realizar copias de seguridad y restaurar el registro, vea Cómo hacer copia de seguridad y restaurar el registro en Windows.
De forma predeterminada, la clave de Internet no existe. Por lo tanto, tiene que crearlo. Para la clave de Internet , puede configurar las siguientes entradas:
Puertos REG_MULTI_SZ: especifica un puerto o un intervalo inclusivo de puertos. Las otras entradas que aparecen en Internet indican si estos son los puertos que se van a usar o los puertos que se van a excluir del uso.
- Intervalo de valores: 0 - 65535
Por ejemplo, 5984 representa un único puerto y 5000–5100 representa un conjunto de puertos. Si alguno de los valores está fuera del intervalo de 0 a 65535, o si no se puede interpretar ningún valor, el tiempo de ejecución de RPC trata toda la configuración como no válida.
- Intervalo de valores: 0 - 65535
PortsInternetAvailable REG_SZ: especifica si el valor Puertos representa los puertos que se van a incluir o los puertos que se van a excluir.
- Valores: Y o N (no distingue mayúsculas de minúsculas)
- Y: Los puertos que aparecen en la entrada Puertos representan todos los puertos de ese equipo que están disponibles para EPM.
- N: Los puertos que aparecen en la entrada Puertos representan todos los puertos que no están disponibles para EPM.
- Valores: Y o N (no distingue mayúsculas de minúsculas)
UseInternetPorts REG_SZ: especifica la directiva del sistema predeterminada.
- Valores: Y o N (no distingue mayúsculas de minúsculas)
- Y: Los procesos que usan la directiva del sistema predeterminada se asignan puertos desde el conjunto de puertos disponibles para Internet, tal como se definió anteriormente.
- N: Los procesos que usan la directiva del sistema predeterminada se asignan puertos desde el conjunto de puertos solo de intranet.
- Valores: Y o N (no distingue mayúsculas de minúsculas)
Debe abrir un intervalo de puertos mayores que el puerto 5000. Los números de puerto que son inferiores a 5000 podrían estar ya en uso por otras aplicaciones y podrían provocar conflictos con las aplicaciones DCOM. Además, la experiencia anterior muestra que se deben abrir un mínimo de 100 puertos. Esto se debe a que varios servicios del sistema dependen de estos puertos RPC para comunicarse entre sí.
Nota:
El número mínimo de puertos necesarios puede diferir del equipo al equipo. Los equipos que admiten más tráfico pueden encontrarse con agotamiento de puertos si los puertos dinámicos RPC están restringidos. Tenga en cuenta esto si restringe el intervalo de puertos.
Advertencia
Si se produce un error en la configuración del puerto o no hay suficientes puertos en el grupo, EPM no puede registrar aplicaciones de servidor RPC (incluidos servicios de Windows como Netlogon) que usan puntos de conexión dinámicos. Si se produce un error de configuración, el código de error es 87 (0x57) ERROR_INVALID_PARAMETER. Por ejemplo, si no hay suficientes puertos, Netlogon registra el evento 5820:
Nombre de registro: Sistema
Origen: NETLOGON
Identificador de evento: 5820
Nivel: error
Palabras clave: clásica
Descripción:
El servicio Netlogon no pudo agregar la interfaz RPC de AuthZ. Se finalizó el servicio. Error siguiente: "El parámetro es incorrecto".
Para obtener más información sobre cómo funciona RPC, consulte RPC sobre TI/Pro.
Ejemplo de una configuración de puerto personalizada
En este ejemplo, los puertos de 5000 a 6000 (inclusive) se seleccionaron arbitrariamente para ayudar a ilustrar cómo se pueden configurar las nuevas entradas del Registro. Este ejemplo no es una recomendación de un número mínimo de puertos que requiere cualquier sistema determinado. Esta configuración requiere agregar la clave de Internet en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc y agregar las siguientes entradas:
- Puertos MULTI_SZ
- Tipo de datos: MULTI_SZ
- Valor: 5000-6000
- PortsInternetAvailable REG_SZ
- Tipo de datos: REG_SZ
- Valor: Y
- UseInternetPorts REG_SZ
- Tipo de datos: REG_SZ
- Valor: Y
El equipo debe reiniciarse para que esta configuración surta efecto. Después, a todas las aplicaciones que usan RPC se les asignan puertos dinámicos en el intervalo de 5000 a 6000 (ambos incluidos).
Solución de errores de RPC
PortQry
PortQry proporciona información rápida sobre cómo funciona RPC antes de profundizar en los datos de seguimiento de red. Puede determinar rápidamente si puede realizar una conexión ejecutando el siguiente comando en el equipo cliente:
Portqry.exe -n <ServerIP> -e 135
Nota:
En este comando, <ServerIP> representa la dirección IP del servidor al que se está contactando.
Por ejemplo, considere el siguiente comando:
Portqry.exe -n 10.10.10.10 -e 135
Este comando genera una salida similar al fragmento siguiente:
Querying target system called:
10.10.10.10
Attempting to resolve IP address to a name...
IP address resolved to RPCServer.contoso.com
querying...
TCP port 135 (epmap service): LISTENING
Using ephemeral source port
Querying Endpoint Mapper Database...
Server's response:
UUID: d95afe70-a6d5-4259-822e-2c84da1ddb0d
ncacn_ip_tcp:10.10.10.10[49664]
Al examinar esta salida, puede determinar la siguiente información:
- DNS funciona correctamente (resolvió la dirección IP en un nombre de dominio completo (FQDN).
- PortQry se contactó con el puerto RPC (135) en el equipo de destino.
- EPM respondió a PortQry y asignó el puerto dinámico 49664 (entre corchetes) para la comunicación posterior.
- PortQry se reconecta al puerto 49664.
Si se produce un error en cualquiera de estos pasos, normalmente puede empezar a recopilar seguimientos de red simultáneos, como se describe en la sección siguiente.
Para obtener más información sobre PortQry, consulte Uso de la herramienta de línea de comandos PortQry.
Netsh
Puede usar la herramienta Windows netsh para recopilar datos de seguimiento de red simultáneamente en el cliente y el servidor.
Para recopilar seguimientos de red simultáneos, abra una ventana del símbolo del sistema con privilegios elevados tanto en el cliente como en el servidor.
En el cliente, ejecute el siguiente comando:
Netsh trace start scenario=netconnection capture=yes tracefile=c:\client_nettrace.etl maxsize=512 overwrite=yes report=yes
En el servidor, ejecute el siguiente comando:
Netsh trace start scenario=netconnection capture=yes tracefile=c:\server_nettrace.etl maxsize=512 overwrite=yes report=yes
Ahora, intente reproducir el problema en el equipo cliente. A continuación, ejecute el siguiente comando en el símbolo del sistema en ambas ventanas para detener los seguimientos:
Netsh trace stop
Abra los archivos de seguimiento en Microsoft Network Monitor 3.4 o El Analizador de mensajes y filtre los datos de seguimiento para la dirección IP de los equipos cliente o servidor y el puerto TCP 135. Por ejemplo, use cadenas de filtro como las siguientes:
Ipv4.address==<client-ip> e ipv4.address==<server-ip> y tcp.port==135
En esta cadena de filtro, <client-ip> representa la dirección IP del cliente y< server-ip> representa la dirección IP del servidor.
tcp.port==135
En los datos filtrados, busque la entrada EPM en la columna Protocolo .
Busque una respuesta de EPM (en el servidor) que incluya un número de puerto dinámico. Si el número de puerto dinámico está presente, anote para referencia futura.
Vuelva a filtrar los datos de seguimiento para el número de puerto dinámico y la dirección IP del servidor. Por ejemplo, use una cadena de filtro como tcp.port==<dynamic-port-allocated> e ipv4.address==<server-ip>. En esta cadena de filtro, <el puerto dinámico asignado> representa el número de puerto dinámico y <server-ip> representa la dirección IP del servidor.
En los datos filtrados, busque evidencias de que el cliente se ha conectado correctamente al puerto dinámico o busque los problemas de red que puedan haberse producido.
Puerto no accesible
La causa más común de errores de "servidor RPC no disponible" es que el cliente no se puede conectar al puerto dinámico asignado. A continuación, el seguimiento del lado cliente mostraría las retransmisiones tcp SYN para el puerto dinámico.
Este comportamiento indica que una de las condiciones siguientes está bloqueando la comunicación:
- El intervalo de puertos dinámicos está bloqueado en el firewall del entorno.
- Un dispositivo intermedio está quitando los paquetes.
- El servidor de destino quita los paquetes. Esta condición podría deberse a configuraciones como la eliminación de paquetes de la Plataforma de filtrado de Windows (PMA), la eliminación de paquetes de tarjeta de interfaz de red (NIC) o modificaciones del controlador de filtro.
Recopilación de datos para una solución de problemas más profunda
Antes de ponerse en contacto con el soporte técnico de Microsoft, se recomienda recopilar información sobre su problema.
Requisitos previos
Estos procedimientos usan el conjunto de herramientas TroubleShootingScript (TSS). Para usar este conjunto de herramientas, debe tener en cuenta los siguientes requisitos previos:
Debe tener permiso de nivel de administrador en el equipo local.
La primera vez que ejecute el conjunto de herramientas, debe aceptar un CLUF.
Asegúrese de que la directiva de ejecución de scripts de Windows PowerShell para el equipo esté establecida
RemoteSigned
en . Para obtener más información sobre la directiva de ejecución de PowerShell, consulte about_Execution_Policies.Nota:
Si el entorno le impide usar
RemoteSigned
en el nivel de equipo, puede establecerlo temporalmente en el nivel de proceso. Para ello, ejecute el siguiente cmdlet en una ventana del símbolo del sistema de PowerShell con privilegios elevados antes de iniciar la herramienta:PS C:\> Set-ExecutionPolicy -scope Process -ExecutionPolicy RemoteSigned
Para comprobar que el cambio surte efecto, ejecute el
PS C:\> Get-ExecutionPolicy -List
cmdlet .Los permisos de nivel de proceso solo se aplican a la sesión actual de PowerShell. Después de cerrar la ventana de PowerShell, la directiva de ejecución vuelve a la configuración original.
Recopilar información clave antes de ponerse en contacto con el soporte técnico de Microsoft
Descargue TSS en todos los nodos y expándalo a la carpeta C:\tss .
Abra la carpeta C:\tss en una ventana del símbolo del sistema de PowerShell con privilegios elevados.
Inicie seguimientos en el equipo con el problema mediante la ejecución del siguiente cmdlet:
.\TSS.ps1 -Scenario NET_RPC
Responda al mensaje del CLUF.
Reproduce el problema. Puede usar herramientas como Visor de eventos o wbemtest para supervisar o probar el problema.
Después de reproducir el problema, detenga inmediatamente la recopilación de datos.
Una vez que los scripts automatizados terminen de recopilar los datos necesarios, adjunte los datos a la solicitud de soporte técnico.