RustDesk

RustDesk slúži ako softvér pre prístup na vzdialenú plochu. Program je napísaný v jazyku Rust z čoho vychádza aj jeho názov. Klient RustDesk beží na operačných systémoch ako Microsoft Windows , Apple MacOS , Apple iOS , Android a bežných distribúciách Linuxu . RustDesk má ambíciu byť open-source alternatívou k softvéru pre vzdialenú pracovnú plochu, ako napr. TeamViewer, alebo AnyDesk.

Obsah

Základné informácie

Ako už bolo spomenuté, tak RustDesk je Open Source alternatívou pre TeamViewer, alebo AnyDesk. Väčšinou sa snažím nepoužívať vzdialenú plochu, ale nedávno som prijal ponuku od malej spoločnosti spravovať im IT infraštruktúru a Remote Desktop je v niektorých prípadoch nevyhnutná.

Pozorný čitateľ si určite všimol aj položku cenník. Netreba sa báť, RustDesk je zdarma. Ak však chce zákazník použiť servery od RustDesku s webovým klientom, tak si môže službu zaplatiť. V súčastnosti nie je možné použiť webového klienta v neplatenej verzii (ako to bude do budúcna, zatiaľ nie je jasné).

Principiálne fungovanie

Aby sme v tom nemali chaos, pretože v návode budu vystupovať klienti aj servery, tak si označíme klientov (servery budu jasné).

  • Zariadenie z ktorého budeme pristupovať na vzdialenú plochu, bude PC A
  • Zariadenie na ktorého plochu pristupujeme bude PC B

Princíp fungovania programu je prenos vzdialenej plochy z PC B do PC A. Je dôležité povedať, že sa neprenáša video stream, ale len zmeny na obrazovke, spolu s informáciami o vstupe z klávesnice a myši. Algoritmy programu sú navrhnuté tak aby sa prenášali len nevyhnutné zmeny (nie cela statická obrazovka), ktoré sú komprimované, zašifrované a prenesené na druhú stranu (PC A), kde sa znova dekomprimujú, dešifrujú a následne sú reenderované na obrazovku PC A. Je úplne jasné, že latencia musí byť čo najnižšia, preto musí byť kompresia, šifrovanie a prenos veľmi rýchly a efektívny.

Rustdesk bez servera

Najjednoduchšie použitie aplikácie RustDesk je obyčajne použitie bez serverov. Dôležité je napísať, že táto možnosť funguje len v rámci LAN siete (príp. routovanej siete, alebo VPN siete).

Na zariadenie (PC, NTB, Tablet, Mobil …) sa nainštaluje RustDesk klient (inštaláciu nebudem popisovať, pretože na každom OS je triviálna). Po spustení aplikácie vidíme ID a vygenerované heslo. Toto ID a heslo oznámime klientovi (PC A), ktorý sa chce pripojiť na našu plochu. Klient si ID zapíše do kolónky pre prístup na ovládanie vzdialenej plochy a klikne na button pripojiť. V závislosti od nastavenia programu bude požiadaný aby zadal aj heslo. Klient (PC B) na druhej strane dostane informáciu že sa chce na jeho plochu niekto pripojiť a potvrdí ju kladne (alebo záporne ak sa nakoniec rozhodol, že si neželá aby sa k nemu niekto pripojil).

Samozrejme nám nič nebráni používať server aj v ramci LAN/VPN, ale prečo si to komplikovať, keď je to tak jednoduché aj bez servera.

Rustdesk server (selfhosting)

Ak sa chceme pripojiť mimo svoju LAN, alebo VPN, musíme použiť Rustdesk servery. V časti Principiálne fungovanie som popisoval ako funguje Rustdesk (resp. akýkoľvek Remote Desktop). V tejto časti popíšem ako funguje Rustdek, keď si ho hostujeme sami. Veľmi dôležité je aby sme disponovali verejnou IP adresou. Či už máme vlastnú verejnú IP adresu, alebo máme prenajatý nejaký VPS, je úplne jedno (proste musíme mať kontrolu nad verejnou IPv4 adresou). Ja mám výhodu, že môj ISP mi poskytuje verejnú (síce dynamickú) IP adresu zadarmo.

Požiadavky na server

Hardvérové požiadavky sú veľmi nízke; postačuje minimálna konfigurácia základného cloudového servera a požiadavky na CPU a pamäť sú minimálne. Môžete tiež použiť Raspberry Pi alebo niečo podobné. Pokiaľ ide o sieťové nároky, ak priame pripojenie cez TCP (hole punching) zlyhá, traffic potečie relay serverom. Prenosové rýchlosti sa pohybuju medzi 30 K/s a 3 M/s (obrazovka s rozlíšením 1920×1080) v závislosti od nastavenia rozlíšenia obrazovky. Ak ide len o kancelársku prácu, prenosová prevádzka sa pohybuje okolo 100 K/s.

V predošlom odseku som použil niektoré zvláštne slová ako napr. hole punching, alebo relay server, takže si ich môžeme vysvetliť. Pomôžem si obrázkom z github.

Ak budeme inštalovať Rustdesk, tak potrebujeme 2 servery a to hbbs a hbbr. Hbbs je signálový server, ktorý používa protokol rendezvous na sprostredkovanie spojenia klientov. Aj keď sú klienti za NAT a ani jeden klient nevlastní verejnu IP adresu, napriek tomu sa klienti dokážu spojiť pomocou P2P, pri čom sa využíva metóda Hole Punching. Samozrejme neplatí to vždy. Ak je klient za CGN, dvojitým NAT, tak sa musí použiť server hbbr (realy server).

Inštalácia RustDesk servera

Podľa dokumentácie môžeme Rustdesk inštalovať viacero spôsobmi a na rôzné OS. Napr. na Linux môžeme inštalovať ako systemd službu cez sh skript, deb balík, alebo ako docker. Ďalej je v dokumentácii návod na MS Win (neodporúča sa), alebo na Synology. V tomto návode budem inštalovať Rustdesk ako docker pomocou portainera. Inštalácia je veľmi jednoduchá a blesková. prihlásime sa do portainera a vytvoríme stack pod názvom rustdesk. Do editora zadáme tento yaml kód a klikneme na Deploy The Stack

version: '3.3'
  
networks:
  rustdesk-net:
    external: false
  
services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r your-domain.com:21117
    volumes:
      - ./data:/root
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro   
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped
  
  hbbr:
    container_name: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    networks:
      - rustdesk-net
    restart: unless-stopped

V podstate nemusíme v configu nič meniť. Ak by niekto mal niektorý z portov 21115-21119 obsadený, tak si ho môže zmeniť na akýkoľvek iný voľný, ale potom to musí zohľadniť aj pri nastavení klientov.

V riadku 16 je nastavená platná verejná doména, ktorú budu kontaktovať klienti na zabezpečenie P2P spojenia. Config som ešte doplnil o riadky 19-20 a 36-37, pretože server mal voči dockeru posunutý čas o 2 hodiny a tým pádom aj lógovanie by nesedelo časovo.

Stiahnutý docker IMG má len 12 MB (udajne beží na debian:bullseye-slim, čo je extrémne osekaná ver. debianu), čiže download a inštalácia je neuveriteľne rýchla. Nejak takto by to malo vyzerať v portaineri.

Rustdesk podporuje aj websocket, čiže nepotrebujeme inštalovať do zariadenia Rustdesk klienta. Na ovládanie vzdialenej plochy sa používa webový prehliadač. Je tu však jeden problém a to, že web socket nefunguje zdarma. Je určený len pre zákazníkov, ktorý si zaplatia Pro ver. Rustdesk. Tiež je treba povedať, že webSocket podporuje iba reléové pripojenie.

Mapovanie portov

V mojom prípade beží Rustdesk server na IP adrese (192.168.1.109) v LAN sieti, preto musíme otvoriť niektoré porty do internetu. Podľa dokumentácie sa vyžaduje otvoriť niekoľko portov

Základné porty:

  • TCP 21114-21119
  • UDP21116

Vyššie uvedené 21115-21117 sú minimálne požadované porty pre fungovanie RustDesku, ktoré spracovávajú signálové a reléové porty, ako aj NAT traversal. TCP porty 2111821119 sú porty WebSocket pre webového klienta RustDesk. Pokiaľ vieme, že WebSocket nebudeme používať, tak porty 21118 a 21119 nemusíme otvárať.

V súčasnej dobe používam ako hlavný router/firewall pfSense, preto ukážem ako je potrebné spraviť port forwarding na tomto systéme. Ešte pred nastavením firewallového pravidla som si pre konkrétne porty vytvoril alias a následne som ho použil v nastavení pravidla (na obrázku viď v sekcii Destination Port Range a Redirect target Port).

Toto pravidlo je pre porty 21114-21119 pre protokol TCP. Ďalej sa vyžaduje vytvoriť pravidlo na port 21116 pre protokol UDP, ktorý bude využitý pre P2P spojenie.

Týmito nastaveniami sme ukončili nastavenie serverovej časti a teraz potrebujeme nastaviť Rusdesk u klientov.

Nastavenie klienta Rustdesk

Nastavenie u klientov nie je vôbec zložité. Myslím si, že aj pre bežných užívateľov je intuitívne a zvládnu to aj väčší amatéri ako som ja 😀 Po otvorení Rustdesk klienta by sme mohli vidieť okno podobné tomu

Samozrejme, že tie chlieviky s ikonkami Android, Linux, či Windows, po prvom spustení nebudeme vidieť (to sú zariadenia, na ktoré som sa už v minulosti pripájal). Dôležité je kliknúť na 3 zvislé bodky vedľa ID. Následne sa dostaneme do nastavení, kde prejdeme na položku sieť. Tam potrebujeme nastaviť, ID Server, Prepojovací Server a Key.

ID Server a Prepojovací Server nastavíme tak ako sme to nastavili pre docker, viď v config yaml riadok 16. Ak sme v configu pre docker nemenili porty, tak porty v nastavení neuvádzame (inak port uvedieme napr. your-domain.com:12345). Pre správnu funkčnosť sa vyžaduje nastaviť aj Key. Public key sa vygeneruje pri prvom spustení servera. Nájsť ho môžeme v logu, alebo v dátovom adresári. Ja osobne som docker inštaloval cez portainer a súbor je uložený na hostiteľskom systéme v

cat /data/compose/10/data/id_ed25519.pub

Poznámka: číslo 10 si generuje portainer sam, takže to platí pre môj konkrétny prípad. U každého môže byť toto číslo odlišné.

Nastavenia uložíme a máme hotovo. Ihneď sa môžeme pomocou ID čísiel pripájať na vzdialené plochy. Ak je na oboch stranách kvalitný internet (myslím nízka latencia), tak práca na vzdialenej ploche môže byť porovnateľná ako keby sme pracovali na lokálnej ploche.

Záver

Takto sme získali zdarma veľmi šikovný program na zdieľanie pracovnej plochy. Veľkou výhodou Rustdesku je jeho otvorený zdrojový kód a selfhosting. Samotný Rustdesk klient má množstvo nastavení, ako napr. nastavenie bezpečnostných povolení, zmena ID, alebo hesla, 2FA, použitie whitelistingu atď. V blogu som to nespomínal, pretože to by bola kapitola na ďalší článok. Podľa githubu sa projekt Rustdesk javí ako živý. Posledná ver. 1.4.0 vyšla pred 2 mesiacmi. Autorovi projektu držím palce a mnoho ľudí by potešilo aj to, keby sa do komunitnej verzie dostal web klient.

Použitá literatúra

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *