Руководство по устранению неполадок с ошибками удаленного вызова процедур (RPC)

Применимо к: Клиент Windows

При подключении к инструментарию управления Windows (WMI) или Microsoft SQL Server, во время сеанса удаленного вызова процедур (RPC) или при использовании различных оснасток консоли управления Майкрософт (MMC) может возникнуть ошибка "Сервер RPC недоступен". На следующем рисунке показан пример ошибки RPC.

Снимок экрана: сообщение об ошибке о том, что произошла следующая ошибка: сервер RPC недоступен.

Это распространенная сетевая ошибка, которая требует некоторых базовых сведений о процессе для успешного устранения неполадок. Для начала необходимо понимать несколько важных терминов:

  • Сопоставитель конечных точек (EPM) — служба, которая прослушивает на сервере и направляет клиентские приложения к серверным приложениям с помощью сведений о порте и UUID.
  • Tower: описывает протокол RPC, позволяющий клиенту и серверу согласовать подключение.
  • Этажи: слои содержимого в башне, содержащие определенные данные, такие как порты, IP-адреса и идентификаторы.
  • UUID: хорошо известный GUID, который идентифицирует приложение RPC. Во время устранения неполадок можно использовать UUID для отслеживания бесед RPC одного типа приложения (среди множества типов, которые происходят на одном компьютере одновременно).
  • Opnum: определяет функцию, которую клиент хочет, чтобы сервер выполнял. Это просто шестнадцатеричное число. Однако хороший сетевой анализатор преобразует функцию за вас. Если не удается определить функцию, обратитесь к поставщику приложения.
  • Порт: конечная точка связи для клиента или серверного приложения. EPM выделяет динамические порты (также известные как порты с высоким или временным) для использования клиентами и серверами.

    Примечание.

    Как правило, номер порта является наиболее важной информацией, которую вы будете использовать для устранения неполадок.

  • Данные заглушки: данные, передаваемые между функциями на клиенте и функциями на сервере. Эти данные являются полезными данными, важной частью обмена данными.

Принцип работы подключения

На следующей схеме показано, как клиент подключается к серверу для выполнения удаленной операции. Клиент сначала связывается с TCP-портом 135 на сервере, а затем согласовывает с EPM динамический номер порта. После того как EPM назначит порт, клиент отключается, а затем использует динамический порт для подключения к серверу.

Схема, показывающая, как клиент устанавливает RPC-подключение к удаленному серверу.

Важно!

Если брандмауэр разделяет клиент и сервер, брандмауэр должен разрешить обмен данными через порт 135 и динамические порты, назначенные EPM. Один из подходов к управлению этим сценарием заключается в указании портов или диапазонов портов для EPM. Дополнительные сведения см. в разделе Настройка выделения динамических портов RPC.

Некоторые брандмауэры также разрешают фильтрацию UUID. В этом сценарии, если запрос RPC использует порт 135 для пересечения брандмауэра и связи с EPM, брандмауэр замечает UUID, связанный с запросом. Когда EPM отвечает и отправляет динамический номер порта для этого UUID, брандмауэр также замечает номер порта. Затем брандмауэр разрешает операции привязки RPC для этого UUID и порта.

Настройка того, как RPC выделяет динамические порты

По умолчанию EPM выделяет динамические порты случайным образом из диапазона, настроенного для TCP и UDP (на основе реализации используемой операционной системы). Однако такой подход может оказаться нецелесообразной, особенно если клиент и сервер должны взаимодействовать через брандмауэр. Альтернативный способ — указать номер порта или диапазон номеров портов для EPM и открыть эти порты в брандмауэре.

Многие серверные приложения Windows, использующие RPC, предоставляют параметры (например, разделы реестра) для настройки разрешенных портов. Службы Windows используют подраздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet для этой задачи.

При указании порта или диапазона портов используйте порты, которые находятся за пределами диапазона часто используемых портов. Полный список портов сервера, используемых в Windows и основных продуктах Майкрософт, см. в статье Общие сведения о службах и требования к сетевым портам для Windows. В этой статье также перечислены серверные приложения RPC и упоминаются, какие серверные приложения RPC можно настроить для использования пользовательских портов сервера за пределами возможностей среды выполнения RPC.

Важно!

В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для защиты создайте резервную копию реестра перед его изменением, чтобы в случае возникновения проблем можно было восстановить его. Для получения дополнительной информации о том, как создать резервную копию и восстановить реестр, см. статью Сведения о резервном копировании и восстановлении реестра Windows.

По умолчанию ключ Интернета не существует. Поэтому его нужно создать. Для ключа Интернета можно настроить следующие записи:

  • Порты REG_MULTI_SZ. Указывает порт или инклюзивный диапазон портов. Другие записи, которые отображаются в разделе Интернет , указывают, являются ли эти порты используемыми или исключенными из использования.

    • Диапазон значений: 0 - 65535
      Например, 5984 представляет один порт, а 5000–5100 — набор портов. Если какие-либо значения находятся за пределами диапазона от 0 до 65535 или если какое-либо значение невозможно интерпретировать, среда выполнения RPC обрабатывает всю конфигурацию как недопустимую.
  • PortsInternetAvailable REG_SZ. Указывает, представляет ли значение Порты для включения или порты для исключения.

    • Значения: Y или N (без учета регистра)
      • Y. Порты, перечисленные в записи Порты , представляют все порты на этом компьютере, доступные EPM.
      • N. Порты, перечисленные в записи Порты , представляют все порты, недоступные EPM.
  • UseInternetPorts REG_SZ: указывает системную политику по умолчанию.

    • Значения: Y или N (без учета регистра)
      • Y. Процессам, которые используют системную политику по умолчанию, назначаются порты из набора доступных в Интернете портов, как определено ранее.
      • N. Процессам, которые используют системную политику по умолчанию, назначаются порты из набора портов, доступных только для интрасети.

Необходимо открыть диапазон портов, превышающий порт 5000. Номера портов, которые меньше 5000, могут уже использоваться другими приложениями, и они могут вызвать конфликты с вашими приложениями DCOM. Кроме того, предыдущий опыт показывает, что необходимо открыть не менее 100 портов. Это связано с тем, что несколько системных служб используют эти порты RPC для обмена данными друг с другом.

Примечание.

Минимальное количество необходимых портов может отличаться от компьютера к компьютеру. Компьютеры, поддерживающие больший объем трафика, могут столкнуться с нехваткой портов, если динамические порты RPC ограничены. Примите это во внимание при ограничении диапазона портов.

Предупреждение

Если в конфигурации портов возникла ошибка или в пуле недостаточно портов, EPM не сможет зарегистрировать серверные приложения RPC (включая службы Windows, такие как Netlogon), которые используют динамические конечные точки. Если возникает ошибка конфигурации, код ошибки 87 (0x57) ERROR_INVALID_PARAMETER. Например, если портов недостаточно, netlogon регистрирует событие 5820:

Имя журнала: System
Источник: NETLOGON
Идентификатор события: 5820
Уровень: ошибка
Ключевые слова: классический
Описание:
Службе Netlogon не удалось добавить интерфейс RPC AuthZ. Служба была завершена. Произошла следующая ошибка: "Неправильный параметр".

Дополнительные сведения о том, как работает RPC, см. в разделе RPC через ИТ/Pro.

Пример настраиваемой конфигурации порта

В этом примере порты от 5000 до 6000 (включительно) были выбраны произвольно, чтобы продемонстрировать, как можно настроить новые записи реестра. В этом примере не рекомендуется использовать минимальное количество портов, необходимых любой конкретной системе. Для такой конфигурации требуется добавить интернет-ключ вHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpcи добавить следующие записи:

  • Порты MULTI_SZ
    • Тип данных: MULTI_SZ
    • Значение: 5000–6000
  • PortsInternetAvailable REG_SZ
    • Тип данных: REG_SZ
    • Значение: Y
  • UseInternetPorts REG_SZ
    • Тип данных: REG_SZ
    • Значение: Y

Чтобы эта конфигурация вступила в силу, необходимо перезагрузить компьютер. После этого всем приложениям, используюющим RPC, назначаются динамические порты в диапазоне от 5000 до 6000 (включительно).

Устранение ошибок RPC

Программа

PortQry предоставляет краткие сведения о том, как работает RPC, прежде чем углубляться в данные трассировки сети. Вы можете быстро определить, можно ли установить подключение, выполнив на клиентском компьютере следующую команду:

Portqry.exe -n <ServerIP> -e 135

Примечание.

В этой команде <ServerIP> представляет IP-адрес сервера, с которым вы обращаетесь.

Например, рассмотрим следующую команду:

Portqry.exe -n 169.254.0.2 -e 135

Эта команда создает выходные данные, аналогичные следующему фрагменту:

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]

Изучив эти выходные данные, можно определить следующие сведения:

  • DNS работает правильно (он разрешил IP-адрес в полное доменное имя (FQDN)).
  • PortQry связался с портом RPC (135) на целевом компьютере.
  • EPM ответил на PortQry и назначил динамический порт 49664 (заключенный в квадратные скобки) для последующего взаимодействия.
  • PortQry повторно подключен к порту 49664.

Если какой-либо из этих шагов завершается ошибкой, обычно можно начать сбор одновременных трассировок сети, как описано в следующем разделе.

Дополнительные сведения о PortQry см. в разделе Использование средства командной строки PortQry.

Netsh

Средство Windows netsh можно использовать для одновременного сбора данных трассировки сети на клиенте и сервере.

Чтобы собрать одновременные трассировки сети, откройте окно командной строки с повышенными привилегиями как на клиенте, так и на сервере.

На клиенте выполните следующую команду:

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

На сервере выполните следующую команду:

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

Теперь попробуйте воспроизвести проблему на клиентском компьютере. Затем выполните следующую команду в командной строке в обоих окнах, чтобы остановить трассировку:

Netsh trace stop

Откройте файлы трассировки в Microsoft Network Monitor 3.4 или анализаторе сообщений и отфильтруйте данные трассировки по IP-адресу сервера или клиентских компьютеров и TCP-порту 135. Например, используйте строки фильтра, такие как:

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

    В этой строке < фильтра client-ip> представляет IP-адрес клиента, а <server-ip> — IP-адрес сервера.

  • tcp.port==135

В отфильтрованных данных найдите запись EPM в столбце Протокол .

Найдите ответ от EPM (на сервере), который содержит динамический номер порта. Если динамический номер порта присутствует, запишите его для дальнейшего использования.

Снимок экрана: монитор сети с выделенным динамическим портом.

Перепроверяйте данные трассировки для динамического номера порта и IP-адреса сервера. Например, используйте строку фильтра, например tcp.port==<dynamic-port-allocated> и ipv4.address=<server-ip>. В этой строке фильтра dynamic-port-allocated> представляет динамический номер порта, < а <server-ip> — IP-адрес сервера.

Снимок экрана: сетевой монитор с примененным фильтром.

В отфильтрованных данных найдите доказательства успешного подключения клиента к динамическому порту, или найдите все проблемы с сетью, которые могли возникнуть.

Порт недоступен

Наиболее распространенной причиной ошибок "сервер RPC недоступен" является то, что клиент не может подключиться к выделенному динамическому порту. Затем трассировка на стороне клиента будет отображать повторную передачу TCP SYN для динамического порта.

Снимок экрана: монитор сети, на котором показаны повторные передачи TCP SYN.

Это поведение указывает на то, что одно из следующих условий блокирует обмен данными:

Сбор данных для более глубокого устранения неполадок

Прежде чем обращаться в службу поддержки Майкрософт, мы рекомендуем собрать сведения о проблеме.

Предварительные требования

Эти процедуры используют набор инструментов TroubleShootingScript (TSS). Чтобы использовать этот набор инструментов, необходимо учитывать следующие предварительные требования:

  • Необходимо иметь разрешение уровня администратора на локальном компьютере.

  • При первом запуске набора инструментов необходимо принять лицензионное соглашение.

  • Убедитесь, что для политики выполнения скриптов Windows PowerShell для компьютера задано значение RemoteSigned. Дополнительные сведения о политике выполнения PowerShell см. в разделе about_Execution_Policies.

    Примечание.

    Если ваша среда не позволяет использовать RemoteSigned на уровне компьютера, ее можно временно задать на уровне процесса. Для этого выполните следующий командлет в окне командной строки PowerShell с повышенными привилегиями перед запуском средства:

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

    Чтобы убедиться, что изменение вступает в силу, выполните PS C:\> Get-ExecutionPolicy -List командлет .

    Разрешения уровня процесса применяются только к текущему сеансу PowerShell. После закрытия окна PowerShell политика выполнения возвращается к исходному параметру.

Сбор ключевой информации перед обращением в службу поддержки Майкрософт

  1. Скачайте TSS на всех узлах и разверните его в папку C:\tss .

  2. Откройте папку C:\tss в окне командной строки PowerShell с повышенными привилегиями.

  3. Запустите трассировку на проблемном компьютере, выполнив следующий командлет:

    TSS.ps1 -Scenario NET_RPC
    
  4. Ответ на запрос лицензионного соглашения.

  5. Воспроизведите проблему. Для мониторинга или тестирования проблемы можно использовать такие средства, как Просмотр событий или wbemtest.

  6. После воспроизведения проблемы немедленно прекратите сбор данных.

  7. После того как автоматизированные скрипты завершат сбор необходимых данных, вложите данные в запрос на поддержку.