Compartilhar via


Diretrizes de solução de problemas de erros de RPC (Chamada de Procedimento Remoto)

Você pode encontrar um erro "Servidor RPC indisponível" ao se conectar ao WMI (Instrumentação de Gerenciamento do Windows) ou ao Microsoft SQL Server, durante uma sessão de RPC (Chamada de Procedimento Remoto) ou ao usar vários snap-ins do MMC (Console de Gerenciamento Microsoft). A imagem a seguir mostra um exemplo de um erro de RPC.

Captura de tela de uma mensagem de erro mostrando que o servidor RPC não está disponível.

Este é um erro de rede comum que requer alguma familiaridade básica com o processo para solucionar problemas com êxito. Para começar, existem vários termos importantes para entender:

  • Mapeador de ponto de extremidade (EPM): um serviço que escuta no servidor e orienta aplicativos cliente para aplicativos de servidor usando informações de porta e UUID. O serviço faz parte do subsistema RPC que resolve pontos de extremidade dinâmicos em resposta às solicitações do cliente. Em alguns casos, ele atribui dinamicamente endpoints aos servidores.
  • Torre: descreve o protocolo RPC para permitir que o cliente e o servidor negociem uma conexão.
  • Andares: As camadas de conteúdo dentro de uma torre que contêm dados específicos, como portas, endereços IP e identificadores.
  • UUID: um GUID conhecido que identifica um aplicativo RPC. Durante a solução de problemas, você pode usar o UUID para rastrear as conversas RPC de um único tipo de aplicativo (entre os muitos tipos que ocorrem em um único computador ao mesmo tempo).
  • Opnum: Identifica uma função que o cliente deseja que o servidor execute. Este é simplesmente um número hexadecimal. No entanto, um bom analisador de rede traduzirá a função para você. Se a função não puder ser identificada, entre em contato com o fornecedor do aplicativo.
  • Porta: o ponto de extremidade de comunicação para o aplicativo cliente ou servidor. O EPM aloca portas dinâmicas (também conhecidas como portas altas ou portas efêmeras) para clientes e servidores usarem.

    Observação

    Normalmente, o número da porta é a informação mais importante que você usará para solução de problemas.

  • Dados de stub: os dados trocados entre as funções no cliente e as funções no servidor. Esses dados são a carga útil, a parte importante da comunicação.

Como funciona a conexão

O diagrama a seguir mostra um cliente se conectando a um servidor para executar uma operação remota. O cliente inicialmente entra em contato com a porta TCP 135 no servidor e, em seguida, negocia com o EPM um número de porta dinâmico. Depois que o EPM atribui uma porta, o cliente se desconecta e usa a porta dinâmica para se conectar ao servidor.

Diagrama que mostra como um cliente faz uma conexão RPC com um servidor remoto.

Importante

Se um firewall separar o cliente e o servidor, o firewall deverá permitir a comunicação na porta 135 e nas portas dinâmicas designadas pelo EPM. Uma abordagem para gerenciar esse cenário é especificar portas ou intervalos de portas para o EPM usar. Para obter mais informações, consulte Configurar como o RPC aloca portas dinâmicas.

Alguns firewalls também permitem a filtragem UUID. Nesse cenário, se uma solicitação RPC usar a porta 135 para cruzar o firewall e entrar em contato com o EPM, o firewall observará o UUID associado à solicitação. Quando o EPM responde e envia um número de porta dinâmico para esse UUID, o firewall também anota o número da porta. Em seguida, o firewall permite operações de ligação RPC para esse UUID e porta.

Configurar como o RPC aloca portas dinâmicas

Por padrão, o EPM aloca portas dinâmicas aleatoriamente do intervalo configurado para TCP e UDP (com base na implementação do sistema operacional usado). No entanto, essa abordagem pode não ser prática, especialmente se o cliente e o servidor precisarem se comunicar por meio de um firewall. Um método alternativo é especificar um número de porta ou um intervalo de números de porta para o EPM usar e abrir essas portas no firewall.

Muitos aplicativos de servidor Windows que dependem do RPC fornecem opções (como chaves do Registro) para personalizar as portas permitidas. Os serviços do Windows usam a subchave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet para essa tarefa.

Ao especificar uma porta ou um intervalo de portas, use portas que estejam fora do intervalo de portas comumente usadas. Você pode encontrar uma lista abrangente de portas de servidor usadas no Windows e nos principais produtos da Microsoft em Visão geral do serviço e requisitos de porta de rede para Windows. O artigo também lista aplicativos de servidor RPC e menciona quais aplicativos de servidor RPC podem ser configurados para usar portas de servidor personalizadas além dos recursos do runtime RPC.

Importante

Esta seção, método ou tarefa contém etapas que descrevem como modificar o Registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, certifique-se de seguir essas etapas com atenção. Para maior proteção, faça backup do Registro antes de modificar, para poder restaurar se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o Registro, consulte Como fazer backup e restaurar o Registro no Windows.

Por padrão, a chave da Internet não existe. Portanto, você tem que criá-lo. Para a chave da Internet , você pode configurar as seguintes entradas:

  • Portas REG_MULTI_SZ: Especifica uma porta ou um intervalo inclusivo de portas. As outras entradas que aparecem em Internet indicam se essas são as portas a serem usadas ou as portas a serem excluídas do uso.

    • Intervalo de valores: 0 - 65535
      Por exemplo, 5984 representa uma única porta e 5000–5100 representa um conjunto de portas. Se algum valor estiver fora do intervalo de 0 a 65535 ou se algum valor não puder ser interpretado, o runtime RPC tratará toda a configuração como inválida.
  • PortsInternetAvailable REG_SZ: especifica se o valor Ports representa portas a serem incluídas ou portas a serem excluídas.

    • Valores: Y ou N (sem distinção entre maiúsculas e minúsculas)
      • Y: As portas listadas na entrada Portas representam todas as portas desse computador que estão disponíveis para o EPM.
      • N: As portas listadas na entrada Portas representam todas as portas que não estão disponíveis para o EPM.
  • UseInternetPorts REG_SZ: especifica a política padrão do sistema.

    • Valores: Y ou N (sem distinção entre maiúsculas e minúsculas)
      • Y: Os processos que usam a política do sistema padrão recebem portas do conjunto de portas disponíveis na Internet, conforme definido anteriormente.
      • N: Os processos que usam a política de sistema padrão recebem portas do conjunto de portas somente da intranet.

Você deve abrir um intervalo de portas maiores que a porta 5000. Os números de porta menores que 5000 podem já estar em uso por outros aplicativos e podem causar conflitos com seus aplicativos DCOM. Além disso, a experiência anterior mostra que um mínimo de 100 portas devem ser abertas. Isso ocorre porque vários serviços do sistema dependem dessas portas RPC para se comunicarem entre si.

Observação

O número mínimo de portas necessárias pode variar de computador para computador. Os computadores que oferecem suporte a mais tráfego podem encontrar esgotamento de porta se as portas dinâmicas RPC forem restritas. Leve isso em consideração se você restringir o intervalo de portas.

Aviso

Se houver um erro na configuração da porta ou não houver portas suficientes no pool, o EPM não poderá registrar aplicativos de servidor RPC (incluindo serviços do Windows, como o Netlogon) que usam pontos de extremidade dinâmicos. Se ocorrer um erro de configuração, o código de erro será 87 (0x57) ERROR_INVALID_PARAMETER. Por exemplo, se não houver portas suficientes, o Netlogon registrará o evento 5820:

Nome do Log: Sistema
Fonte: NETLOGON
ID do evento: 5820
Nível: Erro
Palavras-Chave: Clássico
Descrição:
O serviço Netlogon não pôde adicionar a interface AuthZ RPC. O serviço foi encerrado. Ocorreu o seguinte erro: 'O parâmetro está incorreto.'

Para obter mais informações sobre como o RPC funciona, consulte RPC sobre IT/Pro.

Exemplo de uma configuração de porta personalizada

Neste exemplo, as portas 5000 a 6000 (inclusive) foram selecionadas arbitrariamente para ajudar a ilustrar como as novas entradas do Registro podem ser configuradas. Este exemplo não é uma recomendação de um número mínimo de portas que qualquer sistema específico exige. Essa configuração requer a adição da chave da Internet em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc e a adição das seguintes entradas:

  • Portas MULTI_SZ
    • Tipo de dados: MULTI_SZ
    • Valor: 5000-6000
  • PortasInternetDisponível REG_SZ
    • Tipo de dados: REG_SZ
    • Valor: Y
  • UseInternetPorts REG_SZ
    • Tipo de dados: REG_SZ
    • Valor: Y

O computador precisa ser reiniciado para que essa configuração entre em vigor. Depois disso, todos os aplicativos que usam RPC recebem portas dinâmicas no intervalo de 5000 a 6000 (inclusive).

Solução de problemas de erros de RPC

PortQry

O PortQry fornece informações rápidas sobre como o RPC está funcionando antes de você se aprofundar nos dados de rastreamento de rede. Você pode determinar rapidamente se pode fazer uma conexão executando o seguinte comando no computador cliente:

Portqry.exe -n <ServerIP> -e 135

Observação

Nesse comando, <ServerIP> representa o endereço IP do servidor que você está contatando.

Por exemplo, considere o seguinte comando:

Portqry.exe -n 10.10.10.10 -e 135

Esse comando produz uma saída semelhante ao seguinte trecho:

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]

Ao examinar essa saída, você pode determinar as seguintes informações:

  • O DNS está funcionando corretamente (resolveu o endereço IP para um nome de domínio totalmente qualificado (FQDN)).
  • O PortQry entrou em contato com a porta RPC (135) no computador de destino.
  • O EPM respondeu ao PortQry e atribuiu a porta dinâmica 49664 (entre colchetes) para comunicação subsequente.
  • PortQry reconectado à porta 49664.

Se alguma dessas etapas falhar, geralmente você pode começar a coletar rastreamentos de rede simultâneos, conforme descrito na próxima seção.

Para obter mais informações sobre o PortQry, consulte Usando a ferramenta de linha de comando PortQry.

Netsh

Você pode usar a ferramenta netsh do Windows para coletar dados de rastreamento de rede simultaneamente no cliente e no servidor.

Para coletar rastreamentos de rede simultâneos, abra uma janela de Prompt de Comando com privilégios elevados no cliente e no servidor.

No cliente, execute o seguinte comando:

Netsh trace start scenario=netconnection capture=yes tracefile=c:\client_nettrace.etl maxsize=512 overwrite=yes report=yes

No servidor, execute o seguinte comando:

Netsh trace start scenario=netconnection capture=yes tracefile=c:\server_nettrace.etl maxsize=512 overwrite=yes report=yes

Agora, tente reproduzir seu problema no computador cliente. Em seguida, execute o seguinte comando no prompt de comando em ambas as janelas para interromper os rastreamentos:

Netsh trace stop

Abra os arquivos de rastreamento no Microsoft Network Monitor 3.4 ou no Message Analyzer e filtre os dados de rastreamento para o endereço IP dos computadores servidor ou cliente e a porta TCP 135. Por exemplo, use cadeias de caracteres de filtro como as seguintes:

  • ipv4.address==< client-ip> e ipv4.address ==< server-ip> e tcp.port ==

    Nessa cadeia de caracteres de filtro, <client-ip> representa o endereço IP do cliente e <server-ip> representa o endereço IP do servidor.

  • tcp.port==135

Nos dados filtrados, procure a entrada EPM na coluna Protocolo.

Procure uma resposta do EPM (no servidor) que inclua um número de porta dinâmico. Se o número da porta dinâmica estiver presente, anote-o para referência futura.

Captura de tela do Monitor de Rede que mostra a porta dinâmica realçada.

Filtre novamente os dados de rastreamento para o número da porta dinâmica e o endereço IP do servidor. Por exemplo, use uma string de filtro como tcp.port==<dynamic-port-allocated> e ipv4.address==<server-ip>. Nessa string de filtro, <dynamic-port-allocated> representa o número da porta dinâmica e <server-ip> representa o endereço IP do servidor.

Captura de tela do Monitor de Rede que tem um filtro aplicado.

Nos dados filtrados, procure evidências de que o cliente se conectou com êxito à porta dinâmica ou procure quaisquer problemas de rede que possam ter ocorrido.

Porta não acessível

A causa mais comum de erros de "servidor RPC indisponível" é que o cliente não pode se conectar à porta dinâmica que foi alocada. O rastreamento do lado do cliente mostraria as retransmissões TCP SYN para a porta dinâmica.

Captura de tela do Monitor de Rede que mostra as retransmissões TCP SYN.

Esse comportamento indica que uma das seguintes condições está bloqueando a comunicação:

  • O intervalo de portas dinâmicas está bloqueado no firewall no ambiente.
  • Um dispositivo intermediário está descartando os pacotes.
  • O servidor de destino está descartando os pacotes. Essa condição pode ser causada por configurações como descarte de pacotes da WFP (Plataforma de Filtragem do Windows), descarte de pacotes NIC (Placa de Interface de Rede) ou modificações do driver de filtro.

Coletando dados para uma solução de problemas mais profunda

Antes de entrar em contato com o suporte da Microsoft, recomendamos que você colete informações sobre o problema.

Pré-requisitos

Esses procedimentos usam o conjunto de ferramentas TroubleShootingScript (TSS). Para usar esse conjunto de ferramentas, você deve estar ciente dos seguintes pré-requisitos:

  • Você deve ter permissão de nível de administrador no computador local.

  • Na primeira vez que você executar o conjunto de ferramentas, precisará aceitar um EULA.

  • Verifique se a política de execução de script do Windows PowerShell para o computador está definida como RemoteSigned. Para obter mais informações sobre a política de execução do PowerShell, consulte about_Execution_Policies.

    Observação

    Se o seu ambiente impedir que você use RemoteSigned no nível do computador, você poderá defini-lo temporariamente no nível do processo. Para fazer isso, execute o seguinte cmdlet em uma janela elevada do Prompt de Comando do Powershell antes de iniciar a ferramenta:

    PS C:\> Set-ExecutionPolicy -scope Process -ExecutionPolicy RemoteSigned
    

    Para verificar se a alteração entra em vigor, execute o PS C:\> Get-ExecutionPolicy -List cmdlet.

    As permissões no nível do processo se aplicam apenas à sessão atual do PowerShell. Depois de fechar a janela do PowerShell, a política de execução é revertida para a configuração original.

Reúna informações importantes antes de entrar em contato com o suporte da Microsoft

  1. Baixe o TSS em todos os nós e expanda-o para a pasta C:\tss .

  2. Abra a pasta C:\tss em uma janela do Prompt de Comando do PowerShell com privilégios elevados.

  3. Inicie rastreamentos no computador com problema executando o seguinte cmdlet:

    .\TSS.ps1 -Scenario NET_RPC
    
  4. Responda ao prompt do EULA.

  5. Reproduza o problema. Você pode usar ferramentas como o Visualizador de Eventos ou wbemtest para monitorar ou testar o problema.

  6. Depois de reproduzir o problema, pare imediatamente de coletar dados.

  7. Depois que os scripts automatizados terminarem de coletar os dados necessários, anexe os dados à sua solicitação de suporte.