ค้นหาเว็บไซต์

การแก้ไขปัญหาข้อผิดพลาด “เซิร์ฟเวอร์ RPC ไม่พร้อมใช้งาน” บน Windows


“

The RPC server is unavailable

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

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

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

หากไคลเอ็นต์ RPC ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ RPC ได้ ข้อผิดพลาดต่อไปนี้จะปรากฏขึ้นในแอป:

The RPC server is unavailable

Windows รุ่นสมัยใหม่ (Windows Vista/2008 และใหม่กว่า) ใช้ช่วง พอร์ต RPC แบบไดนามิก จาก

49152

ถึง

65535

. Windows Server 2003/XP/2000 ใช้ช่วงพอร์ต RPC ที่แตกต่างกัน - 1024 - 65535

ต่อไปนี้คือปัญหาทั่วไปที่ทำให้คอมพิวเตอร์ไม่สามารถสื่อสารผ่าน RPC ได้:

  1. คอมพิวเตอร์ระยะไกลปิดอยู่

  2. บริการ RPC ไม่ได้ทำงานบนรีโมตโฮสต์

  3. คุณกำลังพยายามเชื่อมต่อกับเซิร์ฟเวอร์ RPC โดยใช้ชื่อโฮสต์ไม่ถูกต้อง (หรือที่อยู่ IP ไม่ถูกต้องตรงกับชื่อ DNS ของเซิร์ฟเวอร์)

  4. มีการใช้การตั้งค่าการเชื่อมต่อเครือข่ายที่ไม่ถูกต้องบนเซิร์ฟเวอร์หรือไคลเอนต์

  5. การรับส่งข้อมูล RPC ระหว่างไคลเอนต์และเซิร์ฟเวอร์ถูกบล็อกโดยไฟร์วอลล์

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

ตรวจสอบให้แน่ใจว่าคอมพิวเตอร์ระยะไกลเปิดอยู่ ping ด้วยชื่อและที่อยู่ IP หากชื่อโฮสต์ไม่มีเซิร์ฟเวอร์ RPC ให้ตรวจสอบว่าระเบียน DNS ถูกต้องหรือไม่ และลองล้างแคช DNS บนไคลเอ็นต์:

ipconfig /flushdns

หากชื่อของคอมพิวเตอร์ที่เซิร์ฟเวอร์ RPC ของคุณใช้งานอยู่มีการเปลี่ยนแปลงเมื่อเร็วๆ นี้ ให้ลองลงทะเบียนใหม่ใน Active Directory DNS:

ipconfig /registerdns

ตรวจสอบสถานะของบริการ DCE/RPC

ตรวจสอบให้แน่ใจว่าบริการที่ประมวลผลการเชื่อมต่อ RPC ขาเข้ากำลังทำงานบนเซิร์ฟเวอร์:

  1. เปิดคอนโซลการจัดการบริการ (

    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 หยุดทำงานและคุณไม่สามารถเริ่มได้ ให้ลองเปิดใช้งานผ่านรีจิสทรี ค้นหาคีย์รีจิสทรีของบริการและเปลี่ยนค่าของพารามิเตอร์ Start เป็น 2 (การเริ่มต้นบริการอัตโนมัติ):

  • การเรียกขั้นตอนระยะไกล (RPC) — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcSs

  • ตัวทำแผนที่ปลายทาง RPC — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RpcEptMapper

  • DCOM Server Process Launcher — HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DcomLaunch

ไฟร์วอลล์ปิดกั้นการเชื่อมต่อ RPC

ตรวจสอบให้แน่ใจว่าการรับส่งข้อมูล RPC ระหว่างคอมพิวเตอร์ไม่ได้ถูกบล็อกโดยไฟร์วอลล์ของคุณ หากคุณใช้ไฟร์วอลล์ Windows Defender ที่มีความปลอดภัยขั้นสูง คุณต้องสร้างกฎที่อนุญาตการรับส่งข้อมูล RPC หรือตรวจสอบให้แน่ใจว่ามีอยู่จริง กฎข้อหนึ่งคือการอนุญาตการเข้าถึงบริการ RPC Endpoint Mapper ผ่านพอร์ต TCP 135 อีกข้อหนึ่งคือการอนุญาตการเข้าถึงบริการ RPC ที่คุณต้องการใช้ผ่าน RPC Dynamic Ports สร้างกฎสำหรับโปรไฟล์เครือข่ายทั้งหมด: โดเมน ส่วนตัว และ สาธารณะ

คุณสามารถสร้างกฎด้วยตนเองโดยทำตามคำแนะนำในบทความ สร้างกฎขาเข้าเพื่อรองรับ RPC https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-firewall /create-inbound-rules-to-support-rpc) ในสภาพแวดล้อมโดเมน AD คุณสามารถปรับใช้กฎไฟร์วอลล์โดยใช้ GPO หรือใช้สคริปต์ PowerShell

ตรวจสอบให้แน่ใจว่าพอร์ต TCP/135 พร้อมใช้งานบนเซิร์ฟเวอร์ RPC ของคุณจากไคลเอ็นต์ (ตัวแมปจุดสิ้นสุด RPC ต้องรับฟัง) คุณสามารถตรวจสอบความพร้อมใช้งานของพอร์ตผ่าน PowerShell:

Test-NetConnection 192.168.1.201 -port 135

หากมีพอร์ต RPC คุณจะเห็นข้อความ:

TcpTestSucceeded:True

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

portqry -n 192.168.1.201 -p tcp -e 135

ในเอาต์พุต PortQry คุณสามารถดูหมายเลขของพอร์ตที่กำหนดให้กับบริการ RPC ที่คุณต้องการใช้ (กำลังทำงานอยู่หรือไม่) และตรวจสอบให้แน่ใจว่าพอร์ตไม่ถูกบล็อกจากไคลเอ็นต์

หากคุณใช้ซอฟต์แวร์ไฟร์วอลล์/ป้องกันไวรัสของบริษัทอื่น ตรวจสอบให้แน่ใจว่าซอฟต์แวร์นั้นไม่ได้บล็อกการรับส่งข้อมูล RPC และสามารถประมวลผลการรับส่งข้อมูล RPC Dynamic Ports ได้อย่างถูกต้อง

ตรวจสอบโปรโตคอลและการตั้งค่าเครือข่าย

ตรวจสอบให้แน่ใจว่าการตั้งค่าเครือข่ายบนคอมพิวเตอร์ของคุณถูกต้อง: ที่อยู่ IP, เกตเวย์เริ่มต้น, ซับเน็ตมาสก์, การตั้งค่าเซิร์ฟเวอร์ DNS (คุณสามารถตรวจสอบการตั้งค่าเครือข่ายได้จาก PowerShell) ตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน Internet Protocol Version 6 (TCP/IPv6) และ File and Printer Sharing for Microsoft Networks ในการตั้งค่าของอะแดปเตอร์เครือข่าย

แอพเครือข่ายบางตัวทำงานไม่ถูกต้องหากโปรโตคอล TCP/IPv6 ถูกปิดใช้งานและส่งกลับข้อผิดพลาด:

1722 The RPC server is unavailable

. หากข้อผิดพลาด RPC ยังคงอยู่หลังจากเปิดใช้งาน IPv6 ให้ลองปิดใช้งานโปรโตคอล Teredo ผ่านรีจิสทรี:
สร้างพารามิเตอร์ DWORD ด้วยชื่อ DisabledComponents และค่า 8 ใน คีย์ reg HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters:

reg add hklm\system\currentcontrolset\services\tcpip6\parameters /v DisabledComponents /t REG_DWORD /d 8

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

Windows 10 1809 และ Windows Server 2019 มีตัวตรวจจับการรับส่งข้อมูลในตัว - Packet Monitor (PktMon.exe)

บทความที่เกี่ยวข้อง