Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

การแก้ไขข้อผิดพลาด "RPC Server Unavailable" บน Windows

ข้อผิดพลาด "The RPC server is unavailable" ปรากฏบน Windows เมื่อเกิดข้อผิดพลาดการสื่อสารระหว่างคอมพิวเตอร์สองเครื่องในเครือข่าย คอมพิวเตอร์ของคุณ (RPC Client) ไม่สามารถเชื่อมต่อกับคอมพิวเตอร์ระยะไกล (RPC Server) ได้ ดังนั้นโปรแกรมที่คุณกำลังรันจึงไม่ทำงานและคืนค่าข้อผิดพลาด RPC เพราะไม่สามารถเข้าถึงข้อมูลบนโฮสต์ระยะไกล ในบทความนี้เราจะวิเคราะห์ปัญหาทั่วไปที่อาจป้องกันการสื่อสารปกติของคอมพิวเตอร์ผ่านเครือข่ายโดยใช้โปรโตคอล RPC

ความเข้าใจเกี่ยวกับ RPC

RPC (Remote Process Call) เป็นโปรโตคอลยอดนิยมสำหรับแอป Client-Server ในการสื่อสารผ่าน Local Network ปกติใช้เพื่อสื่อสารกับคอมพิวเตอร์ระยะไกล อย่างไรก็ตาม บางโปรแกรมใช้ RPC ในการโต้ตอบระหว่างแอปและ Service ที่รันในเครื่องเดียวกัน

ในเซสชันทั่วไป RPC Client จะเชื่อมต่อกับบริการ RPC Endpoint Mapper บน RPC Server ผ่าน TCP Port 135 และขอหมายเลขพอร์ตที่ RPC App (Service) ที่ต้องการกำลังทำงานอยู่ RPC Endpoint Mapper จะคืนค่าหมายเลข Dynamic RPC Port ที่มอบหมายให้บริการที่ระบุเมื่อเริ่มต้น แล้ว RPC Client จะเชื่อมต่อกับ RPC App Service บน TCP Port ที่ระบุ

หาก RPC Client ไม่สามารถเชื่อมต่อกับ RPC Server ได้ จะปรากฏข้อผิดพลาดในแอป:

The RPC server is unavailable

Windows เวอร์ชันใหม่ (Windows Vista/2008 และใหม่กว่า) ใช้ Dynamic RPC Port Range จาก 49152 ถึง 65535 Windows Server 2003/XP/2000 ใช้ช่วง RPC Port ต่างกัน – 1024 – 65535

ปัญหาทั่วไปที่ป้องกันการสื่อสารผ่าน RPC

  1. คอมพิวเตอร์ระยะไกลปิดอยู่
  2. RPC Services ไม่ได้ทำงานบนโฮสต์ระยะไกล
  3. พยายามเชื่อมต่อกับ RPC Server โดยใช้ Hostname ผิด (หรือ IP Address ผิดตรงกับ DNS Name ของเซิร์ฟเวอร์)
  4. ใช้การตั้งค่าการเชื่อมต่อเครือข่ายที่ไม่ถูกต้องบนเซิร์ฟเวอร์หรือไคลเอ็นต์
  5. RPC Traffic ระหว่าง Client และ Server ถูกบล็อกโดย Firewall

ตรวจสอบความพร้อมของคอมพิวเตอร์ระยะไกล

ตรวจสอบว่าคอมพิวเตอร์ระยะไกลเปิดอยู่ Ping ด้วยชื่อและ IP Address หาก RPC Server ไม่พร้อมใช้งานด้วย Hostname ตรวจสอบว่า DNS Records ถูกต้อง และลอง Flush DNS Cache บน Client: ipconfig /flushdns

หากชื่อคอมพิวเตอร์ที่ RPC Server รันอยู่เปลี่ยนไปเมื่อเร็วๆ นี้ ลอง Re-register ใน Active Directory DNS: ipconfig /registerdns

ตรวจสอบสถานะ DCE/RPC Services

ตรวจสอบว่าบริการที่ประมวลผล Incoming RPC Connections ทำงานบนเซิร์ฟเวอร์:

  1. เปิด Service Management Console (services.msc)
  2. ตรวจสอบว่าบริการต่อไปนี้กำลังทำงานและตั้งค่าเริ่มต้นอัตโนมัติ: Remote Procedure Call (RPC), RPC Endpoint Mapper และ DCOM Server Process Launcher

สามารถตรวจสอบสถานะบริการผ่าน PowerShell:

Get-Service RpcSs,RpcEptMapper,DcomLaunch| Select DisplayName,Status,StartType

หาก RPC Services หยุดทำงานและไม่สามารถเริ่มได้ ลองเปิดใช้งานผ่าน Registry หา Registry Key ของบริการและเปลี่ยนค่าพารามิเตอร์ Start เป็น 2 (Automatic Service Startup):

  • Remote Procedure Call (RPC) — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcSs
  • RPC Endpoint Mapper — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcEptMapper
  • DCOM Server Process Launcher — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DcomLaunch

Firewall บล็อก RPC Connections

ตรวจสอบว่า RPC Traffic ระหว่างคอมพิวเตอร์ไม่ถูกบล็อกโดย Firewall ของคุณ หากใช้ Windows Defender Firewall with Advanced Security ต้องสร้าง Rules อนุญาต RPC Traffic หรือตรวจสอบว่ามีอยู่แล้ว กฎหนึ่งคืออนุญาตการเข้าถึง RPC Endpoint Mapper Service ผ่าน Port TCP 135 อีกกฎคืออนุญาตการเข้าถึง RPC Service ที่ต้องการผ่าน RPC Dynamic Ports สร้าง Rules สำหรับ Network Profiles ทั้งหมด: Domain, Private และ Public

สามารถสร้าง Rules ด้วยตนเองตามคำแนะนำในบทความ Create Inbound Rules to Support RPC https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-firewall/create-inbound-rules-to-support-rpc) ในสภาพแวดล้อม AD Domain สามารถปรับใช้ Firewall Rules ด้วย GPO หรือใช้ PowerShell Scripts

ตรวจสอบว่า Port TCP/135 พร้อมใช้งานบน RPC Server ของคุณจาก Client (RPC Endpoint Mapper ต้อง Listen บนพอร์ตนี้) สามารถตรวจสอบความพร้อมของพอร์ตผ่าน PowerShell:

Test-NetConnection 192.168.1.201 -port 135

หาก RPC Port พร้อมใช้งาน จะเห็นข้อความ: TcpTestSucceeded:True

สามารถรับรายการ RPC Endpoints (Services และ Applications) ที่ลงทะเบียนบนคอมพิวเตอร์ระยะไกลและโฆษณาโดย RPC Endpoint Mapper Service โดยใช้เครื่องมือ PortQry:

portqry -n 192.168.1.201 -p tcp -e 135

ใน Output ของ PortQry สามารถดูหมายเลขพอร์ตที่มอบหมายให้ RPC Service ที่ต้องการ (มันรันอยู่ไหม?) และตรวจสอบว่าพอร์ตไม่ถูกบล็อกจาก Client

หากใช้ Firewall/Antivirus Software ของบุคคลที่สาม ตรวจสอบว่าไม่บล็อก RPC Traffic และสามารถประมวลผล RPC Dynamic Ports Traffic ได้ถูกต้อง

ตรวจสอบ Network Protocols & Settings

ตรวจสอบว่าการตั้งค่าเครือข่ายบนคอมพิวเตอร์ของคุณถูกต้อง: IP Address, Default Gateway, Subnet Mask, DNS Server Settings (สามารถตรวจสอบการตั้งค่าเครือข่ายจาก PowerShell) ตรวจสอบว่า Internet Protocol Version 6 (TCP/IPv6) และ File and Printer Sharing for Microsoft Networks เปิดใช้งานในการตั้งค่า Network Adapter

แอปเครือข่ายบางตัวทำงานไม่ถูกต้องหาก TCP/IPv6 Protocol ถูกปิดใช้งาน และคืนค่าข้อผิดพลาด: 1722 The RPC server is unavailable หากข้อผิดพลาด RPC ยังคงอยู่หลังเปิดใช้งาน IPv6 ลองปิดใช้งาน Teredo Protocol ผ่าน Registry: สร้างพารามิเตอร์ DWORD ชื่อ DisabledComponents และค่า 8 ใน Reg Key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters: reg add hklm\system\currentcontrolset\services\tcpip6\parameters /v DisabledComponents /t REG_DWORD /d 8

ในบางกรณี จะต้องจับ Traffic Dump จาก RPC Server ของคุณและวิเคราะห์โดยใช้ Microsoft Network Monitor 3.4 หรือ Message Analyzer

Windows 10 1809 และ Windows Server 2019 มี Built-in Traffic Sniffer – Packet Monitor (PktMon.exe)