This is an old revision of the document!
Table of Contents
Desktop remoto con RustDesk
RustDesk è un software di accesso remoto open source disponibile per GNU/Linux, Windows, macOS, Android, ecc. Oltre ad essere open source, viene rilasciato sia il software client che il software server. È quindi possibile gestire in proprio il server pubblico per il rendezvous e il relay. Tale server consente a due client eventualmente dietro a firewall di interagire fra di loro.
ATTENZIONE: La natura open source del software viene contestata da diversi utenti, si dice che i sorgenti pubblicati su GitHub non producono un software eseguibile una volta compilati, ma hanno bisogno di blob binari privi di sorgente. Inoltre viene messa in dubbio la trasparenza del processo di sviluppo.
Qui gli appunti per l'installazione di RustDesk su Debian GNU/Linux 12 Bookworm.
Download dei pacchetti
Per GNU/Linux viene offerto il pacchetto per Ubuntu, fortunatamente tale pacchetto si installa senza difficoltà anche su Debian 12 Bookworm. Si è installata la versione 1.1.14 scaricando i pacchetti Debian dal repository GitHub:
Installazione del server
Il server ha una duplice funzione: quella di rendezvous server e quella di relay server. La prima ha il compito di consentire a due client di scoprire l'indirizzo IP pubblico del corrispondente e la porta UDP a cui risponde. Quando i due interlocutori hanno queste informazioni possono tentare la connessione diretta tra di loro, adottando eventualmente tecniche di TCP hole punching. Se la connessione diretta non riesce, i client possono sfruttare il server come relay, in questo caso il traffico IP non viene veicolato direttamente tra i due client, ma transita dal server che lo reinoltra a destinazione.
Le due componenti sono installabili su Debian GNU/Linux separatamente grazie ai due pacchetti disponibili:
- rustdesk-server-hbbr_1.1.14_amd64.deb (ID/Rendezvous server)
- rustdesk-server-hbbs_1.1.14_amd64.deb (relay server)
Al termine dell'installazione ci saranno i due processi in esecuzione /usr/bin/hbbr e /usr/bin/hbbs che corrispondono ai servizi systemd rustdesk-hbbr.service e rustdesk-hbbs.service rispettivamente. Con systemctl è possibile avviarli, fermarli e conoscerne lo status. Ad esempio:
systemctl status rustdesk-hbbr.service
I file di log vengono creati in /var/log/rustdesk-server/.
Porte da aprire sul firewall
Queste le porte IP utilizzate dai due processi:
hbbs | ||
---|---|---|
21115 | TCP | NAT type test. |
21116 | TCP | TCP hole punching. |
21118 | TCP | Support for web clients. |
21116 | UDP | ID registration and heartbeat service. |
54176 | UDP | The server uses an UDP random port, which changes on each restart. |
hbbr | ||
21117 | TCP | Relay services. |
21119 | TCP | Support for web clients. |
Il server hbbs impegna una porta UDP diversa (casuale) ad ogni avvio, non è necessario aprire tale porta sul firewall. Se non si utilizza il supporto web anche le porte 21118 e 21119 possono restare chiuse.
Chiave crittografica
Un'altro parametro necessario per la connessione al server è la chiave crittografica; sarà necessario indicarla quando si configura il client. Tale chiave viene generata all'installazione e salvata nel file /var/lib/rustdesk-server/id_ed25519.pub. Si tratta di una stringa alfanumerica di 44 caratteri.
Installazione del client
Si installa manualmente il pacchetto rustdesk-1.4.2-x86_64.deb e quindi si installano tutte le dipendenze mancanti:
dpkg -i rustdesk-1.4.2-x86_64.deb apt --fix-broken install
Viene installato il servizio rustdesk.service che può essere controllato con i normali comandi systemctl.
systemctl status rustdesk.service
Il servizio consente di ricevere le richieste di connessione remota ed è gestito da un processo eseguito a nome di root:
/usr/bin/rustdesk --service
Il processo impegna due porte UDP, la 21119 e una scelta casualmente ad ogni avvio.
Quando un utente non privilegiato effettua il login vengono avviati due processi a suo nome:
/usr/share/rustdesk/rustdesk --server /usr/share/rustdesk/rustdesk --tray
Il processo server si occuperà di ricevere le connessioni remote offrendo il desktop in esecuzione a nome dell'utente, il processo tray invece visualizza l'icona nel system tray (area delle notifiche).
Se il processo systemd non è in esecuzione, l'utente non privilegiato può comunque avviare il client lanciando l'eseguibile rustdesk. In tal caso la schermata home offre la possibilità di avviare il processo a livello di sistema (è richiesta l'autenticazione dell'utente tramite sudo).
File di configurazione
Processo system-wide
Il processo client ha doppia personalità: da un lato esiste come processo system-wide avviato da systemd e quindi disponibile a prescindere dall'utente che effettua il login. Tale processo scrive la propria configurazione in /root/.config/rustdesk/. In particolare viene generato e salvato l'ID del client che sarà necessario per connettersi remotamente. È possibile conoscre l'ID anche da riga di comando:
rustdesk --get-id
Processo user-space
Quando l'utente non privilegiato esegue il programma rustdesk viene creata la configurazione personale in $HOME/.config/rustdesk/. Se è attivo il processo system-wide la configurazione viene inizializzata con i parametri system-wide (ad esempio il nome del server a cui collegarsi e la chiave crittografica).
Configurazione da GUI
I parametri che più facilmente si vorranno personalizzare nella configurazione del client sono:
ID/Relay server | Nome DNS o indirizzo IP del server rendezvous e relay. |
---|---|
Key | Chiave crittografica per la connessione al server. |
One time password | Password usa e getta per la connessione da remoto. |
Permanent password | Password permanente per la connessione da remoto. |
L'ID/Relay server utilizzato per impostazione predefinita è api.rustdesk.com, che fornisce un servizio gratuito, ma al di fuori del nostro controllo e senza precise indicazioni sui termini d'uso. Per questo è opportuno installare il proprio server privato come spiegato in precedenza.
Questi parametri sono impostabili dalla pagina home del programma anche se è eseguito dall'utente non privilegiato, ma è necessario che possa ottenere i privilegi di amministratore tramite il sistema sudo.
Il menu Settings è accessibile dall'icona three dots visibile a fianco dell'ID. Cliccando sul tab Network è necessario quindi cliccare su Unlock network settings e autenticarsi tramite sudo. Per scegliere un ID/Relay server custom è sufficiente indicare il nome (o indirizzo IP) e la relativa key.
Sempre nella pagina home è possibile configurare la password di accesso cliccando sull'icona Change password, quindi si sceglie Unlock security settings che richiede l'autenticazione sudo. In questo modo è possibile configurare la combinazione desiderata di one time e permanent password.
Le impostazioni effettuate con l'autenticazione sudo vengono salvate sia nella configurazione system-wide che in quella user-space, in particolare le impostazioni network vanno nel file RustDesk2.toml, la permanent password va in RustDesk.toml (in forma cifrata).
Configurazione da riga di comando
Le impostazioni network possono essere esportate sotto forma di stringa alfanumerica e importate da riga di comando.