Wskazówki dotyczące rozwiązywania problemów z błędami zdalnego wywołania procedury (RPC)

Dotyczy: Klient systemu Windows

Błąd "Serwer RPC niedostępny" może wystąpić podczas nawiązywania połączenia z instrumentacją zarządzania windows (WMI) lub microsoft SQL Server, podczas sesji zdalnego wywołania procedury (RPC) lub w przypadku korzystania z różnych przystawek programu Microsoft Management Console (MMC). Na poniższej ilustracji przedstawiono przykład błędu RPC.

Zrzut ekranu przedstawiający komunikat o błędzie informujący, że wystąpił następujący błąd: serwer RPC jest niedostępny.

Jest to typowy błąd sieciowy, który wymaga podstawowej znajomości procesu, aby pomyślnie rozwiązać problemy. Aby rozpocząć, istnieje kilka ważnych terminów do zrozumienia:

  • Mapowanie punktu końcowego (EPM): usługa, która nasłuchuje na serwerze i prowadzi aplikacje klienckie do aplikacji serwera przy użyciu informacji o porcie i identyfikatorze UUID.
  • Tower: opisuje protokół RPC, aby umożliwić klientowi i serwerowi negocjowanie połączenia.
  • Podłogi: warstwy zawartości w wieży zawierające określone dane, takie jak porty, adresy IP i identyfikatory.
  • UUID: dobrze znany identyfikator GUID, który identyfikuje aplikację RPC. Podczas rozwiązywania problemów można użyć identyfikatora UUID do śledzenia konwersacji RPC pojedynczego typu aplikacji (spośród wielu typów występujących jednocześnie na jednym komputerze).
  • Opnum: identyfikuje funkcję, którą klient chce wykonać na serwerze. Jest to po prostu liczba szesnastkowa. Jednak dobry analizator sieci przetłumaczy funkcję za Ciebie. Jeśli nie można zidentyfikować funkcji, skontaktuj się z dostawcą aplikacji.
  • Port: punkt końcowy komunikacji dla aplikacji klienckiej lub serwerowej. Program EPM przydziela porty dynamiczne (nazywane również wysokimi portami lub portami efemerycznymi) dla klientów i serwerów do użycia.

    Uwaga

    Zazwyczaj numer portu to najważniejsze informacje, których użyjesz do rozwiązywania problemów.

  • Dane wycinka: dane wymieniane między funkcjami na kliencie i funkcjami na serwerze. Te dane są ładunkiem, ważną częścią komunikacji.

Jak działa połączenie

Na poniższym diagramie przedstawiono klienta łączącego się z serwerem w celu uruchomienia operacji zdalnej. Klient początkowo kontaktuje się z portem TCP 135 na serwerze, a następnie negocjuje z programem EPM numer portu dynamicznego. Po przypisaniu portu przez program EPM klient rozłącza się, a następnie używa portu dynamicznego do nawiązania połączenia z serwerem.

Diagram przedstawiający sposób nawiązywania przez klienta połączenia RPC z serwerem zdalnym.

Ważna

Jeśli zapora oddziela klienta i serwer, zapora musi zezwalać na komunikację na porcie 135 i na portach dynamicznych przypisywanych przez program EPM. Jednym z podejść do zarządzania tym scenariuszem jest określenie portów lub zakresów portów do użycia przez program EPM. Aby uzyskać więcej informacji, zobacz Konfigurowanie sposobu przydzielania portów dynamicznych przez usługę RPC.

Niektóre zapory umożliwiają również filtrowanie identyfikatorów UUID. W tym scenariuszu, jeśli żądanie RPC używa portu 135 do przekroczenia zapory i kontaktuje się z programem EPM, zapora zwraca uwagę na identyfikator UUID skojarzony z żądaniem. Gdy program EPM odpowiada i wysyła numer portu dynamicznego dla tego identyfikatora UUID, zapora zwraca również numer portu. Następnie zapora zezwala na operacje powiązania RPC dla tego identyfikatora UUID i portu.

Konfigurowanie sposobu przydzielania portów dynamicznych przez usługę RPC

Domyślnie program EPM losowo przydziela porty dynamiczne z zakresu skonfigurowanego dla protokołów TCP i UDP (na podstawie implementacji używanego systemu operacyjnego). Jednak takie podejście może nie być praktyczne, zwłaszcza jeśli klient i serwer muszą komunikować się za pośrednictwem zapory. Alternatywną metodą jest określenie numeru portu lub zakresu numerów portów do użycia przez program EPM i otwarcie tych portów w zaporze.

Wiele aplikacji systemu Windows Server, które korzystają z RPC, udostępnia opcje (takie jak klucze rejestru) w celu dostosowania dozwolonych portów. Usługi systemu Windows używają podklucza HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet dla tego zadania.

Po określeniu zakresu portów lub portów należy użyć portów spoza zakresu powszechnie używanych portów. Pełną listę portów serwera używanych w systemie Windows i głównych produktach firmy Microsoft można znaleźć w temacie Omówienie usługi i wymagania dotyczące portów sieciowych dla systemu Windows. W tym artykule wymieniono również aplikacje serwera RPC i wspomniano, które aplikacje serwera RPC można skonfigurować do używania niestandardowych portów serwera poza możliwościami środowiska uruchomieniowego RPC.

Ważna

W tej sekcji, metodzie lub w tym zadaniu podano informacje dotyczące modyfikowania rejestru. Niepoprawne zmodyfikowanie rejestru może jednak być przyczyną poważnych problemów. Dlatego należy uważnie wykonywać podane czynności. Aby uzyskać dodatkową ochronę, należy przed rozpoczęciem wykonania tej modyfikacji wykonać kopię zapasową rejestru, aby rejestr mógł zostać przywrócony w przypadku wystąpienia problemu. Aby uzyskać więcej informacji na temat sposobu tworzenia kopii zapasowych, przywracania i modyfikowania rejestru, zobacz artykuł Tworzenie kopii zapasowych i przywracanie rejestru systemu Microsoft Windows.

Domyślnie klucz internetowy nie istnieje. W związku z tym należy go utworzyć. Dla klucza internetowego można skonfigurować następujące wpisy:

  • Porty REG_MULTI_SZ: określa port lub zakres portów włącznie. Inne wpisy wyświetlane w Internecie wskazują, czy są to porty do użycia, czy porty do wykluczenia z użycia.

    • Zakres wartości: 0 - 65535
      Na przykład wartość 5984 reprezentuje pojedynczy port, a 5000–5100 reprezentuje zestaw portów. Jeśli jakiekolwiek wartości wykraczają poza zakres od 0 do 65535 lub nie można interpretować żadnej wartości, środowisko uruchomieniowe RPC traktuje całą konfigurację jako nieprawidłową.
  • PortsInternetAvailable REG_SZ: określa, czy wartość Porty reprezentuje porty do uwzględnienia lub porty do wykluczenia.

    • Wartości: Y lub N (bez uwzględniania wielkości liter)
      • Y: porty wymienione we wpisie Porty reprezentują wszystkie porty na tym komputerze, które są dostępne dla programu EPM.
      • N: Porty wymienione we wpisie Porty reprezentują wszystkie porty, które nie są dostępne dla programu EPM.
  • UseInternetPorts REG_SZ: określa domyślne zasady systemowe.

    • Wartości: Y lub N (bez uwzględniania wielkości liter)
      • Y: Procesy korzystające z domyślnych zasad systemowych są przypisywane do portów z zestawu portów dostępnych w Internecie, zgodnie z wcześniejszymi definicjami.
      • N: Procesy korzystające z domyślnych zasad systemowych są przypisywane do portów z zestawu portów tylko intranet.

Należy otworzyć zakres portów większych niż port 5000. Numery portów, które są mniejsze niż 5000, mogą być już używane przez inne aplikacje i mogą powodować konflikty z aplikacjami DCOM. Ponadto wcześniejsze środowisko pokazuje, że należy otworzyć co najmniej 100 portów. Dzieje się tak, ponieważ kilka usług systemowych korzysta z tych portów RPC w celu komunikowania się ze sobą.

Uwaga

Minimalna liczba wymaganych portów może różnić się w zależności od komputera. Komputery obsługujące większy ruch mogą napotkać wyczerpanie portów, jeśli porty dynamiczne RPC są ograniczone. Weź to pod uwagę, jeśli ograniczysz zakres portów.

Ostrzeżenie

Jeśli w konfiguracji portu występuje błąd lub w puli jest za mało portów, program EPM nie może zarejestrować aplikacji serwera RPC (w tym usług systemu Windows, takich jak Netlogon), które używają dynamicznych punktów końcowych. Jeśli wystąpi błąd konfiguracji, kod błędu to 87 (0x57) ERROR_INVALID_PARAMETER. Jeśli na przykład nie ma wystarczającej liczby portów, usługa Netlogon rejestruje zdarzenie 5820:

Nazwa dziennika: System
Źródło: NETLOGON
Identyfikator zdarzenia: 5820
Poziom: Błąd
Słowa kluczowe: klasyczne
Opis:
Usługa Netlogon nie może dodać interfejsu AuthZ RPC. Usługa została zakończona. Wystąpił następujący błąd: "Parametr jest nieprawidłowy".

Aby uzyskać więcej informacji o sposobie działania RPC, zobacz RPC over IT/Pro (RPC over IT/Pro).

Przykład niestandardowej konfiguracji portu

W tym przykładzie porty od 5000 do 6000 (włącznie) zostały dowolnie wybrane, aby zilustrować sposób konfigurowania nowych wpisów rejestru. Ten przykład nie jest zaleceniem dotyczącym minimalnej liczby portów wymaganych przez dany system. Taka konfiguracja wymaga dodania klucza internetowego w obszarzeHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpci dodania następujących wpisów:

  • Porty MULTI_SZ
    • Typ danych: MULTI_SZ
    • Wartość: 5000–6000
  • PortsInternetAvailable REG_SZ
    • Typ danych: REG_SZ
    • Wartość: Y
  • UseInternetPorts REG_SZ
    • Typ danych: REG_SZ
    • Wartość: Y

Aby ta konfiguracja została uruchomiona, komputer musi zostać uruchomiony ponownie. Następnie do wszystkich aplikacji korzystających z RPC są przypisywane porty dynamiczne z zakresu od 5000 do 6000 (włącznie).

Rozwiązywanie problemów z błędami RPC

Portqry

PortQry zapewnia szybki wgląd w sposób działania RPC przed zagłębieniem się w dane śledzenia sieci. Możesz szybko określić, czy można nawiązać połączenie, uruchamiając następujące polecenie na komputerze klienckim:

Portqry.exe -n <ServerIP> -e 135

Uwaga

W tym poleceniu funkcja ServerIP> reprezentuje adres IP serwera, < z którym się kontaktujesz.

Rozważmy na przykład następujące polecenie:

Portqry.exe -n 169.254.0.2 -e 135

To polecenie generuje dane wyjściowe podobne do następującego fragmentu:

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]

Sprawdzając te dane wyjściowe, można określić następujące informacje:

  • System DNS działa poprawnie (rozpoznał adres IP jako w pełni kwalifikowaną nazwę domeny (FQDN)).
  • PortQry skontaktował się z portem RPC (135) na komputerze docelowym.
  • Program EPM odpowiedział portowi PortQry i przypisał port dynamiczny 49664 (ujęty w nawiasy kwadratowe) do późniejszej komunikacji.
  • PortQry ponownie nawiązano połączenie z portem 49664.

Jeśli którykolwiek z tych kroków zakończy się niepowodzeniem, zazwyczaj można rozpocząć zbieranie równoczesnych śladów sieci zgodnie z opisem w następnej sekcji.

Aby uzyskać więcej informacji na temat narzędzia PortQry, zobacz Using the PortQry command-line tool (Korzystanie z narzędzia wiersza polecenia PortQry).

Netsh

Narzędzie netsh systemu Windows umożliwia równoczesne zbieranie danych śledzenia sieci na kliencie i serwerze.

Aby zebrać jednoczesne ślady sieci, otwórz okno wiersza polecenia z podwyższonym poziomem uprawnień zarówno na kliencie, jak i na serwerze.

Na kliencie uruchom następujące polecenie:

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

Na serwerze uruchom następujące polecenie:

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

Teraz spróbuj odtworzyć problem na komputerze klienckim. Następnie uruchom następujące polecenie w wierszu polecenia w obu oknach, aby zatrzymać ślady:

Netsh trace stop

Otwórz pliki śledzenia w programie Microsoft Network Monitor 3.4 lub Message Analyzer i przefiltruj dane śledzenia dla adresu IP serwera lub komputerów klienckich i portu TCP 135. Na przykład użyj ciągów filtru, takich jak:

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

    W tym ciągu < filtru client-ip> reprezentuje adres IP klienta, a <serwer-ip> reprezentuje adres IP serwera.

  • tcp.port==135

W przefiltrowanych danych poszukaj wpisu EPM w kolumnie Protokół .

Poszukaj odpowiedzi epm (na serwerze), która zawiera dynamiczny numer portu. Jeśli dynamiczny numer portu jest obecny, zanotuj go w celu późniejszego odwołania.

Zrzut ekranu przedstawiający monitor sieci z wyróżnionym portem dynamicznym.

Ponownie przefiltruj dane śledzenia dla dynamicznego numeru portu i adresu IP serwera. Na przykład użyj ciągu filtru, takiego jak tcp.port==<dynamic-port-allocated> i ipv4.address==<server-ip>. W tym ciągu filtru dynamiczny przydzielony> port reprezentuje dynamiczny numer portu, < a <adres ip serwera> reprezentuje adres IP serwera.

Zrzut ekranu przedstawiający monitor sieci z zastosowanym filtrem.

W przefiltrowanych danych poszukaj dowodów na to, że klient pomyślnie nawiązał połączenie z portem dynamicznym, lub poszukaj wszelkich problemów z siecią, które mogły wystąpić.

Port nieosiągalny

Najczęstszą przyczyną błędów "Serwer RPC niedostępny" jest to, że klient nie może nawiązać połączenia z przydzielonym portem dynamicznym. W śledzeniu po stronie klienta zostaną wyświetlone retransmity syn protokołu TCP dla portu dynamicznego.

Zrzut ekranu przedstawiający monitor sieci, który pokazuje ponowne przetransmitowanie interfejsu TCP SYN.

To zachowanie wskazuje, że jeden z następujących warunków blokuje komunikację:

Zbieranie danych w celu dokładniejszego rozwiązywania problemów

Przed skontaktowaniem się z pomocą techniczną firmy Microsoft zalecamy zebranie informacji o problemie.

Wymagania wstępne

Te procedury używają zestawu narzędzi TroubleShootingScript (TSS ). Aby użyć tego zestawu narzędzi, należy pamiętać o następujących wymaganiach wstępnych:

  • Musisz mieć uprawnienia na poziomie administratora na komputerze lokalnym.

  • Przy pierwszym uruchomieniu zestawu narzędzi musisz zaakceptować umowę EULA.

  • Upewnij się, że zasady wykonywania skryptów Windows PowerShell dla komputera są ustawione na RemoteSignedwartość . Aby uzyskać więcej informacji na temat zasad wykonywania programu PowerShell, zobacz about_Execution_Policies.

    Uwaga

    Jeśli środowisko uniemożliwia używanie na RemoteSigned poziomie komputera, można tymczasowo ustawić je na poziomie procesu. W tym celu przed uruchomieniem narzędzia uruchom następujące polecenie cmdlet w oknie wiersza polecenia programu PowerShell z podwyższonym poziomem uprawnień:

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

    Aby sprawdzić, czy zmiana zostanie wprowadzona, uruchom PS C:\> Get-ExecutionPolicy -List polecenie cmdlet.

    Uprawnienia na poziomie procesu dotyczą tylko bieżącej sesji programu PowerShell. Po zamknięciu okna programu PowerShell zasady wykonywania powrócą do oryginalnego ustawienia.

Zbieranie kluczowych informacji przed skontaktowaniem się z pomocą techniczną firmy Microsoft

  1. Pobierz usługę TSS we wszystkich węzłach i rozwiń ją do folderu C:\tss .

  2. Otwórz folder C:\tss w oknie wiersza polecenia programu PowerShell z podwyższonym poziomem uprawnień.

  3. Uruchom ślady na komputerze z problemem, uruchamiając następujące polecenie cmdlet:

    TSS.ps1 -Scenario NET_RPC
    
  4. Odpowiedz na monit umowy EULA.

  5. Odtwórz problem. Do monitorowania lub testowania problemu można użyć narzędzi, takich jak Podgląd zdarzeń lub wbemtest.

  6. Po odtworzeniu problemu natychmiast zatrzymaj zbieranie danych.

  7. Po zakończeniu zbierania wymaganych danych przez skrypty automatyczne dołącz dane do żądania pomocy technicznej.