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
- Principiálne fungovanie
- Rustdesk bez servera
- Rustdesk server (selfhosting)
- Mapovanie portov
- Nastavenie klienta Rustdesk
- Záver
- Použitá literatúra
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á.
- Oficiálny web produktu
- Stiahni si aplikáciu pre tvoj OS
- Dokumentácia pre vlastný hosting
- Diskusia na GitHub
- Komunita na ReddIT
- FAQ
- Cenník
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
- UDP
21116
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 21118
a 21119
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.