8 puan yazan GN⁺ 4 일 전 | 2 yorum | WhatsApp'ta paylaş
  • Yalnızca tarayıcıyla Windows uzak masaüstüne bağlanabilen web tabanlı bir RDP istemcisidir ve eklenti olmadan çalışır
  • Tarayıcıdaki Go WebAssembly ile sunucu tarafındaki WebSocket-to-TCP proxy yapısını ayırarak, tarayıcının doğrudan açamadığı RDP TCP bağlantısını onun yerine işler
  • Bağlantı Browser -> WebSocket -> proxy -> TCP -> RDP Server akışıyla ilerler; bağlandıktan sonra uzak ekran canvas üzerinde gösterilir ve klavye/fare girdileri aktarılır
  • Girdi aygıtları, RDP scan codes tabanlı klavye ile hareket, tıklama ve tekerlek desteği olan fareyi destekler; uzak ses ise RDPSND ile alınıp Web Audio API üzerinden oynatılır
  • Proxy yapısı tüm origin'lere izin verdiğinden, yalnızca güvenilir bir ağda çalıştırılmalı ya da dışa açmadan önce HTTPS/WSS ve kimlik doğrulama katmanı birlikte eklenmelidir

Proje genel bakışı

  • Tarayıcıda eklenti olmadan Windows uzak masaüstüne bağlanan web tabanlı bir RDP istemcisi olarak çalışır
  • Uygulama, Go WebAssembly ile grdp birleşimiyle hazırlanmıştır; tarayıcıda çalışan kısım ile proxy ara katmanı birbirinden ayrılmıştır
  • Tarayıcı doğrudan raw TCP soketi açamadığı için, WebSocket bağlantısını RDP sunucusunun TCP portuna bağlayan hafif bir Go proxy'si de gereklidir

Mimari ve çalışma şekli

  • Genel akış Browser (WASM) -> WebSocket -> proxy (Go) -> TCP -> RDP Server sırasını izler
  • Tarayıcıda WASM binary çalışır; proxy ise hem WebSocket-to-TCP köprüsü hem de statik dosya sunucusu görevini üstlenir
  • make all çıktıları, tarayıcıda çalışan static/main.wasm, Go çalışma zamanı destek dosyası static/wasm_exec.js ve proxy sunucusu proxy/proxy olarak ayrılır
  • Bu yapı sayesinde tarayıcı tarafı bağlantıyı standart web teknolojileriyle yönetirken, RDP sunucusuyla gerçek TCP iletişimini proxy üstlenir

Kullanım akışı ve kullanıcı arayüzü

  • Tarayıcıda http://localhost:8080 açılır, bağlantı formuna Host, Port, Domain, User, Password, Width, Height değerleri girilir ve Connect'e basıldığında oturum başlar
  • Port için varsayılan değer 3389'dur; Domain, yerel hesap kullanıldığında boş bırakılabilir
  • Bağlantı tamamlandığında uzak masaüstü canvas üzerinde gösterilir ve klavye girdisi almak için canvas'a tıklanması gerekir
  • Disconnect'e basıldığında oturum sona erer

Girdi aygıtları ve ses desteği

  • Tüm standart klavye girdileri RDP scan codes üzerinden uzak masaüstüne iletilir
  • Fare; hareket, düğme tıklamaları ve kaydırma tekerleğini destekler
  • Klavye olaylarının iletilmesi için tarayıcı sekmesinin odakta olması gerekir; tuş girdisi durursa canvas alanına yeniden tıklanmalıdır
  • Uzak ses, RDPSND üzerinden akış halinde gelir ve tarayıcıda Web Audio API ile oynatılır
    • Ses biçimi PCM 44100 Hz, stereo, 16-bit signed little-endian olarak belirtilmiştir

Çalışma koşulları ve güvenlik uyarıları

  • Gereksinimler Go 1.24 veya üzeri ile erişilebilir bir RDP sunucusudur; hedef sunucu Windows ya da RDP uyumlu bir ana makine olabilir
  • Proxy tüm origin'lerden gelen bağlantılara izin verdiği için yalnızca güvenilir bir ağda çalıştırılmalı veya internete açılmadan önce bir kimlik doğrulama katmanı eklenmelidir
  • Kimlik bilgileri tarayıcıdan proxy'ye WebSocket üzerinden iletildiğinden, güvenilmeyen ağlarda HTTPS/WSS kullanılması gerekir
    • README ayrıca TLS sonlandırmalı bir reverse proxy olarak nginx veya Caddy kullanımından da bahseder

Çalıştırma biçimi ve ek bilgiler

  • Çalıştırma make serve veya ./proxy/proxy -listen :8080 -static static biçiminde yapılabilir
  • Proxy seçeneklerinde -listen dinleme adresi ve portunu, -static ise statik dosya dizinini belirtir
  • Geliştirme hedefleri; yalnızca WASM'ı yeniden derleyen make wasm, yalnızca proxy'yi yeniden derleyen make proxy, wasm_exec.js dosyasını güncelleyen make wasm_exec ve çıktıları temizleyen make clean olarak ayrılır
  • Lisans GPLv3'tür ve birlikte grdp LICENSE referansı da yer alır

2 yorum

 
yeobi222 2 일 전

Ama gerçekten ne avantajı var, anlamıyorum.
Sonuçta sadece bir istemci; bu yüzden sunucu tarafında herhangi bir gereksinimi zorunlu kılamazsınız.
Üstelik yalnızca saf bir tarayıcıyla da erişilemiyor.

 
GN⁺ 4 일 전
Hacker News yorumları
  • Oldukça hoş görünüyor. Oturum kaydı ve SSO kimlik doğrulama desteği de eklenirse doğrudan bir RDP jump host olarak kullanılabilir gibi duruyor
    Bunu Azure Bastion ile benzer şekilde denemiştim; tenant için yapılandırılmış kimlik doğrulama yöntemiyle Azure portalında oturum açtıktan sonra tarayıcıdan VM'e RDP ile bağlanabiliyor, ardından VM tarafındaki yerel hesapla giriş yapabiliyorsunuz. Dosya ve pano işlemleri de oldukça iyi çalışıyor ve tarayıcı içinde konsol oturumu desteği de var
    Windows/RDP tarafını kullanmadığım için orada da çalışıp çalışmadığını bilmiyorum ama GCP'nin tarayıcı üzerinden SSH'i şimdiye kadar gördüklerim arasında en iyi yapılmış olanlardan biriydi
    Linux'ta da bazen xrdp'nin diğer alternatiflerden daha iyi olduğunu düşündüm
    Bunun çözdüğü en büyük değerlerden biri, VM/sunucunun yönetim arayüzünü ayırmak. Web sunucusunun yönetim hizmetinin HTTP hizmetiyle aynı IP/domain/arayüz üzerinde olmaması bile güvenliği ciddi biçimde artırıyor

    • Bu amaçla Apache Guacamole'ı bizim OIDC proxy'mizle birlikte kullanıyoruz
  • Tarayıcı tabanlı RDP'de pano sinsi bir kâbus. Wire protocol pazarlığı kendi başına iyi çalışıyor ama tarayıcı tarafındaki Clipboard API, izinler ve kullanıcı etkileşimi gerekliliklerine bağlı
    Okuma tarafında çoğu tarayıcı neredeyse her seferinde kullanıcı onayı istiyor. Bu yüzden ya sayfa içinde ayrı bir pano tamponu oluşturmanız gerekiyor ya da RDP'nin içine yapıştırma sorunsuz oluyor ama RDP'nin dışına kopyalama yaparken her seferinde tıklamayı göze almanız gerekiyor
    Hiçbiri insanların web RDP istemcisinden beklediği davranışa tam olarak uymuyor. Bunu native mstsc ile aynı seviyede saymadan önce Chrome ve Firefox'ta nasıl farklı davrandığını mutlaka kontrol etmek gerekir

    • Bu tam olarak öyle olmayabilir. Google Docs, Office 365, Notion tekrar tekrar izin istemeden çalışıyor
  • HP Anyware / Teradici / PCoIP'yi bırakınca alternatif arayan epey kişi oldu. Özellikle yüksek çözünürlüklü çoklu monitör, 60fps, yüksek bit derinliğinde oynatma, Wacom tablet desteği ve üç işletim sisteminin tamamını destekleyen çözümlere ihtiyaç var
    Ücretli tarafta Parsec ve DCV var; açık kaynak denemelerini görmek sevindirici. rustdesk, kyber, teraguchi gibi projeler var ve topluluğun yüksek performanslı açık kaynak seçeneklere gerçekten ihtiyacı var gibi görünüyor
    https://github.com/rustdesk/rustdesk
    https://github.com/thedepartmentofexternalservices/teraguchi
    https://kyber.tech/

    • Bu arada DCV, EC2 üzerinde ücretsiz ve diğer ortamlarda da lisans olmadığında verdiği uyarı oldukça hafif
  • İlgi çekici görünüyor ama en kritik özelliğin anılmamış olması şaşırtıcı. Pano paylaşımının pratikte ne kadar iyi çalıştığını merak ediyorum

    • Windows'u özellikle sevmesem de 3 katmanlı iç içe RDP oturumları arasında dolaşırken dosya kopyala/yapıştırın çalışması hâlâ sihir gibi geliyor
    • Biz de özel bir RDP istemcisi geliştiriyoruz, bu yüzden bu tür uygulamalarda biraz deneyimimiz var. Benzer şekilde uyguladık
      Pano paylaşımı ve paylaşılan sürücüler üzerinden yükleme/indirme, FreeRDP özelliği olduğu için nispeten doğrudan kullanılabiliyor
      Ve oturum kaydı, PAM ortamlarında vazgeçilmez
      [1] https://adaptive.live
  • Masaüstü ölçeklendirme, çoklu monitör desteği, dosya aktarımı, sürücü yönlendirme ve çevre birimi yönlendirme de önemli

  • Bunun, CyberArk PAM'den alınan RDP dosyalarını açarken de çalışıp çalışmadığını merak ediyorum

  • Tarayıcı sekmesi içinde Alt-Tab'ı RDP istemcisinin yakalayıp yakalayamayacağını da merak ediyorum
    Geçmişte Guacamole'un tarayıcı tabanlı RDP'sindeki en büyük sorun buydu

  • Teknik olarak ilgi çekici ama neredeyse her platformda zaten bir native RDP istemcisi var; o yüzden neden buna ihtiyaç duyulsun pek emin değilim

    • Tarayıcıda çalışıyorsa yerel makineye hiçbir şey kurmak gerekmiyor. Eskiden şirkette mecburen kübikte oturduğum zamanlarda evdeki bilgisayarıma bağlanmak için sık sık Apache Guacamole kullanırdım
      https://guacamole.apache.org/
    • 1 katkıcı, 1 commit, yeni bir proje; biraz vibe-coding hissi veriyor
    • Tarayıcı sandbox içinde, native istemciler ise genelde değil; bu yüzden belirgin avantajları var. Taşınabilirlik ve gömülebilirlik de cabası, ayrıca trafiği incelemek veya MITM yapmak daha basit
    • native RDP/RDG için iyi MFA seçenekleri çok fazla değil. Tarayıcıya taşıyınca her şeyi OAuth ya da passkey gibi çözümlerle sarabiliyorsunuz
    • BMC çipine bağlı uzak masaüstü için bir web istemcisi olarak da işe yarayabilir gibi görünüyor