Tutoriel

RustDesk : bureau à distance self-hosted sur VPS

Self-hosting13 min de lecture7 étapes

TeamViewer et AnyDesk facturent des licences annuelles élevées tout en faisant transiter chaque session par leur propre infrastructure. RustDesk, open source sous licence AGPL-3.0, retourne ce modèle : vous déployez deux services légers sur votre VPS, le trafic ne quitte jamais votre infrastructure et le chiffrement bout-en-bout est garanti par construction — pas par contrat. Ce guide couvre l'architecture complète, le déploiement pas-à-pas, la configuration TLS, le contrôle d'accès et le maintien en condition opérationnelle.

Sommaire· Pourquoi self-héberger son serveur de bureau à distance1/12
  1. 01Pourquoi self-héberger son serveur de bureau à distance
  2. 02Ce que RustDesk self-hosted vous offre
  3. 03Architecture RustDesk : hbbs et hbbr
  4. 04Prérequis VPS
  5. 05Déployer RustDesk Server sur VPS
  6. 06Configurer TLS pour les connexions sécurisées
  7. 07Activer l'authentification et le contrôle d'accès
  8. 08Optimiser la qualité d'image et la performance
  9. 09RustDesk vs TeamViewer vs AnyDesk vs Guacamole
  10. 10Déploiement en entreprise : provisionner les clients en masse
  11. 11Surveiller et maintenir le serveur
  12. 12Résoudre les problèmes courants

Pourquoi self-héberger son serveur de bureau à distance

Les solutions commerciales comme TeamViewer ou AnyDesk ont un point commun : chaque connexion passe par leur infrastructure de relais, quelle que soit la distance réelle entre les deux machines. Cela pose trois problèmes concrets.

Confidentialité et conformité. Les données transitent par des serveurs tiers soumis à la législation de leur pays d'hébergement. Pour les prestataires IT qui accèdent à des systèmes financiers, médicaux ou juridiques, cette délégation implicite peut invalider un accord de conformité (RGPD, ISO 27001, HIPAA). RustDesk self-hosted élimine cette dépendance : le trafic chiffré reste dans votre datacenter.

Historique de vulnérabilités. TeamViewer a subi plusieurs incidents notables — en 2016, des milliers de comptes ont été compromis par credential stuffing ; en 2024, une intrusion dans l'environnement corporate a été attribuée à un groupe APT. Ces incidents ne mettent pas en cause le protocole, mais soulignent que dépendre d'un tiers, c'est dépendre de sa surface d'attaque.

Coût des licences. TeamViewer Business démarre à plus de 600 €/an pour un seul utilisateur simultané. AnyDesk est moins cher mais reste sur un modèle par siège. RustDesk self-hosted réduit le coût à celui de votre VPS — un ServOrbit à partir de 99 DH/mois suffit pour toute une équipe.

Ce que RustDesk self-hosted vous offre

  • Aucune limite de session — pas de licence par siège ni de quota de connexions simultanées ; votre serveur sert autant d'utilisateurs que votre VPS peut en absorber
  • Chiffrement bout-en-bout garanti — courbe Ed25519 pour l'échange de clés, ChaCha20-Poly1305 pour le flux vidéo et les entrées clavier/souris : la clé publique de votre serveur est intégrée au client, ce qui rend l'interception structurellement impossible
  • Latence maîtrisée — votre relais est dans le datacenter de votre choix ; en choisissant la région la plus proche de vos équipes, le RTT est systématiquement inférieur à celui d'un relais SaaS générrique basé en Europe du Nord
  • Clients multiplatformes — Windows, macOS, Linux, Android, iOS et navigateur web depuis un seul serveur central, sans configuration différente par plateforme
  • Mode ID personnalisé — assignez des identifiants mémorables (SERVEUR-DB-01, LAPTOP-ALICE) au lieu des ID numériques aléatoires générés par défaut
  • API REST intégrée — RustDesk Server Pro expose une API REST qui permet d'interroger l'état des connexions, de lister les machines enregistrées et d'automatiser le provisionnement via vos propres scripts ou un CMDB
  • Audit log des sessions — chaque connexion, déconnexion et transfert de fichier est horodaté et journalisé côté serveur ; indispensable pour les environnements soumis à des exigences de traçabilité

Architecture RustDesk : hbbs et hbbr

RustDesk sépare le rôle de signalisation du rôle de relais en deux processus distincts.

hbbs — le serveur de rendez-vous (ID Server). C'est le point d'entrée. Chaque client RustDesk qui démarre s'y enregistre avec un identifiant numérique (ou personnalisé). Quand une connexion est initiée, les deux parties se contactent via hbbs pour échanger leurs adresses IP et tenter une connexion directe P2P. hbbs écoute sur les ports TCP 21115 et 21116, ainsi que UDP 21116.

hbbr — le serveur relais (Relay Server). Si la connexion P2P échoue (NAT symétrique, pare-feu restrictif), le trafic est relayé via hbbr. Le relais ne voit que des flux chiffrés — il ne peut pas lire le contenu. hbbr écoute sur le port TCP 21117.

Flux d'une connexion. La machine A contacte hbbs en TCP pour obtenir l'adresse de la machine B. Les deux machines tentent une connexion directe UDP (hole punching). Si elle réussit, hbbr n'est pas impliqué et la latence est minimale. Si elle échoue, hbbs fournit à A l'adresse de hbbr pour relayer — avec un léger surcoût de quelques millisecondes. Dans la pratique, P2P réussit sur la majorité des réseaux domestiques et d'entreprise qui n'ont pas de NAT strict.

Prérequis VPS

Ressources minimales. 1 Go de RAM et 1 vCPU suffisent jusqu'à environ 20 connexions simultanées en mode relais. Au-delà, le facteur limitant est la bande passante : un flux Full HD encode à environ 2-4 Mbit/s. Pour 50 connexions simultanées en relay, prévoyez 2 vCPU, 2 Go de RAM et un VPS avec un débit garanti d'au moins 200 Mbit/s.

Ports à ouvrir.
- TCP 21115 — négociation NAT
- TCP 21116 — enregistrement des ID
- UDP 21116 — hole punching P2P
- TCP 21117 — flux relayé
- TCP 21118 et 21119 — client web (optionnel)
- TCP 443 — interface admin HTTPS (si activée)

Logiciels requis. Docker Engine 24+ et Docker Compose v2 (docker compose sans tiret). Un nom de domaine ou sous-domaine est recommandé pour exposer l'interface admin derrière TLS — sinon les connexions à la GUI se font en HTTP clair.

Déployer RustDesk Server sur VPS

  1. Créer le répertoire et le fichier docker-compose.yml

    Créez la structure de répertoires et le fichier Compose :

    mkdir -p /opt/rustdesk/data
    cd /opt/rustdesk

    Contenu du fichier docker-compose.yml :

    services:
      hbbs:
        image: rustdesk/rustdesk-server:latest
        command: hbbs
        ports:
          - "21115:21115"
          - "21116:21116"
          - "21116:21116/udp"
          - "21118:21118"
        volumes:
          - ./data:/root
        restart: unless-stopped
        depends_on:
          - hbbr
    
      hbbr:
        image: rustdesk/rustdesk-server:latest
        command: hbbr
        ports:
          - "21117:21117"
          - "21119:21119"
        volumes:
          - ./data:/root
        restart: unless-stopped

    Le volume partagé ./data garantit que hbbs et hbbr utilisent la même paire de clés générée au premier démarrage.

  2. Démarrer les conteneurs et récupérer les clés

    Lancez les deux services en arrière-plan :

    docker compose up -d

    Au premier démarrage, hbbs génère automatiquement une paire de clés Ed25519 dans ./data/. Récupérez la clé publique :

    cat /opt/rustdesk/data/id_ed25519.pub

    Notez cette valeur — vous en aurez besoin pour configurer chaque client. Sans elle, les clients refuseront de se connecter à votre serveur. Conservez aussi id_ed25519 (clé privée) en lieu sûr ; si elle est compromise, tous les clients devront être reconfigurés avec une nouvelle clé.

  3. Configurer le pare-feu (ports TCP/UDP)

    Ouvrez les ports nécessaires dans ufw :

    ufw allow 21115/tcp
    ufw allow 21116/tcp
    ufw allow 21116/udp
    ufw allow 21117/tcp
    ufw allow 21118/tcp
    ufw allow 21119/tcp
    ufw reload

    Si votre VPS est également protégé par un pare-feu réseau dans le panneau ServOrbit, appliquez les mêmes règles à ce niveau. Vérifiez ensuite que les ports sont bien en écoute :

    ss -tlnup | grep -E '2111[5-9]'
  4. Exposer l'interface admin derrière un reverse proxy HTTPS

    RustDesk Server Pro propose une interface web d'administration sur le port 21114 (HTTP). Pour l'exposer en HTTPS, ajoutez nginx comme reverse proxy dans votre docker-compose.yml ou dans une configuration nginx existante.

    Exemple de vhost nginx minimal pour rustdesk.votre-domaine.com :

    server {
        listen 443 ssl;
        server_name rustdesk.votre-domaine.com;
        ssl_certificate /etc/letsencrypt/live/rustdesk.votre-domaine.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/rustdesk.votre-domaine.com/privkey.pem;
        location / {
            proxy_pass http://127.0.0.1:21114;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    Obtenez le certificat avec Certbot :

    certbot --nginx -d rustdesk.votre-domaine.com
  5. Configurer les clients desktop (Windows, macOS, Linux)

    Téléchargez le client RustDesk depuis [rustdesk.com](https://rustdesk.com) et ouvrez les paramètres réseau (icône engrenage → Réseau). Renseignez :
    - Serveur ID : adresse IP ou nom de domaine de votre VPS
    - Serveur Relay : même valeur
    - Clé : la valeur copiée depuis id_ed25519.pub

    Validez. L'indicateur de connexion passe au vert si le serveur est joignable et la clé correcte. Dès cet instant, aucune tentative de connexion ne passe par les serveurs publics RustDesk.

  6. Configurer les clients mobiles (Android et iOS)

    Sur Android, installez RustDesk depuis le Play Store ou en APK direct (utile si le Play Store est restreint sur certains appareils d'entreprise). Sur iOS, RustDesk est disponible sur l'App Store.

    Dans les deux cas, accédez à Paramètres → ID/Relay Server et renseignez les mêmes valeurs que pour le client desktop : adresse du serveur et clé publique. La clé peut être partagée via QR code depuis l'interface admin de RustDesk Server Pro, ce qui simplifie le déploiement en masse sur flotte mobile.

  7. Tester une connexion bout en bout

    Sur deux machines configurées avec votre serveur, relevez l'identifiant affiché sur la machine cible. Depuis la machine source, entrez cet identifiant dans le champ de connexion RustDesk et initiez la session.

    Vérifiez dans les logs que la connexion passe bien par votre infrastructure :

    docker logs rustdesk-hbbr-1 --tail 20

    Une ligne contenant [RELAY] indique que le relais est utilisé (NAT strict). Une ligne [DIRECT] ou l'absence de ligne dans les logs de hbbr indique une connexion P2P directe — idéale pour la latence.

Configurer TLS pour les connexions sécurisées

Par défaut, les flux RustDesk sont chiffrés bout-en-bout avec ChaCha20-Poly1305 — TLS supplémentaire n'est pas requis pour les sessions de bureau à distance elles-mêmes. En revanche, l'interface admin (port 21114) et l'API REST tournent en HTTP clair si vous ne les protégez pas.

Option 1 : Certbot + nginx (recommandé). Comme vu à l'étape 4, nginx agit en reverse proxy devant le port 21114. Certbot renouvelle le certificat automatiquement via un timer systemd.

Option 2 : Traefik comme edge proxy. Si vous utilisez déjà Traefik pour d'autres services sur le même VPS, ajoutez simplement des labels au service hbbr dans Compose :

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.rustdesk-admin.rule=Host(`rustdesk.votre-domaine.com`)"
  - "traefik.http.routers.rustdesk-admin.tls.certresolver=letsencrypt"
  - "traefik.http.services.rustdesk-admin.loadbalancer.server.port=21114"

Ce qui reste en clair par conception. Les ports 21115-21119 ne passent pas par HTTPS car ils utilisent leurs propres protocoles binaires. Le chiffrement de ces flux est assuré par les clés Ed25519 et ChaCha20 — pas par TLS. Ne tentez pas de forcer HTTPS sur ces ports.

Activer l'authentification et le contrôle d'accès

La version open source de RustDesk Server ne propose pas d'interface d'authentification native — tout client connaissant votre clé publique peut se connecter à une machine enregistrée si celle-ci accepte la demande. RustDesk Server Pro (auto-hébergeable, gratuit jusqu'à 20 utilisateurs) ajoute plusieurs couches de contrôle.

Comptes utilisateurs et groupes. L'interface admin permet de créer des comptes nommés, de les regrouper et de définir des politiques d'accès par groupe. Un technicien peut avoir accès uniquement aux machines du groupe « Infrastructure », pas aux postes RH.

Approbation de connexion. Chaque machine peut être configurée pour demander une confirmation physique à l'utilisateur local avant d'autoriser la prise en main — le panneau « Accepter la connexion » apparaît sur l'écran de la machine cible.

Audit trail complet. Chaque événement (connexion initiée, acceptée, refusée, durée, transfert de fichier) est enregistré avec l'identité de l'initiateur et l'horodatage. Les logs sont exportables en CSV depuis l'interface admin.

Désactiver les serveurs publics. Pour forcer l'utilisation exclusive de votre serveur — sans repli sur les relais publics RustDesk en cas d'indisponibilité — ajoutez l'option --key avec votre clé privée dans la commande hbbs. Les clients configurés avec votre clé publique refuseront alors tout serveur alternatif, même le serveur officiel RustDesk.

Optimiser la qualité d'image et la performance

RustDesk utilise par défaut son propre codec vidéo (VP9 ou H.264 selon la plateforme) avec une qualité adaptative basée sur la bande passante détectée. Plusieurs leviers permettent d'affiner ce comportement.

Qualité d'image. Dans les paramètres du client, « Qualité image » peut être réglée sur Bas, Moyen, Élevé ou Personnalisé. En entreprise sur un réseau local ou un VPS proche géographiquement, « Élevé » est utilisable sans saturer la bande passante. Sur une connexion mobile ou longue distance, « Moyen » réduit la latence perçue.

Codec. RustDesk sélectionne automatiquement le codec le plus adapté : H.265 si les deux extrémités ont un encodage/décodage matériel, VP9 sinon. Sur un VPS sans GPU, VP9 est le choix par défaut — il est raisonnable en CPU pour les flux bureautiques. Évitez de forcer H.264 sur un VPS à faible CPU si vous avez plusieurs connexions simultanées.

P2P vs relais. Une connexion P2P directe est toujours préférable : elle évite le saut supplémentaire via hbbr et améliore la latence en supprimant le relais intermédiaire. Si vos utilisateurs se connectent depuis le même réseau local que la machine cible, vérifiez que le pare-feu ne bloque pas les connexions UDP directes entre postes — RustDesk tentera d'abord P2P avant de passer au relais.

RustDesk vs TeamViewer vs AnyDesk vs Guacamole

Faites défiler le tableau

CritèreRustDesk (self-hosted)TeamViewerAnyDeskGuacamole
Modèle d'hébergementSelf-hosted (VPS)SaaS (cloud vendor)SaaS (cloud vendor)Self-hosted (serveur web)
Coût de licenceGratuit (OSS) / Pro payantÀ partir de 600 €/an/utilisateurÀ partir de 180 €/an/utilisateurGratuit (Apache 2.0)
ProtocolePropriétaire chiffré (Ed25519 + ChaCha20)Propriétaire (RDP/VNC hybride)DeskRT (codec propriétaire)VNC / RDP / SSH via navigateur
Connexion P2POui (avec fallback relais)Non (toujours via cloud)Oui (avec fallback)Non (proxy central)
Clients mobiles natifsAndroid + iOS natifsAndroid + iOS natifsAndroid + iOS natifsNavigateur uniquement
Audit logOui (Pro)Oui (Business+)Oui (Business+)Limité (logs serveur bruts)
API RESTOui (Pro)Oui (payant)Non (API tierce)Oui (REST partielle)
Souveraineté donnéesTotale (votre infra)Nulle (cloud TeamViewer)Partielle (relais AnyDesk)Totale (votre infra)

Déploiement en entreprise : provisionner les clients en masse

RustDesk supporte la configuration automatique via un fichier JSON embarqué dans l'exécutable client. Lors du build ou du packaging pour votre flotte, placez un fichier RustDesk2.toml dans le répertoire de configuration avec vos valeurs :

relay-server = "votre-vps.exemple.com"
id-server = "votre-vps.exemple.com"
key = "<votre_clé_publique_ed25519>"

Pour Windows, ce fichier va dans %APPDATA%\RustDesk\config\. Pour Linux, dans ~/.config/rustdesk/. Vous pouvez déployer cette configuration via votre outil de gestion de flotte (Ansible, Intune, Puppet) sans interaction utilisateur. La clé publique et l'adresse serveur sont préchargées — l'utilisateur installe RustDesk et se retrouve directement connecté à votre infrastructure.

Surveiller et maintenir le serveur

Métriques Docker. Surveillez la consommation en temps réel avec docker stats — un pic CPU sur hbbr indique un nombre inhabituellement élevé de connexions relayées. Si la moyenne dépasse 80 % sur plusieurs minutes, envisagez d'augmenter le vCPU ou de vérifier si des connexions bloquées génèrent du retry en boucle.

Rotation des logs. Les conteneurs écrivent dans stdout/stderr, gérés par le démon Docker. Ajoutez une politique de rotation dans docker-compose.yml pour éviter que les logs ne saturent le disque :

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"

Mise à jour de l'image. RustDesk publie des nouvelles versions régulièrement. Pour mettre à jour sans interruption de service perceptible :

docker compose pull
docker compose up -d

Docker remplace les conteneurs un par un. Les sessions en cours via hbbr sont coupées pendant le redémarrage (quelques secondes) — préférez les mises à jour en heures creuses. Les clés dans ./data/ sont préservées — aucune reconfiguration des clients n'est nécessaire.

Résoudre les problèmes courants

Connexion impossible, ID non trouvé. Vérifiez que hbbs tourne (docker ps) et que les ports 21115-21116 TCP et 21116 UDP sont joignables depuis l'extérieur : nc -vz <ip-vps> 21116. Si le test échoue, le pare-feu réseau (ufw ou règle VPS) bloque le port.

« Clé incorrecte » côté client. La clé affichée dans le client ne correspond pas à id_ed25519.pub sur le serveur. Relisez la valeur exacte avec cat /opt/rustdesk/data/id_ed25519.pub et reconfigurerez le client — attention aux espaces ou retours à la ligne parasites lors du copier-coller.

Toujours en mode relay, jamais P2P. Le hole punching UDP échoue si l'un des deux réseaux utilise un NAT symétrique (fréquent sur certains réseaux mobiles 4G/5G et VPN d'entreprise). Ce n'est pas un bug — le relais fonctionne correctement, avec une latence légèrement supérieure. Pour forcer le diagnostic, comparez les logs de hbbr avec et sans VPN actif côté client.

L'interface admin est inaccessible. Le port 21114 n'est pas exposé dans le docker-compose.yml de base — il faut l'ajouter explicitement ou passer par le reverse proxy nginx vu à l'étape 4. Vérifiez aussi que vous utilisez bien l'image rustdesk-server-pro (la version open source ne propose pas d'interface admin).

Mise à jour de l'image sans régénérer les clés. Après docker compose pull && docker compose up -d, vérifiez que le fichier ./data/id_ed25519.pub n'a pas changé — il ne devrait pas, mais une corruption de volume peut dans de rares cas regénérer la paire. Si la clé a changé, tous les clients devront être reconfigurés.

Prêt à déployer votre serveur RustDesk ?

Les VPS ServOrbit incluent une IP publique dédiée, un pare-feu configurable et Docker pré-disponible — tout ce qu'il faut pour héberger votre infrastructure de bureau à distance en quelques minutes.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet