Partager via


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

S’applique à : Windows Client

Vous pouvez rencontrer une erreur « Serveur RPC indisponible » lorsque vous vous connectez à Windows Management Instrumentation (WMI) ou à Microsoft SQL Server, pendant 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 indiquant que l’erreur suivante s’est produite : le serveur RPC n’est pas disponible.

Il s’agit d’une erreur réseau courante qui nécessite une certaine connaissance de base du processus pour résoudre 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.
  • Tour : décrit le protocole RPC pour permettre au client et au serveur de négocier une connexion.
  • Étages : couches de contenu dans une tour qui contiennent des données spécifiques, telles que des ports, des adresses IP et des identificateurs.
  • UUID : GUID connu qui identifie une application RPC. Pendant la résolution des problèmes, vous pouvez utiliser l’UUID pour suivre les conversations RPC d’un seul type d’application (parmi les nombreux types qui se produisent sur un seul ordinateur à la fois).
  • Opnum : identifie une fonction que le client souhaite que le serveur exécute. 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. L’EPM alloue des ports dynamiques (également appelés ports élevés ou ports éphémères) pour les clients et les serveurs à utiliser.

    Remarque

    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 qui se connecte à un serveur pour exécuter une opération à distance. Le client contacte initialement le port TCP 135 sur le serveur, puis négocie avec EPM un numéro de port dynamique. Une fois qu’EPM a affecté 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.

Importante

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. Une approche de gestion de ce scénario consiste à spécifier des ports ou des plages de ports pour EPM à utiliser. 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. Quand 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 via un pare-feu. Une autre méthode consiste à spécifier un numéro de port ou une plage de numéros de port pour EPM à utiliser, puis à 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 Vue d’ensemble du service et configuration requise des 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 de serveur personnalisés au-delà des fonctionnalités du runtime RPC.

Importante

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, veillez à suivre ces étapes scrupuleusement. 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 procédure de sauvegarde et de restauration du Registre, consultez l’article Comment sauvegarder et restaurer le 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 de ports inclusive. 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 sont en dehors de la plage comprise entre 0 et 65535, ou si une valeur ne peut pas être interprétée, le runtime RPC traite la configuration entière comme non valide.
  • PortsInternetAvailable REG_SZ : spécifie si la valeur Ports représente les ports à inclure ou les ports à exclure.

    • Valeurs : Y ou N (ne respectant pas 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 (ne respectant pas la casse)
      • Y : Les processus qui utilisent la stratégie système par défaut se voient attribuer des 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 se voient attribuer des ports à partir de l’ensemble de ports intranet uniquement.

Vous devez ouvrir une plage de ports qui sont supérieurs 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 ils peuvent entraîner des conflits avec vos applications DCOM. En outre, l’expérience précédente montre qu’un minimum de 100 ports doivent être ouverts. Cela est dû au fait que plusieurs services système s’appuient sur ces ports RPC pour communiquer entre eux.

Remarque

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

Avertissement

En cas d’erreur dans la configuration du port ou s’il n’y a pas suffisamment de ports dans le pool, EPM ne peut pas inscrire les 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 assez 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é

Dans cet exemple, les ports 5000 à 6000 (inclus) ont été sélectionnés arbitrairement pour illustrer la façon dont les nouvelles entrées de Registre peuvent être configurées. 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\Rpcet 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 se voient attribuer des ports dynamiques compris entre 5 000 et 6 000 (inclus).

Résolution des erreurs RPC

PortQry

PortQry fournit des informations rapides sur le fonctionnement de RPC avant de vous plonger dans les données de trace réseau. Vous pouvez déterminer rapidement si vous pouvez établir une connexion en exécutant la commande suivante sur l’ordinateur client :

Portqry.exe -n <ServerIP> -e 135

Remarque

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

Par exemple, considérez la commande suivante :

Portqry.exe -n 169.254.0.2 -e 135

Cette commande produit une sortie qui ressemble à l’extrait suivant :

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]

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 (entre crochets) pour la communication suivante.
  • 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 Utilisation de l’outil en ligne de commande PortQry.

Netsh

Vous pouvez utiliser l’outil Netsh windows pour collecter des données de trace réseau simultanément 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. Ensuite, exécutez 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 le 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 <server-ip> 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-allocated> et ipv4.address==<server-ip>. Dans cette chaîne de filtre, <dynamic-port-allocation> représente le numéro de port dynamique et <server-ip> représente l’adresse IP du serveur.

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

Dans les données filtrées, recherchez la preuve que le client s’est correctement connecté au port dynamique, ou recherchez les problèmes réseau qui ont pu se produire.

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 alors 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 :

  • La plage de ports dynamiques est bloquée sur le pare-feu dans l’environnement.
  • Un appareil intermédiaire supprime les paquets.
  • Le serveur de destination supprime les paquets. Cette condition peut être due à des configurations telles que la suppression de paquets de la plateforme de filtrage Windows (PAM), la suppression de paquets de carte d’interface réseau (NIC) ou des modifications du pilote de filtre .

Collecte de données pour un dépannage plus approfondi

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

Configuration requise

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

  • 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.

  • Assurez-vous que la stratégie d’exécution de script Windows PowerShell pour l’ordinateur est définie sur RemoteSigned. Pour plus d’informations sur la stratégie d’exécution PowerShell, consultez about_Execution_Policies.

    Remarque

    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. Une fois que vous avez 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 suivis sur l’ordinateur problématique en exécutant l’applet de commande suivante :

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

  5. Reproduisez le problème. Vous pouvez utiliser des outils tels que 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 la collecte des données.

  7. Une fois que les scripts automatisés ont fini de collecter les données requises, attachez les données à votre demande de support.