Compartir a través de


Guía de solución de problemas de errores de llamada a procedimiento remoto (RPC)

Se aplica a: Cliente de Windows

Es posible que encuentre un error "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 al usar varios complementos de Microsoft Management Console (MMC). En la imagen siguiente se muestra un ejemplo de error rpc.

Captura de pantalla de un mensaje de error que indica que se produjo el siguiente error: el servidor RPC no está disponible.

Se trata de un error de red común que requiere cierta familiaridad básica con el proceso para solucionar problemas correctamente. Para empezar, hay varios términos importantes que debe comprender:

  • Asignador de puntos de conexión (EPM): servicio que escucha en el servidor y guía las aplicaciones cliente a las aplicaciones del servidor mediante la información de puerto y UUID.
  • Torre: describe el protocolo RPC para permitir que el cliente y el servidor negocien una conexión.
  • Pisos: las capas de contenido de una torre que contienen datos específicos, como puertos, direcciones IP e identificadores.
  • UUID: 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 el servidor realice. Se trata simplemente de 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 que los clientes y servidores los usen.

    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. Inicialmente, el cliente se pone en contacto con el puerto TCP 135 en el servidor y, a continuación, negocia con EPM 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.

Diagrama que muestra cómo un cliente realiza una conexión RPC a un servidor remoto.

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 lo 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 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 servidor windows que se basan en 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.

Cuando especifique un puerto o un intervalo de puertos, use puertos que estén fuera del intervalo de puertos de uso común. 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 menciona qué aplicaciones de servidor RPC 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. En consecuencia, asegúrese de seguir estos pasos cuidadosamente. 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 hacer una copia de seguridad del Registro y cómo restaurarlo, consulte Cómo realizar una copia de seguridad del Registro y restaurarlo 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 demás 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 algún valor está fuera del intervalo de 0 a 65535, o si no se puede interpretar ningún valor, el runtime de RPC trata toda la configuración como no válida.
  • PortsInternetAvailable REG_SZ: especifica si el valor de Ports representa los puertos que se van a incluir o los puertos que se van a excluir.

    • Valores: Y o N (no distinguen 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.
  • UseInternetPorts REG_SZ: especifica la directiva del sistema predeterminada.

    • Valores: Y o N (no distinguen mayúsculas de minúsculas)
      • Y: a los procesos que usan la directiva de sistema predeterminada se les asignan puertos del conjunto de puertos disponibles en Internet, tal como se definió anteriormente.
      • N: A los procesos que usan la directiva de sistema predeterminada se les asignan puertos del conjunto de puertos de solo intranet.

Debe abrir un intervalo de puertos que sean mayores que el puerto 5000. Es posible que otras aplicaciones ya usen números de puerto inferiores a 5000 y podrían provocar conflictos con las aplicaciones DCOM. Además, la experiencia anterior muestra que se debe abrir un mínimo de 100 puertos. Esto se debe a que varios servicios del sistema se basan en estos puertos RPC para comunicarse entre sí.

Nota:

El número mínimo de puertos necesarios puede diferir de un equipo a otro. Los equipos que admiten más tráfico pueden encontrar agotamiento de puertos si los puertos dinámicos rpc están restringidos. Tenga esto en cuenta si restringe el intervalo de puertos.

Advertencia

Si hay 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 los 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ásico
Descripción:
El servicio Netlogon no pudo agregar la interfaz RPC de AuthZ. El servicio se ha terminado. Se produjo el siguiente error: "El parámetro es incorrecto".

Para obtener más información sobre cómo funciona RPC, consulte RPC a través de TI/Pro.

Ejemplo de una configuración de puerto personalizada

En este ejemplo, se seleccionaron arbitrariamente los puertos 5000 a 6000 (ambos inclusive) para 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\Rpcy 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 tiene que 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 inclusive).

Solución de problemas de errores 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 con el que se está contactando.

Por ejemplo, considere el siguiente comando:

Portqry.exe -n 169.254.0.2 -e 135

Este comando genera una salida similar al siguiente extracto:

Querying target system called:
169.254.0.2
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:169.254.0.2[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 ha vuelto a conectar 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 Netsh de Windows 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 de 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 del servidor o los equipos cliente 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, fíjese en él para futuras referencias.

Captura de pantalla del Monitor de red que muestra el puerto dinámico resaltado.

Vuelva a filtrar los datos de seguimiento del 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, <dynamic-port-allocated> representa el número de puerto dinámico y <server-ip> representa la dirección IP del servidor.

Captura de pantalla del Monitor de red que tiene aplicado un filtro.

En los datos filtrados, busque pruebas de que el cliente se conectó correctamente al puerto dinámico o busque cualquier problema de red que se haya producido.

No se puede acceder al puerto

La causa más común de errores de "servidor RPC no disponible" es que el cliente no puede conectarse al puerto dinámico asignado. A continuación, el seguimiento del lado cliente mostraría las retransmisiones de TCP SYN para el puerto dinámico.

Captura de pantalla del Monitor de red que muestra las retransmisiones de TCP SYN.

Este comportamiento indica que una de las condiciones siguientes es bloquear la comunicación:

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 el 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, tendrá que aceptar un CLUF.

  • Asegúrese de que la directiva de ejecución de scripts de Windows PowerShell para el equipo esté establecida en RemoteSigned. 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 se aplican solo a la sesión actual de PowerShell. Después de cerrar la ventana de PowerShell, la directiva de ejecución se revierte a la configuración original.

Recopilación de información clave antes de ponerse en contacto con el soporte técnico de Microsoft

  1. Descargue TSS en todos los nodos y expándalo a la carpeta C:\tss .

  2. Abra la carpeta C:\tss en una ventana del símbolo del sistema de PowerShell con privilegios elevados.

  3. Inicie los seguimientos en el equipo con problemas mediante la ejecución del siguiente cmdlet:

    TSS.ps1 -Scenario NET_RPC
    
  4. Responda al aviso del CLUF.

  5. Reproduzca el problema. Puede usar herramientas como Visor de eventos o wbemtest para supervisar o probar el problema.

  6. Después de reproducir el problema, detenga inmediatamente la recopilación de datos.

  7. Una vez que los scripts automatizados terminen de recopilar los datos necesarios, adjunte los datos a la solicitud de soporte técnico.