Lỗi "The RPC server is unavailable" (Máy chủ RPC không khả dụng) xuất hiện trên Windows khi xảy ra lỗi giao tiếp giữa hai máy tính trong mạng. Máy tính của bạn (client RPC) không thể kết nối đến máy tính từ xa (server RPC). Vì vậy, chương trình bạn đang chạy không hoạt động và trả về lỗi RPC vì nó không thể truy cập dữ liệu trên máy chủ từ xa. Trong bài viết này, chúng ta sẽ phân tích các vấn đề phổ biến có thể ngăn cản giao tiếp bình thường của máy tính qua mạng bằng giao thức RPC.
RPC (Remote Process Call) là giao thức phổ biến cho ứng dụng client-server giao tiếp qua mạng cục bộ. Thông thường, nó dùng để giao tiếp với máy tính từ xa, tuy nhiên, một số chương trình dùng RPC trong tương tác giữa app và dịch vụ chạy cục bộ.
Trong một phiên điển hình, client RPC kết nối đến dịch vụ RPC Endpoint Mapper trên server RPC qua TCP Port 135 và yêu cầu số cổng mà ứng dụng RPC (dịch vụ) nó cần đang chạy. RPC Endpoint Mapper trả về số cổng RPC động được gán cho dịch vụ chỉ định khi nó khởi động. Sau đó client RPC kết nối đến dịch vụ ứng dụng RPC trên cổng TCP chỉ định.
Nếu client RPC không thể kết nối đến server RPC, lỗi sau xuất hiện trong app:
The RPC server is unavailable
Các phiên bản Windows hiện đại (Windows Vista/2008 và mới hơn) dùng Dynamic RPC Port range từ 49152 đến 65535. Windows Server 2003/XP/2000 dùng dải cổng RPC khác – 1024 – 65535.
Dưới đây là các vấn đề phổ biến nhất ngăn cản máy tính giao tiếp qua RPC:
- Máy tính từ xa bị tắt;
- Dịch vụ RPC không chạy trên máy chủ từ xa;
- Bạn cố kết nối đến server RPC dùng hostname sai (hoặc địa chỉ IP sai khớp với tên DNS server);
- Cài đặt kết nối mạng không đúng trên server hoặc client;
- Lưu lượng RPC giữa client và server bị chặn bởi firewall.
Kiểm tra khả dụng của máy tính từ xa
Đảm bảo máy tính từ xa đang bật, ping nó bằng tên và địa chỉ IP. Nếu server RPC không khả dụng bằng hostname, kiểm tra xem bản ghi DNS có đúng không và thử xóa cache DNS trên client: ipconfig /flushdns.
Nếu tên máy tính server RPC chạy đã được thay đổi gần đây, hãy thử đăng ký lại nó trong Active Directory DNS: ipconfig /registerdns.
Kiểm tra trạng thái dịch vụ DCE/RPC
Đảm bảo các dịch vụ xử lý kết nối RPC đến đang chạy trên server:
- Mở bảng điều khiển Quản lý dịch vụ (
services.msc); - Đảm bảo các dịch vụ sau đang chạy và được cấu hình khởi động tự động: Remote Procedure Call (RPC), RPC Endpoint Mapper và DCOM Server Process Launcher.
Bạn có thể kiểm tra trạng thái dịch vụ qua PowerShell:
Get-Service RpcSs,RpcEptMapper,DcomLaunch| Select DisplayName,Status,StartType
Nếu dịch vụ RPC bị dừng và bạn không thể khởi động chúng, hãy thử kích hoạt chúng qua registry. Tìm khóa registry của dịch vụ và thay đổi giá trị tham số Start thành 2 (khởi động dịch vụ tự động):
- 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 chặn kết nối RPC
Đảm bảo lưu lượng RPC giữa máy tính không bị chặn bởi firewall của bạn. Nếu bạn dùng Windows Defender Firewall with Advanced Security, bạn cần tạo quy tắc cho phép lưu lượng RPC hoặc đảm bảo chúng tồn tại. Một trong các quy tắc là cho phép truy cập dịch vụ RPC Endpoint Mapper qua cổng TCP 135, quy tắc khác là cho phép truy cập dịch vụ RPC bạn muốn dùng qua Dynamic RPC Ports. Tạo quy tắc cho tất cả profile mạng: Domain, Private và Public.
Bạn có thể tạo quy tắc thủ công theo hướng dẫn trong bài Create Inbound Rules to Support RPC https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-firewall/create-inbound-rules-to-support-rpc). Trong môi trường miền AD, bạn có thể triển khai quy tắc firewall qua GPO hoặc dùng script PowerShell.
Đảm bảo cổng TCP/135 khả dụng trên server RPC của bạn từ client (RPC Endpoint Mapper phải lắng nghe trên nó). Bạn có thể kiểm tra khả dụng cổng qua PowerShell:
Test-NetConnection 192.168.1.201 -port 135
Nếu cổng RPC khả dụng, bạn sẽ thấy thông báo: TcpTestSucceeded:True.
Bạn có thể lấy danh sách RPC endpoint (dịch vụ và ứng dụng) đã đăng ký trên máy tính từ xa và được quảng cáo bởi dịch vụ RPC Endpoint Mapper dùng công cụ PortQry:
portqry -n 192.168.1.201 -p tcp -e 135
Trong đầu ra PortQry, bạn có thể thấy số cổng được gán cho dịch vụ RPC bạn muốn dùng (nó đang chạy?) và đảm bảo cổng không bị chặn từ client.
Nếu bạn dùng firewall/antivirus bên thứ ba, đảm bảo nó không chặn lưu lượng RPC và có thể xử lý đúng lưu lượng RPC Dynamic Ports.
Kiểm tra giao thức mạng & cài đặt
Đảm bảo cài đặt mạng trên máy tính của bạn đúng: địa chỉ IP, default gateway, subnet mask, cài đặt DNS server (bạn có thể kiểm tra cài đặt mạng từ PowerShell). Đảm bảo Internet Protocol Version 6 (TCP/IPv6) và File and Printer Sharing for Microsoft Networks được bật trong cài đặt card mạng.
Một số ứng dụng mạng không hoạt động đúng nếu giao thức TCP/IPv6 bị tắt và trả về lỗi: 1722 The RPC server is unavailable. Nếu lỗi RPC vẫn tồn tại sau khi bật IPv6, hãy thử tắt giao thức Teredo qua registry:
Tạo tham số DWORD tên DisabledComponents và giá trị 8 trong khóa reg HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters:
reg add hklm\system\currentcontrolset\services\tcpip6\parameters /v DisabledComponents /t REG_DWORD /d 8
Trong một số trường hợp, bạn sẽ phải lấy dump traffic từ server RPC và phân tích dùng Microsoft Network Monitor 3.4 hoặc Message Analyzer.
Windows 10 1809 và Windows Server 2019 có bộ嗅探 traffic tích hợp – Packet Monitor (PktMon.exe).