Condividi tramite


Indicazioni per la risoluzione dei problemi relativi a errori rpc (Remote Procedure Call)

È possibile che si verifichi un errore "Server RPC non disponibile" quando ci si connette a Strumentazione gestione Windows (WMI) o a Microsoft SQL Server, durante una sessione RPC (Remote Procedure Call) o quando si usano vari snap-in di Microsoft Management Console (MMC). L'immagine seguente mostra un esempio di errore RPC.

Screenshot di un messaggio di errore che mostra che il server RPC non è disponibile.

Si tratta di un errore di rete comune che richiede una certa familiarità di base con il processo per la risoluzione dei problemi. Per iniziare, esistono diversi termini importanti da comprendere:

  • Mapper endpoint (EPM): servizio in ascolto sul server e guida le app client alle app server usando le informazioni sulla porta e sull'UUID. Il servizio fa parte del sottosistema RPC che risolve gli endpoint dinamici in risposta alle richieste client. In alcuni casi, assegna in modo dinamico gli endpoint ai server.
  • Tower: descrive il protocollo RPC per consentire al client e al server di negoziare una connessione.
  • Piani: livelli di contenuto all'interno di una torre che contengono dati specifici, ad esempio porte, indirizzi IP e identificatori.
  • UUID: GUID noto che identifica un'applicazione RPC. Durante la risoluzione dei problemi, è possibile usare l'UUID per tenere traccia delle conversazioni RPC di un singolo tipo di applicazione (tra i molti tipi che si verificano in un singolo computer contemporaneamente).
  • Opnum: identifica una funzione che il client vuole che il server esegua. Si tratta semplicemente di un numero esadecimale. Tuttavia, un buon analizzatore di rete tradurrà automaticamente la funzione. Se la funzione non può essere identificata, contattare il fornitore dell'applicazione.
  • Porta: endpoint di comunicazione per l'applicazione client o server. EPM alloca porte dinamiche (note anche come porte elevate o porte temporanee) per i client e i server da usare.

    Note

    In genere, il numero di porta è le informazioni più importanti che verranno usate per la risoluzione dei problemi.

  • Dati Stub: i dati scambiati tra le funzioni nel client e le funzioni nel server. Questi dati sono il payload, la parte importante della comunicazione.

Funzionamento della connessione

Il diagramma seguente illustra un client che si connette a un server per eseguire un'operazione remota. Il client contatta inizialmente la porta TCP 135 nel server e quindi negozia con EPM per un numero di porta dinamico. Dopo che EPM assegna una porta, il client si disconnette e quindi usa la porta dinamica per connettersi al server.

Diagramma che mostra come un client effettua una connessione RPC a un server remoto.

Importante

Se un firewall separa il client e il server, il firewall deve consentire la comunicazione sulla porta 135 e sulle porte dinamiche assegnate da EPM. Un approccio alla gestione di questo scenario consiste nel specificare porte o intervalli di porte da usare per EPM. Per altre informazioni, vedere Configurare la modalità di allocazione delle porte dinamiche da PARTE di RPC.

Alcuni firewall consentono anche il filtro UUID. In questo scenario, se una richiesta RPC usa la porta 135 per attraversare il firewall e contattare EPM, il firewall annota l'UUID associato alla richiesta. Quando EPM risponde e invia un numero di porta dinamico per tale UUID, il firewall annota anche il numero di porta. Il firewall consente quindi le operazioni di associazione RPC per l'UUID e la porta.

Configurare il modo in cui RPC alloca le porte dinamiche

Per impostazione predefinita, EPM alloca le porte dinamiche in modo casuale dall'intervallo configurato per TCP e UDP (in base all'implementazione del sistema operativo usato). Tuttavia, questo approccio potrebbe non essere pratico, soprattutto se il client e il server devono comunicare tramite un firewall. Un metodo alternativo consiste nel specificare un numero di porta o un intervallo di numeri di porta da usare per EPM e aprire tali porte nel firewall.

Molte applicazioni windows server che si basano su RPC forniscono opzioni (ad esempio le chiavi del Registro di sistema) per personalizzare le porte consentite. I servizi Windows usano la sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet per questa attività.

Quando si specifica una porta o un intervallo di porte, usare porte esterne all'intervallo di porte comunemente usate. È possibile trovare un elenco completo delle porte server usate in Windows e nei principali prodotti Microsoft in Panoramica dei servizi e requisiti delle porte di rete per Windows. L'articolo elenca anche le applicazioni server RPC e indica quali applicazioni server RPC possono essere configurate per l'uso di porte server personalizzate oltre alle funzionalità del runtime RPC.

Importante

In questa sezione, metodo o attività viene illustrata la procedura per modificare il Registro di sistema. Se, tuttavia, si modifica il Registro di sistema in modo errato, possono verificarsi gravi problemi. Pertanto, assicurarsi di osservare attentamente la procedura seguente. Al fine di protezione, eseguire il backup del registro di sistema prima di modificarlo, in modo da poterlo ripristinare in caso di problemi. Per ulteriori informazioni su come eseguire il backup e il ripristino del Registro di sistema, vedi Come eseguire il backup e il ripristino del Registro di sistema in Windows.

Per impostazione predefinita, la chiave Internet non esiste. Pertanto, è necessario crearlo. Per la chiave Internet , è possibile configurare le voci seguenti:

  • Porte REG_MULTI_SZ: specifica una porta o un intervallo inclusivo di porte. Le altre voci visualizzate in Internet indicano se si tratta delle porte da usare o delle porte da escludere dall'uso.

    • Intervallo di valori: 0 - 65535
      Ad esempio, 5984 rappresenta una singola porta e 5000-5100 rappresenta un set di porte. Se i valori non sono compresi nell'intervallo compreso tra 0 e 65535 o se non è possibile interpretare alcun valore, il runtime RPC considera l'intera configurazione come non valida.
  • PortsInternetAvailable REG_SZ: specifica se il valore Ports rappresenta le porte da includere o le porte da escludere.

    • Valori: Y o N (senza distinzione tra maiuscole e minuscole)
      • Y: le porte elencate nella voce Porte rappresentano tutte le porte in quel computer disponibili per EPM.
      • N: le porte elencate nella voce Porte rappresentano tutte le porte non disponibili per EPM.
  • UseInternetPorts REG_SZ: specifica i criteri di sistema predefiniti.

    • Valori: Y o N (senza distinzione tra maiuscole e minuscole)
      • Y: i processi che usano i criteri di sistema predefiniti sono porte assegnate dal set di porte disponibili per Internet, come definito in precedenza.
      • N: i processi che usano i criteri di sistema predefiniti sono porte assegnate dal set di porte solo Intranet.

È consigliabile aprire un intervallo di porte maggiore della porta 5000. I numeri di porta minori di 5000 potrebbero essere già in uso da altre applicazioni e potrebbero causare conflitti con le applicazioni DCOM. Inoltre, l'esperienza precedente mostra che devono essere aperte almeno 100 porte. Ciò è dovuto al fatto che diversi servizi di sistema si basano su queste porte RPC per comunicare tra loro.

Note

Il numero minimo di porte necessarie può differire dal computer al computer. I computer che supportano più traffico potrebbero riscontrare un esaurimento delle porte se le porte dinamiche RPC sono limitate. Prendere in considerazione questo aspetto se si limita l'intervallo di porte.

Avviso

Se si verifica un errore nella configurazione della porta o non sono presenti porte sufficienti nel pool, EPM non può registrare applicazioni server RPC (inclusi i servizi Windows, ad esempio Netlogon) che usano endpoint dinamici. Se si verifica un errore di configurazione, il codice di errore è 87 (0x57) ERROR_INVALID_PARAMETER. Ad esempio, se non sono presenti porte sufficienti, Netlogon registra l'evento 5820:

Nome registro: sistema
Origine: NETLOGON
ID evento: 5820
Livello: Errore
Parole chiave: Classico
Descrizione:
Il servizio Netlogon non è riuscito ad aggiungere l'interfaccia RPC AuthZ. Il servizio è stato terminato. Si è verificato l'errore seguente: 'Il parametro non è corretto'.

Per altre informazioni sul funzionamento di RPC, vedere RPC su IT/Pro.

Esempio di configurazione di una porta personalizzata

In questo esempio le porte da 5000 a 6000 (incluse) sono state selezionate arbitrariamente per illustrare come configurare le nuove voci del Registro di sistema. Questo esempio non è una raccomandazione di un numero minimo di porte richieste da un particolare sistema. Una configurazione di questo tipo richiede l'aggiunta della chiave Internet in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc e l'aggiunta delle voci seguenti:

  • Porte MULTI_SZ
    • Tipo di dati: MULTI_SZ
    • Valore: 5000-6000
  • PortsInternetAvailable REG_SZ
    • Tipo di dati: REG_SZ
    • Valore: Y
  • UseInternetPorts REG_SZ
    • Tipo di dati: REG_SZ
    • Valore: Y

Il computer deve essere riavviato per rendere effettiva questa configurazione. Successivamente, a tutte le applicazioni che usano RPC vengono assegnate porte dinamiche nell'intervallo compreso tra 5000 e 6000 (inclusi).

Risoluzione degli errori RPC

PortQry

PortQry fornisce informazioni rapide sul funzionamento di RPC prima di approfondire i dati di traccia di rete. È possibile determinare rapidamente se è possibile stabilire una connessione eseguendo il comando seguente nel computer client:

Portqry.exe -n <ServerIP> -e 135

Note

In questo comando ServerIP <> rappresenta l'indirizzo IP del server che si sta contattando.

Si consideri, ad esempio, il comando seguente:

Portqry.exe -n 10.10.10.10 -e 135

Questo comando genera un output simile all'estratto seguente:

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]

Esaminando questo output, è possibile determinare le informazioni seguenti:

  • IL DNS funziona correttamente (ha risolto l'indirizzo IP in un nome di dominio completo (FQDN)).
  • PortQry ha contattato la porta RPC (135) nel computer di destinazione.
  • EPM ha risposto a PortQry e ha assegnato la porta dinamica 49664 (racchiusa tra parentesi quadre) per le comunicazioni successive.
  • PortQry riconnessa alla porta 49664.

Se uno di questi passaggi ha esito negativo, in genere è possibile iniziare a raccogliere tracce di rete simultanee, come descritto nella sezione successiva.

Per altre informazioni su PortQry, vedere Uso dello strumento da riga di comando PortQry.

Netsch

È possibile usare lo strumento Netsh di Windows per raccogliere i dati di traccia di rete contemporaneamente nel client e nel server.

Per raccogliere tracce di rete simultanee, aprire una finestra del prompt dei comandi con privilegi elevati sia nel client che nel server.

Nel client eseguire il comando seguente:

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

Nel server eseguire il comando seguente:

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

A questo punto, provare a riprodurre il problema nel computer client. Eseguire quindi il comando seguente al prompt dei comandi in entrambe le finestre per arrestare le tracce:

Netsh trace stop

Aprire i file di traccia in Microsoft Network Monitor 3.4 o Message Analyzer e filtrare i dati di traccia per l'indirizzo IP del server o dei computer client e della porta TCP 135. Ad esempio, usare stringhe di filtro come le seguenti:

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

    In questa stringa di filtro, <client-ip> rappresenta l'indirizzo IP del client e <server-ip> rappresenta l'indirizzo IP del server.

  • tcp.port==135

Nei dati filtrati cercare la voce EPM nella colonna Protocollo .

Cercare una risposta da EPM (nel server) che include un numero di porta dinamico. Se il numero di porta dinamico è presente, annotarlo per riferimento futuro.

Screenshot di Monitoraggio di rete che mostra la porta dinamica evidenziata.

Filtrare nuovamente i dati di traccia per il numero di porta dinamica e l'indirizzo IP del server. Ad esempio, usare una stringa di filtro, ad esempio tcp.port==<dynamic-port-allocate> e ipv4.address==<server-ip.> In questa stringa di filtro, <dynamic-port-allocate> rappresenta il numero di porta dinamico e <server-ip> rappresenta l'indirizzo IP del server.

Screenshot di Monitoraggio di rete con un filtro applicato.

Nei dati filtrati cercare l'evidenza che il client si è connesso correttamente alla porta dinamica o cercare eventuali problemi di rete che potrebbero essersi verificati.

Porta non raggiungibile

La causa più comune degli errori "Server RPC non disponibile" è che il client non è in grado di connettersi alla porta dinamica allocata. La traccia sul lato client mostrerà quindi ritrasmetti TCP SYN per la porta dinamica.

Screenshot di Monitoraggio di rete che mostra i ritrasmetti TCP SYN.

Questo comportamento indica che una delle condizioni seguenti blocca la comunicazione:

  • L'intervallo di porte dinamiche è bloccato nel firewall nell'ambiente.
  • Un dispositivo centrale sta rilasciando i pacchetti.
  • Il server di destinazione elimina i pacchetti. Questa condizione può essere causata da configurazioni come l'eliminazione di pacchetti Windows Filtering Platform (WFP), l'eliminazione di pacchetti della scheda di interfaccia di rete (NIC) o le modifiche del driver di filtro.

Raccolta di dati per una risoluzione più approfondita dei problemi

Prima di contattare il supporto tecnico Microsoft, è consigliabile raccogliere informazioni sul problema.

Prerequisiti

Queste procedure usano il set di strumenti TSS (TroubleShootingScript). Per usare questo set di strumenti, è necessario tenere presente i prerequisiti seguenti:

  • È necessario disporre dell'autorizzazione a livello di amministratore nel computer locale.

  • La prima volta che si esegue il set di strumenti, è necessario accettare un contratto di licenza.

  • Assicurarsi che i criteri di esecuzione degli script di Windows PowerShell per il computer siano impostati su RemoteSigned. Per altre informazioni sui criteri di esecuzione di PowerShell, vedere about_Execution_Policies.

    Note

    Se l'ambiente impedisce l'uso RemoteSigned a livello di computer, è possibile impostarlo temporaneamente a livello di processo. A tale scopo, eseguire il cmdlet seguente in una finestra del prompt dei comandi di PowerShell con privilegi elevati prima di avviare lo strumento:

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

    Per verificare che la modifica abbia effetto, eseguire il PS C:\> Get-ExecutionPolicy -List cmdlet .

    Le autorizzazioni a livello di processo si applicano solo alla sessione di PowerShell corrente. Dopo aver chiuso la finestra di PowerShell, il criterio di esecuzione ripristina l'impostazione originale.

Raccogliere le informazioni chiave prima di contattare il supporto tecnico Microsoft

  1. Scaricare TSS in tutti i nodi ed espanderlo nella cartella C:\tss .

  2. Aprire la cartella C:\tss in una finestra del prompt dei comandi di PowerShell con privilegi elevati.

  3. Avviare le tracce nel computer del problema eseguendo il cmdlet seguente:

    .\TSS.ps1 -Scenario NET_RPC
    
  4. Rispondere al prompt del contratto di licenza.

  5. Riprodurre il problema. È possibile usare strumenti come Visualizzatore eventi o wbemtest per monitorare o testare il problema.

  6. Dopo aver riprodotto il problema, interrompere immediatamente la raccolta dei dati.

  7. Al termine della raccolta dei dati necessari, allegare i dati alla richiesta di supporto.