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

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

Произошла следующая ошибка: сервер RPC недоступен

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

Прежде чем приступить к устранению неполадок, возникающих при ошибке "сервер RPC недоступен " — сначала изучите основы ошибки. Есть несколько важных терминов для понимания:

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

Примечание

В разделе Устранение неполадок используется большое количество приведенных выше данных, самый важный из них — номер динамического порта RPC, который вы получаете при общении с EPM.

Как работает соединение

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

Диаграмма, иллюстрирующая соединение с удаленным сервером

Порты RPC также можно получать из определенного диапазона.

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

Динамическое выделение портов удаленного вызова процедур (RPC) используется серверными приложениями и удаленными приложениями администрирования, например диспетчером протокола DHCP, диспетчером служб Windows Internet Name Service (WINS) и т. д. Динамическое назначение порта RPC предписывает программе RPC использовать конкретный случайный порт в диапазоне, настроенном для TCP и UDP, в зависимости от реализации используемой операционной системы.

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

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

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

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

Тип данных "имя элемента Хкэй_локал_мачине\софтваре\микрософт\рпк\интернет"

Порты REG_MULTI_SZ

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

Портсинтернетаваилабле REG_SZ Y или N (без учета регистра)

  • Если да, порты, перечисленные в разделе Ports (порты), являются портами, доступными в Интернете на этом компьютере. Если N, порты, указанные в разделе Ports, являются портами, которые не являются доступными в Интернете.

Усеинтернетпортс REG_SZ) Y или N (без учета регистра)

  • Указывает политику системы по умолчанию.
  • Если задано значение Y, для процессов, использующих по умолчанию, будут назначены порты из набора портов, доступных в Интернете, как определено ранее.
  • Если N процесс, использующий значение по умолчанию, будет назначаться портами из набора портов интрасети.

Пример.

В этом примере порты 5000 – 6000 включительно выделены произвольно, чтобы понять, как можно настроить новый раздел реестра. Это не является рекомендацией минимального количества портов, необходимых для конкретной системы.

  1. Добавление ключа Интернета в раздел: Хкэй_локал_мачине\софтваре\микрософт\рпк

  2. В разделе Интернет-ключ добавьте значения "Ports" (МУЛТИ_СЗ), "Портсинтернетаваилабле" (REG_SZ) и "Усеинтернетпортс" (REG_SZ).

    Например, новый раздел реестра выглядит следующим образом: ports: REG_MULTI_SZ: 5000-6000 Портсинтернетаваилабле: REG_SZ: Y Усеинтернетпортс: REG_SZ: Y

  3. Перезагрузите сервер. Во всех приложениях, использующих динамическое назначение порта RPC, используются порты 5000 – 6000 включительно.

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

Примечание

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

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

Если в конфигурации порта возникла ошибка или в пуле недостаточно портов, служба сопоставителя конечных точек не сможет регистрировать серверы RPC с динамическими конечными точками. При возникновении ошибки в конфигурации код ошибки будет 87 (0x57) ЕРРОР_ИНВАЛИД_ПАРАМЕТЕР. Это может повлиять на серверы Windows RPC, например Netlogon. В этом случае будет регистрироваться событие 5820.

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

Если вы хотите глубоко погрузиться в том, как это работает, ознакомьтесь с разрешениями на вызов RPC для ИТ-специалистов ина профессиональном уровне.

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

Порткуери

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

Portqry.exe -n <ServerIP> -e 135

Это может привести к выводу большого количества выходных данных, но вы должны найти * ип_ткп-и номер порта в квадратных скобках, указывающий, успешно ли вы можете получить динамический порт из EPM, а также установить подключение к нему. В случае сбоя вы обычно можете начать сбор одновременных трассировок сети. Что-то вроде этого из результатов "PortQry":

Portqry.exe -n 169.254.0.2 -e 135

Частичный вывод ниже.

Запрос на целевую систему с именем: 169.254.0.2 пытается разрешить IP-адресу имя... IP-адрес разрешен в RPCServer.contoso.com запроса... Порт TCP 135 (служба EPMAP): ПРОСЛУШИВАНИе с помощью временного исходного порта запрашивает базу данных сопоставителя конечных точек... Ответ сервера: UUID: d95afe70-a6d5-4259-822e-2c84da1ddb0d нкакн_ип_ткп: 169.254.0.10[49664]

Один шрифт — это номер временного порта, с которым вы успешно сделали соединение.

Netsh

Вы можете выполнить приведенные ниже команды, чтобы использовать для Windows встроенные средства Netsh, чтобы собрать одновременную трассировку. Не забудьте выполнить приведенную ниже команду для команды "администраторская CMD", для которой требуется повышение прав.

  • На клиенте

    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 3,4 или анализаторе сообщений и отфильтруйте трассировку для

  • IPv4. Address = =<клиент-IP> и IPv4. Address = = и TCP. Port = = 135 или только TCP. Port = = 135 (Справка).

  • Найдите протокол "EPM" в столбце "протокол".

  • Теперь убедитесь, что вы получаете ответ от сервера. При получении ответа Обратите внимание на динамический номер порта, который вы выделили для использования.

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

  • Убедитесь, что соединение с этим динамическим портом успешно установлено.

  • Фильтр должен выглядеть примерно так: TCP. Port = =<динамический порт, выделенный> и IPv4. Address = =

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

Это поможет вам проверить подключение и выявить возможные проблемы с сетью.

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

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

Снимок экрана: сетевой монитор с передающей TCP SYN

Порт недоступен по одной из указанных ниже причин.

  • Динамический диапазон портов блокируется брандмауэром в среде.
  • На среднем устройстве удаляются пакеты.
  • Конечный сервер отбрасывает пакеты (драйвер с фильтрацией и отфильтром, а также с помощью Drop/NIC).