ข้อผิดพลาด "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
- คอมพิวเตอร์ระยะไกลปิดอยู่
- RPC Services ไม่ได้ทำงานบนโฮสต์ระยะไกล
- พยายามเชื่อมต่อกับ RPC Server โดยใช้ Hostname ผิด (หรือ IP Address ผิดตรงกับ DNS Name ของเซิร์ฟเวอร์)
- ใช้การตั้งค่าการเชื่อมต่อเครือข่ายที่ไม่ถูกต้องบนเซิร์ฟเวอร์หรือไคลเอ็นต์
- 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 ทำงานบนเซิร์ฟเวอร์:
- เปิด Service Management Console (
services.msc) - ตรวจสอบว่าบริการต่อไปนี้กำลังทำงานและตั้งค่าเริ่มต้นอัตโนมัติ: 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
ตรวจสอบว่า 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
ตรวจสอบ 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
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)