Udostępnij za pośrednictwem


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

Może wystąpić błąd "Serwer RPC niedostępny" 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 pokazujący, że serwer RPC jest niedostępny.

Jest to typowy błąd sieci, który wymaga podstawowej znajomości procesu w celu pomyślnego rozwiązania problemu. Aby rozpocząć, należy zrozumieć kilka ważnych terminów:

  • Maper punktu końcowego (EPM): usługa, która nasłuchuje na serwerze i prowadzi aplikacje klienckie do aplikacji serwera przy użyciu portów i identyfikatorów UUID. Usługa jest częścią podsystemu RPC, który rozpoznaje dynamiczne punkty końcowe w odpowiedzi na żądania klientów. W niektórych przypadkach dynamicznie przypisuje punkty końcowe do serwerów.
  • Wieża: 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 identyfikujący aplikację RPC. Podczas rozwiązywania problemów można użyć identyfikatora UUID do śledzenia konwersacji RPC pojedynczego typu aplikacji (między wieloma typami występującymi na jednym komputerze jednocześnie).
  • Opnum: określa funkcję, którą klient chce wykonać na serwerze. Jest to po prostu liczba szesnastkowa. Jednak dobry analizator sieci przetłumaczy funkcję. Jeśli nie można zidentyfikować funkcji, skontaktuj się z dostawcą aplikacji.
  • Port: punkt końcowy komunikacji dla aplikacji klienckiej lub serwera. Moduł EPM przydziela porty dynamiczne (znane również jako porty wysokie lub porty efemeryczne) dla klientów i serwerów do użycia.

    Uwaga 16.

    Zazwyczaj numer portu jest najważniejszymi informacjami, których będziesz używać do rozwiązywania problemów.

  • Dane wycinkowe: dane wymieniane między funkcjami na kliencie a 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 EPM numer portu dynamicznego. Po przypisaniu portu 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żne

Jeśli zapora oddziela klienta i serwer, zapora musi zezwalać na komunikację na porcie 135 i na portach dynamicznych przypisanych 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 moduł EPM. Aby uzyskać więcej informacji, zobacz Konfigurowanie sposobu przydzielania portów dynamicznych przez RPC.

Niektóre zapory zezwalają również na filtrowanie identyfikatorów UUID. W tym scenariuszu, jeśli żądanie RPC używa portu 135 do przekraczania zapory i kontaktu z EPM, zapora zauważa identyfikator UUID skojarzony z żądaniem. Gdy EPM odpowiada i wysyła numer portu dynamicznego dla tego identyfikatora UUID, zapora również zauważa numer portu. Następnie zapora zezwala na operacje powiązania RPC dla tego identyfikatora UUID i portu.

Konfigurowanie sposobu przydzielania portów dynamicznych przez RPC

Domyślnie epm przydziela porty dynamiczne losowo z zakresu skonfigurowanego dla protokołu 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ę przez zaporę. Alternatywną metodą jest określenie numeru portu lub zakresu numerów portów do użycia przez moduł EPM i otwarcie tych portów w zaporze.

Wiele aplikacji serwera z systemem Windows, 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 portu lub zakresu portów użyj portów, które znajdują się poza zakresem 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 wymieniono, które aplikacje serwera RPC można skonfigurować do używania niestandardowych portów serwera poza możliwościami środowiska uruchomieniowego RPC.

Ważne

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 wykonać poniższe kroki. 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ć. W przypadku klucza internetowego można skonfigurować następujące wpisy:

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

    • Zakres wartości: 0 - 65535
      Na przykład 5984 reprezentuje pojedynczy port, a 5000–5100 reprezentuje zestaw portów. Jeśli jakiekolwiek wartości znajdują się poza zakresem od 0 do 65535 lub jeśli nie można zinterpretować ż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, czy porty do wykluczenia.

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

    • Wartości: Y lub N (bez rozróżniania wielkości liter)
      • Y: Procesy korzystające z domyślnych zasad systemowych są przypisywane porty z zestawu portów dostępnych w Internecie, zgodnie z definicją wcześniej.
      • N: Procesy korzystające z domyślnych zasad systemowych są przypisywane porty z zestawu portów tylko intranet.

Należy otworzyć zakres portów, które są większe 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 poprzednie środowisko pokazuje, że należy otworzyć co najmniej 100 portów. Jest to spowodowane tym, że kilka usług systemowych polega na tych portach RPC do komunikowania się ze sobą.

Uwaga 16.

Minimalna wymagana liczba portów może się różnić od komputera do 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 ograniczasz zakres portów.

Ostrzeżenie

Jeśli w konfiguracji portu wystąpi błąd lub nie ma wystarczającej liczby portów w puli, 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, program Netlogon rejestruje zdarzenie 5820:

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

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

Przykład niestandardowej konfiguracji portu

W tym przykładzie porty od 5000 do 6000 (włącznie) zostały arbitralnie wybrane, aby ułatwić zilustrowanie sposobu konfigurowania nowych wpisów rejestru. Ten przykład nie jest zaleceniem minimalnej liczby portów, których wymaga żaden konkretny system. Taka konfiguracja wymaga dodania klucza internetowego w obszarze HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc i 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, należy ponownie uruchomić komputer. Następnie wszystkie aplikacje korzystające z procedury RPC mają przypisane porty dynamiczne w zakresie od 5000 do 6000 (włącznie).

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

PortQry

Usługa PortQry zapewnia szybki wgląd w działanie procedury RPC przed zagłębianiem 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 16.

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

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

Portqry.exe -n 10.10.10.10 -e 135

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

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]

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

  • System DNS działa poprawnie (rozpoznano adres IP do w pełni kwalifikowanej nazwy domeny (FQDN)).
  • PortQry skontaktował się z portem RPC (135) na komputerze docelowym.
  • EpM odpowiedział na PortQry i przypisał port dynamiczny 49664 (ujęta w nawiasy kwadratowe) na kolejną komunikację.
  • PortQry ponownie nawiązał połączenie z portem 49664.

Jeśli którykolwiek z tych kroków nie powiedzie się, zwykle można rozpocząć zbieranie równoczesnych śladów sieci, zgodnie z opisem w następnej sekcji.

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

Netsh

Za pomocą narzędzia netsh systemu Windows można zbierać dane śledzenia sieci jednocześnie na kliencie i serwerze.

Aby zebrać równoczesne ślady sieci, otwórz okno wiersza polecenia z podwyższonym poziomem uprawnień zarówno na kliencie, jak i 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 usłudze Microsoft Network Monitor 3.4 lub Analizator komunikatów 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 klient-ip> reprezentuje adres IP klienta, a <serwer-ip> reprezentuje adres IP serwera.

  • tcp.port==135

W filtrowanych danych wyszukaj wpis EPM w kolumnie Protokół .

Wyszukaj odpowiedź z epm (na serwerze), która zawiera numer portu dynamicznego. Jeśli numer portu dynamicznego jest obecny, zanotuj go na potrzeby przyszłego odwołania.

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

Przefiltruj ponownie dane śledzenia dla numeru portu dynamicznego 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 przydzielony> dynamiczny port reprezentuje numer portu dynamicznego, a <adres ip serwera reprezentuje adres IP> serwera.

Zrzut ekranu przedstawiający monitor sieci z zastosowanym filtrem.

W filtrowanych 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 "Niedostępny serwer RPC" jest to, że klient nie może nawiązać połączenia z przydzielonym portem dynamicznym. Następnie śledzenie po stronie klienta spowoduje wyświetlenie retransmitów PROTOKOŁU TCP SYN dla portu dynamicznego.

Zrzut ekranu przedstawiający retransmitacje protokołu TCP SYN w monitorze sieci.

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

  • Zakres portów dynamicznych jest zablokowany w zaporze w środowisku.
  • Środkowe urządzenie usuwa pakiety.
  • Serwer docelowy usuwa pakiety. Ten warunek może być spowodowany przez takie konfiguracje, jak usuwanie pakietów platformy filtrowania systemu Windows (WFP), upuszczanie pakietów karty sieciowej (NIC) lub modyfikacje sterowników filtru .

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

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

Wymagania wstępne

Te procedury używają zestawu narzędzi TroubleShootingScript (TSS). Aby korzystać z 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ć umowy LICENCYJNE.

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

    Uwaga 16.

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

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

    Aby sprawdzić, czy zmiana zostanie w życie, 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 są przywracane do oryginalnego ustawienia.

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

  1. Pobierz TSS na wszystkich węzłach i rozwiń go 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 problemu, uruchamiając następujące polecenie cmdlet:

    .\TSS.ps1 -Scenario NET_RPC
    
  4. Odpowiadanie na monit umowy EULA.

  5. Odtwórz problem. Możesz użyć narzędzi, takich jak Podgląd zdarzeń lub wbemtest, aby monitorować lub testować problem.

  6. Po odtworzeniu problemu natychmiast przestań zbierać dane.

  7. Po zakończeniu zbierania wymaganych danych przez zautomatyzowane skrypty dołącz dane do wniosku o pomoc techniczną.