Vous êtes l’informaticien de la famille et c’est toujours vous qu’on appelle dès que Tonton Maurice télécharge un malware pornhub.zip, que le cousin Thierry n’arrive plus à imprimer en couleurs ou que Belle-Maman Huguette paume son mot de passe de la Banque Postale.
Seulement voilà… pour prendre la main à distance sur un ordinateur, à part ce bon vieux TeamViewer, le reste c’est un peu la lose.
Heureusement, il existe une alternative libre et open source à Team Viewer, nommé RustDesk
Rustdesk est un logiciel libre de contrôle à distance édité sous la licence GPL-3.0. Le client s’utilise aussi simplement que Teamviewer ou Anydesk, point important si on envisage de migrer les utilisateurs sur cet outil de télé-assistance.
Rustdesk propose également d’autohéberger son propre serveur ce qui permet de renforcer la vie privée et d’avoir la main complète sur l’application. Le projet est certes jeune (début 2021) mais il est très prometteur puisqu’on retrouve déjà les principales fonctionnalités proposées par ses concurrents propriétaires.
D’un point de vue sécurité, Rustdesk est livré avec un chiffrement de bout en bout. Enfin le client est multiplate-forme puisqu’il est installable sur les principaux OS Desktop (GNU/Linux, WIndows, Macosx) ainsi que sur Android et iOS.
Qui n’a pas rêvé d’avoir une alternative libre à Teamviewer ou AnyDesk et sur laquelle on a complètement la main ? Et bien c’est ce que propose le logiciel Rustdesk.
Nous allons voir ici comment installer le serveur et le client.
RustDesk utilise deux applications (relais-hbbr et de signal-hbbs), génére des configurations et les hébergent sur une page Web protégée par mot de passe pour un déploiement simple vers les clients.
Le serveur fournit donc deux applications à lancer :
Le serveur relais hbbr est utilisé en cas d’échec de connexion directe au client à prendre à distance. Selon l’éditeur, le trafic d’une connexion relais est compris entre 30k et 3M/s ( pour une résolution d’écran de 1920x1080). Ces deux services peuvent tourner sur le même serveur ou sur deux serveurs différents. Dans le cadre de ce tutoriel, nous retiendrons la première solution.
Selon l’éditeur : le port 21115/TCP est utilisé pour le test de type NAT, 21116/UDP est utilisé pour l’enregistrement d’ID et le service heartbeat. 21116/TCP est utilisé pour le TCP hole punching et le service de connexion, 21117 est utilisé pour les services de relais.
Les ports 21118 et 21119 sont utilisés pour prendre en charge les clients Web. Si vous n’avez pas besoin de la prise en charge du client Web (21118, 21119), les ports correspondants peuvent être désactivés.
Et oui, on peut même prendre la main depuis un client web disponible en version beta ici : https://web.rustdesk.com
Si vous souhaitez rendre accessible le serveur depuis l’exterieur (c’est un peu le but hein
), voici les ports à ouvrir :
TCP : 21115, 21116, 21117, 21118, 21119
UDP : 21116
Vous pouvez également créer un enregistrement DNS pointant vers votre serveur mais l’utilisation de l’IP fonctionne également.
Le script est hébergé sur https://github.com/dinger1986/rustdeskinstall
Actuellement, le script téléchargera et configurera les serveurs de relais et de signal (hbbr et hbbs), générera des configurations et les hébergera sur une page Web protégée par mot de passe pour un déploiement simple vers les clients.
Vous devez avoir Linux installé sur votre serveur, le script est testé avec Centos, Ubuntu et Debian. Un serveur avec 1 processeur, 1 Go de RAM et 10 Go de disque est suffisant pour exécuter RustDesk.
Veuillez configurer votre pare-feu sur votre serveur avant d’exécuter le script.
Assurez-vous que vous avez accès via ssh ou autrement configuré avant de configurer le pare-feu, les exemples de commandes pour UFW (basé sur Debian) sont:
ufw allow proto tcp from YOURIP to any port 22
Si UFW est installé, utilisez les commandes suivantes pour ouvrir les ports nécéssaires :
ufw allow 21115:21119/tcp
ufw allow 8000/tcp
ufw allow 21116/udp
sudo ufw enable
Récupérer et lancer le script d’installation :
wget https://raw.githubusercontent.com/dinger1986/rustdeskinstall/master/install.sh
chmod +x install.sh
./install.sh
On créé notre architecture de répertoires de lancement des conteneurs docker:
mkdir /srv/rustdesk
cd /srv/rustdesk
Et on lance nos 2 conteneurs
docker run --name hbbs -d -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -it --net=host --rm rustdesk/rustdesk-server hbbs
docker run --name hbbr -d -p 21117:21117 -p 21119:21119 -v `pwd`:/root -it --net=host --rm rustdesk/rustdesk-server hbbr
Et voilà ! Le serveur est prêt à recevoir des connexions.
Dans le répertoire de lancement des conteneurs docker, vous trouverez plusieurs fichiers dont la clé publique id_ed25519.pub. Copiez le contenu de cette clé et conservez-le car nous en aurons besoin plus tard pour la configuration du client.
sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r <relay-server-ip[:port]>
sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr
--net=host
ne fonctionne que sous Linux, ce qui permet àhbbs/hbbr
de voir la véritable adresse IP entrante plutôt que l’adresse IP du conteneur (172.17.0.1). Si--net=host
fonctionne correctement, les options-p
ne sont pas utilisées.
Veuillez supprimer
--net=host
si vous voyez un problème de connexion sur votre plate-forme
Et voilà ! Le serveur est prêt à recevoir des connexions.
Pour exécuter les fichiers docker avec un docker-compose.yml comme décrit ici, vous devez avoir le paquet docker-compose installé.
version: '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 example.com:21117
volumes:
- ./hbbs:/root
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:
- ./hbbr:/root
networks:
- rustdesk-net
restart: unless-stopped
Télécharger les sources sur ce lien: https://github.com/rustdesk/rustdesk-server/
Exécutez hbbs/hbbr sur votre serveur (Centos ou Ubuntu). Je vous suggère d’utiliser pm2 pour la gestion de votre service.
./hbbs -r <relay-server-ip[:port]>
./hbbr
Ou lancez hbbs/hbbr avec pm2
pm2 start hbbs -- -r <relay-server-ip[:port]>
pm2 start hbbr
pm2 nécessite nodejs v16+, si vous ne parvenez pas à exécuter pm2 (par exemple, vous ne pouvez pas voir
hbbs/hbbr
dans laliste pm2
), veuillez télécharger et installer la version LTS de nodejs depuishttps://nodejs.org
. Si vous souhaitez quehbbs/hbbr
s’exécute automatiquement après le redémarrage, veuillez consulterpm2 save
etpm2 startup
. En savoir plus sur pm2. Un autre bon outil pour vos logs est pm2-logrotate
Le paramètre
-r
dehbbs
n’est pas obligatoire, il est juste pratique pour vous de ne pas spécifier de serveur relais côté client contrôlé. Vous n’avez pas besoin de spécifier le port si vous utilisez le port 21117 par défaut. Le serveur relais spécifié par le client a une priorité plus élevée que celle-ci.
--net=host
ne fonctionne que sous Linux, ce qui permet àhbbs/hbbr
de voir la véritable adresse IP entrante plutôt que l’adresse IP du conteneur (172.17.0.1). Si--net=host
fonctionne correctement, les options-p
ne sont pas utilisées.
Veuillez supprimer
--net=host
si vous voyez un problème de connexion sur votre plate-forme
Rendez-vous sur https://rustdesk.com/ et téléchargez le client correspondant pour vos deux postes.
IMPORTANT : pour les postes GNU/Linux, le client n’est malheureusement pas encore compatible avec Wayland. Il vous faudra donc ouvrir une session X11.
On déclare notre serveur et la clé publique précédemment copiée.
Cliquez sur le bouton Menu sur le côté droit de ID comme indiqué ci-dessous, et choisissez « ID/Serveur Relais »
Entrez l’hôte hbbs ou l’adresse IP dans la zone de saisie du serveur d’identification (côté local + côté distant). Les deux autres adresses peuvent être laissées vides, RustDesk en déduira automatiquement (si elles ne sont pas spécialement définies) et le serveur relais se réfère à hbbr (port 21116).
hbbs.example.com
ou
hbbs.example.com:21116
Pour le client Windows, on peut embarquer la configuration dans le .exe ce qui peut être utile lors d’une installation d’un poste en évitant de perdre du temps pour expliquer au client comment configurer le logiciel.
Pour cela, il suffit de renommer l’exécutable rustdesk.exe en rustdesk-host=IP_SERVEUR,key=CLE_PUBLIQUE.exe.
Exemple:
rustdesk-host=192.168.1.137,key=xfdsfsd32=32.exe
Pour contrôler si les paramètres ont bien été pris en compte, il vous suffit de cliquer sur « A propos du logiciel » et vous verrez alors un écran avec les options passées :
Vous devez définir à la fois l’hôte et la clé, Si vous ne définissez pas l’un ou l’autre, cela ne fonctionnera pas.
S’il y a des caractères invalides dans la clé qui ne peuvent pas être utilisés dans un nom de fichier Windows, supprimer le fichier id_ed25519 de votre serveur et redémarrer hbbs/hbbr. Cela entraînera la régénération du fichier id_ed25519.pub. Vous devrez peut-être répéter ce processus jusqu’à ce que vous obteniez des caractères valides.
Contrairement à l’ancienne version, la clé de cette version est obligatoire, mais vous n’avez pas besoin de la définir vous-même. Lorsque hbbs s’exécute pour la première fois, il génère automatiquement une paire de clés privée et publique cryptées (respectivement situées dans les fichiers id_ed25519 et id_ed25519.pub du répertoire d’exécution), dont le but principal est le cryptage des communications.
Si vous n’avez pas rempli la clé : (le contenu du fichier de clé publique id_ed25519.pub) à l’étape précédente, cela n’affecte pas la connexion, mais la connexion ne pourra pas être chiffrée.
cat ./id_ed25519.pub
Si vous souhaitez interdire aux utilisateurs ne disposant pas de la clé d’établir des connexions non chiffrées, veuillez ajouter le paramètre -k _
lors de l’exécution de hbbs
et hbbr
, par exemple :
./hbbs -r <relay-server-ip[:port]> -k _
./hbbr -k _
Si vous souhaitez modifier la clé, supprimez les fichiers id_ed25519 et id_ed25519.pub et redémarrez hbbs/hbbr, hbbs générera une nouvelle paire de clés.
Si vous utilisez docker-compose et que les clés n’existent pas, le démarrage des conteneurs créera différentes clés dans les dossiers hbbs et hbbr.
Vous pouvez créer des clés manuellement dans hbbs et les copier dans hbbr avant de démarrer les conteneurs.
Ou vous pouvez arrêter le conteneur hbbr et copier les clés de hbbs dans le dossier hbbr, puis redémarrer le conteneur.
C’est sensiblement la même chose. Les deux executables sont fournies et les clés sont générées dans le répertoire ou se trouvent les executables.
Vous pouvez de la même façon utiliser NSSM ou PM2 pour gérer les processus hbbs & hbbr
Je ne détaillerais pas cette méthode ici car ce n’est pas celle que je recommande mais la documention est ici: https://rustdesk.com/docs/en/self-host/windows/