RPC – Remote Procedure Call, bir uygulamanın veya servisin başka bir bilgisayar üzerindeki bir işlem, fonksiyon veya servisi sanki yerel sistemde çalışıyormuş gibi çağırmasını sağlayan iletişim mekanizmasıdır. Windows ortamında RPC son derece temel bir bileşendir. Active Directory replication, Group Policy, MMC yönetim araçları, WMI, servis yönetimi ve birçok Windows bileşeni RPC iletişimini kullanır. Bu nedenle RPC’yi tek başına bir uygulama protokolü gibi düşünmemek gerekir. RPC, client ve server tarafındaki uygulamaların veya servislerin network üzerinden birbirleriyle iletişim kurmasını sağlayan bir ara katmandır.

RPC Nedir?

Remote Procedure Call kelime anlamıyla “uzak prosedür çağrısı” demektir. Bir uygulama başka bir sistem üzerindeki fonksiyonu çağırmak istediğinde, uygulamanın network iletişiminin bütün detaylarıyla kendisinin ilgilenmesi yerine RPC altyapısı bu iletişimi organize eder. Basit bir örnek vermek gerekirse, bir yönetim konsolu uzak sunucu üzerindeki bir servisin durumunu sorgulamak istediğinde ilgili Windows API çağrıları RPC üzerinden uzak sisteme iletilebilir.

RPC Nasıl Çalışır?

Windows üzerinde RPC iletişimini basitleştirerek aşağıdaki şekilde düşünebiliriz:
  1. Client bir RPC servisine erişmek ister.
  2. Öncelikle hedef sistem üzerindeki RPC Endpoint Mapper ile iletişim kurar.
  3. Endpoint Mapper, ilgili RPC servisinin hangi port üzerinde dinlediğini client’a bildirir.
  4. Client daha sonra doğrudan bu dinamik porta bağlanır.
  5. RPC çağrısı ilgili servis tarafından işlenir.
Bu yapı nedeniyle yalnızca TCP 135 portunun açık olması her zaman RPC iletişiminin çalışması için yeterli değildir.

RPC Endpoint Mapper Nedir?

RPC Endpoint Mapper, Windows RPC mimarisindeki en önemli bileşenlerden biridir. Endpoint Mapper varsayılan olarak TCP 135 portunu dinler. Client bir RPC servisine bağlanmak istediğinde ilk olarak port 135 üzerinden Endpoint Mapper’a ulaşır. Endpoint Mapper ilgili servisin hangi dinamik TCP portunu kullandığını client’a bildirir. Client daha sonra bağlantısını bu porta yönlendirir. Yani RPC iletişimi çoğu senaryoda iki aşamalıdır:
  • TCP 135: RPC Endpoint Mapper ile ilk iletişim
  • Dinamik RPC portu: Asıl servis iletişimi

Windows RPC Hangi Portları Kullanır?

Güncel Windows Server ve Windows istemci sürümlerinde RPC Endpoint Mapper için temel port:
TCP 135
RPC servislerinin dinamik olarak kullanabileceği varsayılan TCP port aralığı ise modern Windows sürümlerinde genel olarak:
TCP 49152-65535
aralığıdır. Windows Server 2008 ve sonrasında varsayılan dinamik port aralığı 49152-65535 olarak kullanılmaktadır. Eski Windows Server sürümlerinde daha düşük port aralıkları kullanılıyordu. Bu nedenle firewall tarafında yalnızca TCP 135’e izin verip dinamik RPC portlarını engellerseniz ilk bağlantı başarılı görünmesine rağmen gerçek RPC çağrısı başarısız olabilir.

RPC ile TCP 135 Arasındaki İlişki

RPC problemi yaşandığında sık yapılan hatalardan biri yalnızca port 135’i test etmektir. Client 135 numaralı porta erişebiliyor olabilir ancak Endpoint Mapper tarafından verilen dinamik porta erişemiyorsa RPC yine çalışmaz. Bu nedenle firewall troubleshooting sırasında iki ayrı kontrol yapılmalıdır:
  1. Client hedef sistemde TCP 135’e erişebiliyor mu?
  2. Endpoint Mapper’ın bildirdiği dinamik RPC portuna erişebiliyor mu?

Active Directory RPC Kullanır mı?

Evet. Active Directory ortamlarında RPC kritik öneme sahiptir. Özellikle Domain Controller’lar arasındaki Active Directory replication işlemlerinde RPC kullanılır. Bu nedenle iki Domain Controller arasında RPC iletişimi engellendiğinde replication hataları oluşabilir. Örneğin “The RPC server is unavailable” veya 1722 hatası Active Directory replication sorunlarında sık görülen hatalardan biridir.

RPC Hangi Windows Servisleri Tarafından Kullanılır?

Windows ortamında birçok bileşen RPC kullanır. Bunların arasında:
  • Active Directory replication
  • Group Policy işlemleri
  • Microsoft Management Console – MMC araçları
  • Remote Service Management
  • WMI tabanlı yönetim işlemleri
  • Certificate Services
  • Distributed File System ve bazı yönetim servisleri
  • Remote administration araçları
gibi çok sayıda Windows bileşeni bulunur. Bu nedenle RPC problemi genellikle tek bir uygulamayı değil, birden fazla yönetim ve altyapı servisini aynı anda etkileyebilir.

RPC Server Is Unavailable Hatası Nedir?

Windows ortamlarında en sık karşılaşılan RPC hatalarından biri:
The RPC server is unavailable.
Error 1722
0x6BA
RPC_S_SERVER_UNAVAILABLE
hatasıdır. Bu hata RPC servisinin mutlaka durmuş olduğu anlamına gelmez. Aslında çoğu zaman client’ın hedef RPC servisine network üzerinden ulaşamadığını gösterir.

RPC Sunucusu Kullanılamıyor Hatasının Nedenleri

Sahada 1722 RPC hatası gördüğümde yalnızca RPC servisine bakmıyorum. Çünkü problemin kaynağı çoğu zaman RPC’nin kendisi değil, RPC’nin kullandığı network veya isim çözümleme katmanıdır. En sık kontrol ettiğim noktalar şunlardır:
  • DNS resolution doğru çalışıyor mu?
  • Hedef sunucu network üzerinden erişilebilir mi?
  • TCP 135 açık mı?
  • Dinamik RPC portları firewall tarafından engelleniyor mu?
  • RPC servisleri çalışıyor mu?
  • Arada firewall veya IPS gibi bir network cihazı bağlantıyı düşürüyor mu?
  • Active Directory ortamında gerekli diğer portlar açık mı?
  • İki sistem arasında routing problemi var mı?
Özellikle Domain Controller replication sorunlarında DNS ile RPC’yi birbirinden bağımsız düşünmemek gerekir. Client veya DC yanlış IP adresine resolve oluyorsa RPC iletişimi doğru porta ulaşamaz.

RPC Port 135 Nasıl Test Edilir?

PowerShell üzerinden hedef sistemin TCP 135 portuna erişimi kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
Test-NetConnection server01.contoso.com -Port 135
Sonuç içerisinde:
TcpTestSucceeded : True
görüyorsanız client RPC Endpoint Mapper’a ulaşabiliyor demektir. Ancak tekrar hatırlatmak gerekir ki yalnızca port 135’in açık olması RPC bağlantısının tamamen çalıştığını kanıtlamaz. Asıl servis için kullanılan dinamik portun da erişilebilir olması gerekir.

RPC Kontrolünde PortQry Kullanımı

RPC troubleshooting sırasında Microsoft’un PortQry aracı da oldukça faydalıdır. Örneğin Endpoint Mapper kontrolü için:
portqry -n server01.contoso.com -e 135
komutu kullanılabilir. RPC Endpoint Mapper üzerinden hangi servislerin hangi endpoint’leri kullandığını görmek özellikle firewall problemlerini analiz ederken faydalıdır.

RPC Dinamik Port Aralığı Firewall’da Açılmalı mı?

Bu tamamen kullandığınız servis ve network tasarımına bağlıdır. Standart Windows RPC mimarisinde Endpoint Mapper servislerin dinamik port kullanmasına izin verir. Bu nedenle sistemler arasında RPC kullanılacaksa gerekli dinamik portların firewall üzerinden erişilebilir olması gerekir. Güncel Windows sistemlerinde varsayılan RPC dinamik port aralığı:
49152-65535/TCP
olarak karşımıza çıkar. Ancak güvenlik amacıyla bütün bu aralığı kontrolsüz şekilde her sistem arasında açmak yerine firewall kurallarını mümkün olduğunca kaynak, hedef ve servis bazında sınırlandırmak gerekir. Bazı Windows servislerinde RPC iletişimini belirli bir statik port veya sınırlı port aralığına yönlendirmek mümkündür. Özellikle network segmentleri arasında sıkı firewall kuralları kullanılan yapılarda bu yöntem tercih edilebilir.

RPC Dinamik Portları Sınırlandırılabilir mi?

Evet. Belirli RPC tabanlı servislerde dinamik port kullanımını sınırlandırmak veya belirli bir port kullanmak mümkündür. Örneğin Active Directory replication RPC trafiği belirli bir TCP portuna sabitlenebilir. Ancak bu tür değişiklikleri yalnızca firewall gereksinimi varsa ve ilgili servisin Microsoft tarafından desteklenen yapılandırma yöntemi kullanılarak yapmak gerekir. Port aralığını gereğinden fazla daraltmak RPC port exhaustion gibi farklı sorunlara neden olabilir. Bu nedenle rastgele birkaç port belirleyip tüm RPC trafiğini bu aralığa sıkıştırmak doğru bir yaklaşım değildir.

RPC Servisleri Hangileridir?

Windows üzerinde RPC altyapısıyla ilişkili temel servislerden biri Remote Procedure Call (RPC) servisidir. Ayrıca RPC Endpoint Mapper işlevi de RPC servislerinin endpoint kayıtlarının bulunması açısından kritik öneme sahiptir. Windows’un çok sayıda temel bileşeni RPC altyapısına bağımlı olduğu için Remote Procedure Call servisinin normal bir sistemde devre dışı bırakılması doğru değildir.

RPC ile RDP Aynı Şey mi?

Hayır. İsimleri benzer olduğu için zaman zaman karıştırılsa da RPC ve RDP tamamen farklı teknolojilerdir.
Teknoloji Açılımı Temel Amaç
RPC Remote Procedure Call Uzak servis ve uygulamalar arasında işlem çağrısı
RDP Remote Desktop Protocol Uzak masaüstü oturumu
RDP çoğunlukla TCP/UDP 3389 ile ilişkilendirilirken RPC çok farklı servisler tarafından TCP 135 ve dinamik portlar üzerinden kullanılabilir.

RPC Sorunlarında Ben Nasıl İlerliyorum?

Bir RPC hatası gördüğümde benim genel troubleshooting sıram şu şekilde:
  1. Hedef sistemin DNS kaydı doğru mu?
  2. Client hedef sunucuya network üzerinden ulaşabiliyor mu?
  3. TCP 135 erişilebilir mi?
  4. Endpoint Mapper bağlantısı kuruluyor mu?
  5. Atanan dinamik RPC portu firewall’dan geçebiliyor mu?
  6. İlgili Windows servisi hedef sistem üzerinde çalışıyor mu?
  7. Aradaki firewall veya güvenlik cihazı trafiği engelliyor mu?
  8. Problem yalnızca tek bir serviste mi, yoksa tüm RPC tabanlı işlemlerde mi oluşuyor?
Özellikle son soru oldukça faydalıdır. Örneğin aynı sunucu üzerinde hem Computer Management hem de başka bir RPC tabanlı yönetim aracı çalışmıyorsa problemin uygulamadan ziyade RPC veya network katmanında olma ihtimali artar.

Özet

RPC, Windows altyapısındaki çok sayıda uygulama ve servisin uzak sistemlerle iletişim kurmasını sağlayan temel mekanizmalardan biridir. Client ilk olarak TCP 135 üzerindeki RPC Endpoint Mapper ile iletişim kurar, daha sonra ilgili servis için belirlenen dinamik RPC portuna bağlanır. Modern Windows sistemlerinde dinamik RPC portları genel olarak TCP 49152-65535 aralığındadır. Bu nedenle firewall yapılandırmalarında yalnızca TCP 135’i açmak çoğu RPC senaryosunda yeterli değildir. 1722 – The RPC server is unavailable hatası gördüğümde ilk olarak DNS, TCP 135, dinamik portlar ve firewall tarafını kontrol ederim. Çünkü sorun çoğu zaman RPC servisinin kendisinden ziyade client’ın RPC endpoint’e ulaşamamasından kaynaklanır.
Published On: 16 Ocak 2011 / Categories: Windows Server / 8,6 min read /

Bilgiyi Paylaşın!