다음을 통해 공유


RPC(원격 프로시저 호출) 오류 문제 해결 지침

WMI(Windows Management Instrumentation) 또는 Microsoft SQL Server에 연결하거나, RPC(원격 프로시저 호출) 세션 중 또는 다양한 MMC(Microsoft Management Console) 스냅인을 사용하는 경우 "RPC 서버를 사용할 수 없음" 오류가 발생할 수 있습니다. 다음 이미지는 RPC 오류의 예를 보여줍니다.

RPC 서버를 사용할 수 없음을 보여 주는 오류 메시지의 스크린샷

이 오류는 성공적으로 문제를 해결하기 위해 프로세스에 대한 기본적인 숙지 사항이 필요한 일반적인 네트워킹 오류입니다. 먼저 이해해야 할 몇 가지 중요한 용어가 있습니다.

  • EPM(엔드포인트 매퍼): 서버에서 수신 대기하고 포트 및 UUID 정보를 사용하여 클라이언트 앱을 서버 앱으로 안내하는 서비스입니다. 이 서비스는 클라이언트 요청에 대한 응답으로 동적 엔드포인트를 확인하는 RPC 하위 시스템의 일부입니다. 경우에 따라 서버에 엔드포인트를 동적으로 할당합니다.
  • 타워: 클라이언트와 서버가 연결을 협상할 수 있도록 하는 RPC 프로토콜을 설명합니다.
  • 층: 포트, IP 주소 및 식별자와 같은 특정 데이터를 포함하는 타워 내의 콘텐츠 계층입니다.
  • UUID: RPC 애플리케이션을 식별하는 잘 알려진 GUID입니다. 문제를 해결하는 동안 UUID를 사용하여 단일 유형의 애플리케이션의 RPC 대화를 추적할 수 있습니다(한 번에 단일 컴퓨터에서 발생하는 여러 유형 중).
  • Opnum: 클라이언트가 서버에서 수행하려는 함수를 식별합니다. 이것은 단순히 16진수입니다. 그러나 좋은 네트워크 분석기는 함수를 변환합니다. 함수를 식별할 수 없는 경우 애플리케이션 공급업체에 문의하세요.
  • 포트: 클라이언트 또는 서버 애플리케이션에 대한 통신 엔드포인트입니다. EPM은 클라이언트 및 서버에서 사용할 동적 포트(높은 포트 또는 임시 포트라고도 함)를 할당합니다.

    참고 항목

    일반적으로 포트 번호는 문제 해결에 사용할 가장 중요한 정보입니다.

  • 스텁 데이터: 클라이언트의 함수와 서버의 함수 간에 교환된 데이터입니다. 이 데이터는 통신의 중요한 부분인 페이로드입니다.

연결 작동 방식

다음 다이어그램은 원격 작업을 실행하기 위해 서버에 연결하는 클라이언트를 보여줍니다. 클라이언트는 처음에 서버의 TCP 포트 135에 연결한 다음 동적 포트 번호에 대해 EPM과 협상합니다. EPM이 포트를 할당하면 클라이언트는 연결을 끊은 다음 동적 포트를 사용하여 서버에 연결합니다.

클라이언트가 원격 서버에 RPC 연결을 만드는 방법을 보여 주는 다이어그램

Important

방화벽이 클라이언트와 서버를 분리하는 경우 방화벽은 포트 135 및 EPM이 할당하는 동적 포트에서 통신을 허용해야 합니다. 이 시나리오를 관리하는 한 가지 방법은 EPM에서 사용할 포트 또는 포트 범위를 지정하는 것입니다. 자세한 내용은 RPC가 동적 포트를 할당하는 방법 구성을 참조하세요.

일부 방화벽에서는 UUID 필터링도 허용합니다. 이 시나리오에서 RPC 요청이 포트 135를 사용하여 방화벽을 통과하고 EPM에 문의하는 경우 방화벽은 요청과 연결된 UUID를 기록합니다. EPM이 해당 UUID에 대한 동적 포트 번호를 응답하고 보내면 방화벽은 포트 번호도 적어 줍니다. 그런 다음 방화벽은 해당 UUID 및 포트에 대한 RPC 바인딩 작업을 허용합니다.

RPC에서 동적 포트를 할당하는 방법 구성

기본적으로 EPM은 TCP 및 UDP에 대해 구성된 범위에서 동적 포트를 임의로 할당합니다(사용되는 운영 체제의 구현에 따라). 그러나 이 방법은 특히 클라이언트와 서버가 방화벽을 통해 통신해야 하는 경우 실용적이지 않을 수 있습니다. 다른 방법은 EPM에서 사용할 포트 번호 또는 포트 번호 범위를 지정하고 방화벽에서 해당 포트를 여는 것입니다.

RPC를 사용하는 많은 Windows 서버 애플리케이션은 허용된 포트를 사용자 지정하는 옵션(예: 레지스트리 키)을 제공합니다. Windows 서비스는 이 작업에 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet 하위 키를 사용합니다.

포트 또는 포트 범위를 지정하는 경우 일반적으로 사용되는 포트 범위를 벗어난 포트를 사용합니다. Windows에서 사용되는 서버 포트의 포괄적인 목록과 Windows의 서비스 개요 및 네트워크 포트 요구 사항의 주요 Microsoft 제품을 찾을 수 있습니다. 또한 이 문서에서는 RPC 서버 애플리케이션을 나열하고 RPC 런타임의 기능 외에 사용자 지정 서버 포트를 사용하도록 구성할 수 있는 RPC 서버 애플리케이션을 언급합니다.

Important

이 절, 방법 또는 작업에는 레지스트리를 수정하는 방법에 대한 단계가 포함되어 있습니다. 그러나 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다. 따라서 다음 단계를 신중하게 수행해야 합니다. 보호하기 위해 레지스트리를 수정하기 전에 백업하여 문제가 발생할 경우 레지스트리를 복원할 수 있도록 합니다. 레지스트리를 백업하고 복원하는 방법에 대한 자세한 내용은 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보다 큰 포트 범위를 열어야 합니다. 5,000개 미만의 포트 번호는 이미 다른 애플리케이션에서 사용 중일 수 있으며 DCOM 애플리케이션과 충돌을 일으킬 수 있습니다. 또한 이전 환경에서는 최소 100개의 포트를 열어야 합니다. 이는 여러 시스템 서비스가 이러한 RPC 포트를 사용하여 서로 통신하기 때문입니다.

참고 항목

필요한 최소 포트 수는 컴퓨터마다 다를 수 있습니다. 더 많은 트래픽을 지원하는 컴퓨터는 RPC 동적 포트가 제한된 경우 포트 소모가 발생할 수 있습니다. 포트 범위를 제한하는 경우 이를 고려합니다.

Warning

포트 구성에 오류가 있거나 풀에 포트가 충분하지 않은 경우 EPM은 동적 엔드포인트를 사용하는 RPC 서버 애플리케이션(예: Netlogon과 같은 Windows 서비스 포함)을 등록할 수 없습니다. 구성 오류가 발생하면 오류 코드는 87(0x57) ERROR_INVALID_PARAMETER. 예를 들어 포트가 충분하지 않은 경우 Netlogon은 이벤트 5820을 기록합니다.

로그 이름: 시스템
출처: NETLOGON
이벤트 ID: 5820
수준: 오류
키워드: 클래식
설명:
Netlogon 서비스에서 AuthZ RPC 인터페이스를 추가할 수 없습니다. 서비스가 종료되었습니다. '매개 변수가 잘못되었습니다.'라는 오류가 발생했습니다.

RPC 작동 방식에 대한 자세한 내용은 IT/Pro를 통한 RPC를 참조하세요.

사용자 지정 포트 구성의 예

이 예제에서는 새 레지스트리 항목을 구성하는 방법을 설명하기 위해 포트 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

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 네트워크 모니터 3.4 또는 메시지 분석기에서 추적 파일을 열고 서버 또는 클라이언트 컴퓨터 및 TCP 포트 135의 IP 주소에 대한 추적 데이터를 필터링합니다. 예를 들어 다음과 같은 필터 문자열을 사용합니다.

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

    이 필터 문자열<에서 client-ip>는 클라이언트의 IP 주소를 나타내고 <서버-ip>는 서버의 IP 주소를 나타냅니다.

  • tcp.port==135

필터링된 데이터에서 프로토콜 열에서 EPM 항목을 찾습니다.

동적 포트 번호를 포함하는 EPM(서버)의 응답을 찾습니다. 동적 포트 번호가 있는 경우 나중에 참조할 수 있습니다.

강조 표시된 동적 포트를 보여 주는 네트워크 모니터의 스크린샷

동적 포트 번호 및 서버 IP 주소에 대한 추적 데이터를 다시 필터링합니다. 예를 들어 tcp.port==dynamic-port-allocated> 및 ipv4.address==<server-ip>와 같은 필터 문자열을 사용합니다.< 이 필터 문자열<에서 동적 포트 할당은> 동적 포트 번호를 나타내고 <서버 ip>는 서버의 IP 주소를 나타냅니다.

필터가 적용된 네트워크 모니터의 스크린샷

필터링된 데이터에서 클라이언트가 동적 포트에 성공적으로 연결되었다는 증거를 찾거나 발생할 수 있는 네트워크 문제를 찾습니다.

포트에 연결할 수 없음

"RPC 서버를 사용할 수 없음" 오류의 가장 일반적인 원인은 클라이언트가 할당된 동적 포트에 연결할 수 없다는 것입니다. 그러면 클라이언트 쪽 추적에 동적 포트에 대한 TCP SYN 재전송이 표시됩니다.

TCP SYN 재전송을 보여 주는 네트워크 모니터의 스크린샷

이 동작은 다음 조건 중 하나가 통신을 차단하고 있음을 나타냅니다.

  • 동적 포트 범위는 환경의 방화벽에서 차단됩니다.
  • 중간 디바이스가 패킷을 삭제하고 있습니다.
  • 대상 서버가 패킷을 삭제합니다. 이 조건은 WFP(Windows Filtering Platform) 패킷 삭제, NIC(네트워크 인터페이스 카드) 패킷 삭제 또는 필터 드라이버 수정과 같은 구성으로 인해 발생할 수 있습니다.

심층 문제 해결을 위해 데이터 수집

Microsoft 지원에 문의하기 전에 문제에 대한 정보를 수집하는 것이 좋습니다.

필수 조건

이러한 절차에서는 TSS(TroubleShootingScript) 도구 집합을 사용합니다. 이 도구 집합을 사용하려면 다음 필수 구성 요소를 알고 있어야 합니다.

  • 로컬 컴퓨터에 대한 관리자 수준 권한이 있어야 합니다.

  • 도구 집합을 처음 실행할 때 EULA를 수락해야 합니다.

  • 컴퓨터에 대한 Windows PowerShell 스크립트 실행 정책이 .로 설정되어 있는지 확인합니다 RemoteSigned. PowerShell 실행 정책에 대한 자세한 내용은 about_Execution_Policies 참조하세요.

    참고 항목

    사용자 환경에서 컴퓨터 수준에서 사용할 RemoteSigned 수 없는 경우 프로세스 수준에서 일시적으로 설정할 수 있습니다. 이렇게 하려면 도구를 시작하기 전에 관리자 권한 Powershell 명령 프롬프트 창에서 다음 cmdlet을 실행합니다.

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

    변경 내용이 적용되는지 확인하려면 cmdlet을 PS C:\> Get-ExecutionPolicy -List 실행합니다.

    프로세스 수준 권한은 현재 PowerShell 세션에만 적용됩니다. PowerShell 창을 닫으면 실행 정책이 원래 설정으로 되돌아갑니다.

Microsoft 지원에 문의하기 전에 주요 정보 수집

  1. 모든 노드에서 TSS를 다운로드하고 C:\tss 폴더로 확장합니다.

  2. 관리자 권한 PowerShell 명령 프롬프트 창에서 C:\tss 폴더를 엽니다.

  3. 다음 cmdlet을 실행하여 문제 컴퓨터에서 추적을 시작합니다.

    .\TSS.ps1 -Scenario NET_RPC
    
  4. EULA 프롬프트에 응답합니다.

  5. 문제를 재현합니다. 이벤트 뷰어 또는 wbemtest와 같은 도구를 사용하여 문제를 모니터링하거나 테스트할 수 있습니다.

  6. 문제를 재현한 후 즉시 데이터 수집을 중지합니다.

  7. 자동화된 스크립트가 필요한 데이터 수집을 완료한 후 지원 요청에 데이터를 연결합니다.