Поделиться через


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

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

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

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

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

    Примечание.

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

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

Как работает подключение

На следующей схеме показан клиент, подключающийся к серверу для выполнения удаленной операции. Клиент изначально обращается к TCP-порту 135 на сервере, а затем согласовывается с 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 обрабатывает всю конфигурацию как недопустимую.
  • ПортыInternetAvailable 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:

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

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

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

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

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

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

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

PortQry

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

Portqry.exe -n <ServerIP> -e 135

Примечание.

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

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

Portqry.exe -n 10.10.10.10 -e 135

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

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]

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

  • 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-адрес клиента, а <ip-адрес> сервера — IP-адрес сервера.

  • tcp.port==135

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

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

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

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

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

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

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

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

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

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

  • Динамический диапазон портов блокируется брандмауэром в среде.
  • Среднее устройство удаляет пакеты.
  • Целевой сервер удаляет пакеты. Это условие может быть вызвано такими конфигурациями, как удаление пакетов платформы фильтрации Windows (ППП), удаление пакетов сетевой карты (сетевой карты) или изменение драйвера фильтра.

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

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

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

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

  • У вас должно быть разрешение на уровне администратора на локальном компьютере.

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

  • Убедитесь, что для компьютера задана RemoteSignedполитика выполнения скрипта Windows PowerShell. Дополнительные сведения о политике выполнения 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. Ответьте на запрос EULA.

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

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

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