Conseils de résolution des erreurs d’appel de procédure distante (RPC)

Vous pouvez rencontrer une erreur « Serveur RPC indisponible » lorsque vous vous connectez à Windows Management Instrumentation (WMI) ou Microsoft SQL Server, lors d’une session d’appel de procédure distante (RPC) ou lorsque vous utilisez différents composants logiciels enfichables MMC (Microsoft Management Console). L’image suivante montre un exemple d’erreur RPC.

Capture d’écran d’un message d’erreur montrant que le serveur RPC n’est pas disponible.

Il s’agit d’une erreur réseau courante qui nécessite une connaissance de base du processus pour résoudre correctement les problèmes. Pour commencer, il existe plusieurs termes importants à comprendre :

  • Mappeur de point de terminaison (EPM) : service qui écoute sur le serveur et guide les applications clientes vers les applications serveur à l’aide des informations de port et d’UUID. Le service fait partie du sous-système RPC qui résout les points de terminaison dynamiques en réponse aux demandes du client. Dans certains cas, il affecte dynamiquement des points de terminaison aux serveurs.
  • Tour : décrit le protocole RPC pour permettre au client et au serveur de négocier une connexion.
  • Étages : couches de contenu au sein d’une tour qui contiennent des données spécifiques, telles que des ports, des adresses IP et des identificateurs.
  • UUID : GUID bien connu qui identifie une application RPC. Lors de la résolution des problèmes, vous pouvez utiliser l’UUID pour suivre les conversations RPC d’un type d’application unique (parmi les nombreux types qui se produisent sur un seul ordinateur à la fois).
  • Opnum : identifie une fonction que le client souhaite que le serveur effectue. Il s’agit simplement d’un nombre hexadécimal. Toutefois, un bon analyseur réseau traduit la fonction pour vous. Si la fonction ne peut pas être identifiée, contactez le fournisseur de votre application.
  • Port : point de terminaison de communication pour l’application cliente ou serveur. Le module EPM alloue des ports dynamiques (également appelés ports élevés ou ports éphémères) pour les clients et les serveurs à utiliser.

    Note

    En règle générale, le numéro de port est les informations les plus importantes que vous utiliserez pour la résolution des problèmes.

  • Données stub : données échangées entre les fonctions sur le client et les fonctions sur le serveur. Ces données sont la charge utile, la partie importante de la communication.

Fonctionnement de la connexion

Le diagramme suivant montre un client se connectant à un serveur pour exécuter une opération distante. Le client contacte initialement le port TCP 135 sur le serveur, puis négocie avec EPM pour un numéro de port dynamique. Une fois que EPM affecte un port, le client se déconnecte, puis utilise le port dynamique pour se connecter au serveur.

Diagramme montrant comment un client établit une connexion RPC à un serveur distant.

Important

Si un pare-feu sépare le client et le serveur, le pare-feu doit autoriser la communication sur le port 135 et sur les ports dynamiques attribués par EPM. L’une des approches de gestion de ce scénario consiste à spécifier des ports ou des plages de ports à utiliser pour EPM. Pour plus d’informations, consultez Configurer la façon dont RPC alloue des ports dynamiques.

Certains pare-feu autorisent également le filtrage UUID. Dans ce scénario, si une requête RPC utilise le port 135 pour traverser le pare-feu et contacter EPM, le pare-feu note l’UUID associé à la requête. Lorsque EPM répond et envoie un numéro de port dynamique pour cet UUID, le pare-feu note également le numéro de port. Le pare-feu autorise ensuite les opérations de liaison RPC pour cet UUID et ce port.

Configurer la façon dont RPC alloue des ports dynamiques

Par défaut, EPM alloue des ports dynamiques de manière aléatoire à partir de la plage configurée pour TCP et UDP (en fonction de l’implémentation du système d’exploitation utilisé). Toutefois, cette approche peut ne pas être pratique, en particulier si le client et le serveur doivent communiquer par le biais d’un pare-feu. Une autre méthode consiste à spécifier un numéro de port ou une plage de numéros de port à utiliser pour EPM et à ouvrir ces ports dans le pare-feu.

De nombreuses applications serveur Windows qui s’appuient sur RPC fournissent des options (telles que des clés de Registre) pour personnaliser les ports autorisés. Les services Windows utilisent la sous-clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet pour cette tâche.

Lorsque vous spécifiez un port ou une plage de ports, utilisez des ports qui se trouvent en dehors de la plage des ports couramment utilisés. Vous trouverez une liste complète des ports serveur utilisés dans Windows et les principaux produits Microsoft dans la vue d’ensemble du service et les exigences relatives aux ports réseau pour Windows. L’article répertorie également les applications serveur RPC et mentionne les applications serveur RPC qui peuvent être configurées pour utiliser des ports serveur personnalisés au-delà des fonctionnalités du runtime RPC.

Important

Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, vérifiez que vous suivez ces étapes attentivement. Pour pallier à toute éventualité, sauvegardez le Registre avant de le modifier afin de pouvoir le restaurer en cas de problème. Pour plus d’informations sur la sauvegarde et la restauration du registre, voir : Procédure de sauvegarde, de modification et de restauration du Registre dans Windows.

Par défaut, la clé Internet n’existe pas. Par conséquent, vous devez le créer. Pour la clé Internet , vous pouvez configurer les entrées suivantes :

  • Ports REG_MULTI_SZ : spécifie un port ou une plage inclusive de ports. Les autres entrées qui apparaissent sous Internet indiquent s’il s’agit des ports à utiliser ou des ports à exclure de l’utilisation.

    • Plage de valeurs : 0 - 65535
      Par exemple, 5984 représente un seul port, et 5000 à 5100 représente un ensemble de ports. Si des valeurs se trouvent en dehors de la plage de 0 à 65535, ou si aucune valeur ne peut être interprétée, le runtime RPC traite toute la configuration comme non valide.
  • PortsInternetAvailable REG_SZ : spécifie si la valeur ports représente les ports à inclure ou à exclure.

    • Valeurs : Y ou N (non sensibles à la casse)
      • Y : les ports répertoriés dans l’entrée Ports représentent tous les ports de cet ordinateur qui sont disponibles pour EPM.
      • N : Les ports répertoriés dans l’entrée Ports représentent tous les ports qui ne sont pas disponibles pour EPM.
  • UseInternetPorts REG_SZ : spécifie la stratégie système par défaut.

    • Valeurs : Y ou N (non sensibles à la casse)
      • Y : Les processus qui utilisent la stratégie système par défaut sont attribués aux ports à partir de l’ensemble de ports disponibles sur Internet, comme défini précédemment.
      • N : Les processus qui utilisent la stratégie système par défaut sont affectés aux ports à partir de l’ensemble de ports intranet uniquement.

Vous devez ouvrir une plage de ports supérieur au port 5000. Les numéros de port qui sont inférieurs à 5 000 peuvent déjà être utilisés par d’autres applications et peuvent entraîner des conflits avec vos applications DCOM. En outre, l’expérience précédente montre qu’un minimum de 100 ports doit être ouvert. Cela est dû au fait que plusieurs services système s’appuient sur ces ports RPC pour communiquer entre eux.

Note

Le nombre minimal de ports requis peut différer de l’ordinateur à l’ordinateur. Les ordinateurs qui prennent en charge davantage de trafic peuvent rencontrer une épuisement des ports si les ports dynamiques RPC sont restreints. Prenez cela en compte si vous limitez la plage de ports.

Avertissement

S’il existe une erreur dans la configuration du port ou s’il n’y a pas suffisamment de ports dans le pool, EPM ne peut pas inscrire d’applications serveur RPC (y compris les services Windows tels que Netlogon) qui utilisent des points de terminaison dynamiques. Si une erreur de configuration se produit, le code d’erreur est 87 (0x57) ERROR_INVALID_PARAMETER. Par exemple, s’il n’y a pas suffisamment de ports, Netlogon journalise l’événement 5820 :

Nom du journal : système
Source : NETLOGON
ID d’événement : 5820
Niveau : Erreur
Mots clés : Classique
Description :
Le service Netlogon n’a pas pu ajouter l’interface RPC AuthZ. Le service a été arrêté. L’erreur suivante s’est produite : « Le paramètre est incorrect . »

Pour plus d’informations sur le fonctionnement de RPC, consultez RPC sur it/Pro.

Exemple de configuration de port personnalisée

Dans cet exemple, les ports 5000 à 6000 (inclus) ont été sélectionnés arbitrairement pour illustrer la configuration des nouvelles entrées de Registre. Cet exemple n’est pas une recommandation d’un nombre minimal de ports requis par un système particulier. Une telle configuration nécessite l’ajout de la clé Internet sous HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc et l’ajout des entrées suivantes :

  • Ports MULTI_SZ
    • Type de données : MULTI_SZ
    • Valeur : 5000-6000
  • PortsInternetAvailable REG_SZ
    • Type de données : REG_SZ
    • Valeur : Y
  • UseInternetPorts REG_SZ
    • Type de données : REG_SZ
    • Valeur : Y

L’ordinateur doit redémarrer pour que cette configuration prenne effet. Après cela, toutes les applications qui utilisent RPC reçoivent des ports dynamiques compris entre 5 000 et 6 000 (inclus).

Résolution des erreurs RPC

PortQry

PortQry fournit un aperçu rapide du fonctionnement de RPC avant de vous plonger dans les données de trace réseau. Vous pouvez rapidement déterminer si vous pouvez établir une connexion en exécutant la commande suivante sur l’ordinateur client :

Portqry.exe -n <ServerIP> -e 135

Note

Dans cette commande, <ServerIP> représente l’adresse IP du serveur que vous contactez.

Par exemple, considérez la commande suivante :

Portqry.exe -n 10.10.10.10 -e 135

Cette commande produit une sortie semblable à l’extrait suivant :

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]

En examinant cette sortie, vous pouvez déterminer les informations suivantes :

  • DNS fonctionne correctement (il a résolu l’adresse IP en nom de domaine complet (FQDN)).
  • PortQry a contacté le port RPC (135) sur l’ordinateur cible.
  • EPM a répondu à PortQry et affecté le port dynamique 49664 (placé entre crochets) pour la communication ultérieure.
  • PortQry reconnecté au port 49664.

Si l’une de ces étapes échoue, vous pouvez généralement commencer à collecter des traces réseau simultanées, comme décrit dans la section suivante.

Pour plus d’informations sur PortQry, consultez l’outil en ligne de commande PortQry.

Netsh

Vous pouvez utiliser l’outil Netsh Windows pour collecter simultanément les données de trace réseau sur le client et le serveur.

Pour collecter des traces réseau simultanées, ouvrez une fenêtre d’invite de commandes avec élévation de privilèges sur le client et le serveur.

Sur le client, exécutez la commande suivante :

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

Sur le serveur, exécutez la commande suivante :

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

À présent, essayez de reproduire votre problème sur l’ordinateur client. Exécutez ensuite la commande suivante à l’invite de commandes dans les deux fenêtres pour arrêter les traces :

Netsh trace stop

Ouvrez les fichiers de trace dans Microsoft Network Monitor 3.4 ou Message Analyzer, puis filtrez les données de trace pour l’adresse IP du serveur ou des ordinateurs clients et du port TCP 135. Par exemple, utilisez des chaînes de filtre telles que les suivantes :

  • Ipv4.address==<client-ip> et ipv4.address==<server-ip> et tcp.port==135

    Dans cette chaîne de filtre, <client-ip> représente l’adresse IP du client, et< l’adresse IP> du serveur représente l’adresse IP du serveur.

  • tcp.port==135

Dans les données filtrées, recherchez l’entrée EPM dans la colonne Protocole .

Recherchez une réponse d’EPM (sur le serveur) qui inclut un numéro de port dynamique. Si le numéro de port dynamique est présent, notez-le pour référence ultérieure.

Capture d’écran du Moniteur réseau montrant le port dynamique mis en surbrillance.

Filtrez à nouveau les données de trace pour le numéro de port dynamique et l’adresse IP du serveur. Par exemple, utilisez une chaîne de filtre telle que tcp.port==<dynamic-port-allocation> et ipv4.address==<server-ip.> Dans cette chaîne de filtre, <le port dynamique alloué> représente le numéro de port dynamique et <l’adresse IP> du serveur représente l’adresse IP du serveur.

Capture d’écran du moniteur réseau sur lequel un filtre est appliqué.

Dans les données filtrées, recherchez des preuves que le client s’est connecté avec succès au port dynamique, ou recherchez les problèmes réseau susceptibles d’avoir eu lieu.

Port inaccessible

La cause la plus courante des erreurs « Serveur RPC indisponible » est que le client ne peut pas se connecter au port dynamique qui a été alloué. La trace côté client affiche ensuite les retransmites TCP SYN pour le port dynamique.

Capture d’écran du Moniteur réseau montrant les retransmites TCP SYN.

Ce comportement indique que l’une des conditions suivantes bloque la communication :

Collecte de données pour une résolution plus approfondie des problèmes

Avant de contacter le support Microsoft, nous vous recommandons de recueillir des informations sur votre problème.

Prerequisites

Ces procédures utilisent l’ensemble d’outils TSS (TroubleShootingScript ). Pour utiliser cet ensemble d’outils, vous devez connaître les conditions préalables suivantes :

  • Vous devez disposer d’une autorisation de niveau administrateur sur l’ordinateur local.

  • La première fois que vous exécutez l’ensemble d’outils, vous devez accepter un CLUF.

  • Vérifiez que la stratégie d’exécution de script Windows PowerShell pour l’ordinateur est définie RemoteSignedsur . Pour plus d’informations sur la stratégie d’exécution de PowerShell, consultez about_Execution_Policies.

    Note

    Si votre environnement vous empêche d’utiliser RemoteSigned au niveau de l’ordinateur, vous pouvez le définir temporairement au niveau du processus. Pour ce faire, exécutez l’applet de commande suivante dans une fenêtre d’invite de commandes PowerShell avec élévation de privilèges avant de démarrer l’outil :

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

    Pour vérifier que la modification prend effet, exécutez l’applet de PS C:\> Get-ExecutionPolicy -List commande.

    Les autorisations au niveau du processus s’appliquent uniquement à la session PowerShell actuelle. Après avoir fermé la fenêtre PowerShell, la stratégie d’exécution revient au paramètre d’origine.

Collecter les informations clés avant de contacter le support Microsoft

  1. Téléchargez TSS sur tous les nœuds et développez-le dans le dossier C :\tss .

  2. Ouvrez le dossier C :\tss dans une fenêtre d’invite de commandes PowerShell avec élévation de privilèges.

  3. Démarrez les traces sur l’ordinateur problématique en exécutant l’applet de commande suivante :

    .\TSS.ps1 -Scenario NET_RPC
    
  4. Répondez à l’invite du CLUF.

  5. Reproduisez le problème. Vous pouvez utiliser des outils tels que l’Observateur d’événements ou wbemtest pour surveiller ou tester le problème.

  6. Après avoir reproduit le problème, arrêtez immédiatement de collecter des données.

  7. Une fois les scripts automatisés terminés de collecter les données requises, joignez les données à votre demande de support.