// Tutorial · Self-Hosting · Remote-Desktop

RustDesk selbst hosten: Eigener Remote-Desktop-Server

📅 04.09.2026 ⏱ 9 Min. Lesezeit ✍️ Redaktion

TeamViewer & Co. sind bequem – aber deine Fernwartungs-Sitzungen laufen über fremde Server. RustDesk ist die Open-Source-Alternative: Der Server besteht aus zwei schlanken Diensten (hbbs für die ID-Vermittlung, hbbr für den Relay) und lässt sich in wenigen Minuten selbst hosten. In diesem Tutorial richtest du deine eigene RustDesk-Infrastruktur mit Docker Compose ein – inklusive Ports, Key-Handling und Client-Konfiguration.

Warum ein eigener RustDesk-Server?

Fernwartung ist praktisch, bis man merkt, dass die Session über die Server eines Drittanbieters läuft. RustDesk ist eine Open-Source-Alternative zu TeamViewer & AnyDesk – und der Server, der die Verbindungen vermittelt, gehört dann dir. Du behältst die Kontrolle darüber, wer sich verbinden kann, und die Sitzungen laufen über deine eigene Infrastruktur statt über fremde Relay-Server.

Wie RustDesk funktioniert: Die Clients verbinden sich zuerst zum ID-Server (hbbs), der die Geräte vermittelt. Klappt der direkte Peer-to-Peer-Durchstich nicht (NAT/Firewall), übernimmt der Relay-Server (hbbr) die Datenübertragung. Beide Dienste stecken in einem Image – zwei Container, ein Setup.

Konzept: hbbs, hbbr & die Ports

Das Server-Image rustdesk/rustdesk-server enthält beide Binaries – du startest sie als getrennte Container:

  • hbbs – ID-/Rendezvous-Server: verwaltet die Geräte-IDs, koordiniert den Verbindungsaufbau (TCP/UDP 21116) und den NAT-Test (21115).
  • hbbr – Relay-Server: leitet den Datenverkehr weiter, wenn keine direkte Verbindung möglich ist (TCP 21117).
  • hbbs -r …: teilt dem ID-Server die Adresse des Relay-Servers mit, damit er diese an die Clients weitergibt.
Anders als bei Web-UIs: Diese Ports müssen öffentlich erreichbar sein – sonst können sich Clients von unterwegs nicht anmelden. Ein Loopback-Binding wie bei Portainer/PrivateBin wäre hier kontraproduktiv.

Vorbereitung: Daten & Firewall

mkdir -p ~/rustdesk/hbbs ~/rustdesk/hbbr
cd ~/rustdesk
  • ./hbbs und ./hbbr → jeweils /root: Hier liegen Datenbank und – wichtig – die Server-Schlüssel (id_ed25519*), die hbbs beim ersten Start erzeugt.
  • USER_UID/USER_GID: Im offiziellen Image ohne Funktion (Dienste laufen im Container als Root) – sie schaden nicht, lassen sich aber gefahrlos entfernen.
  • Für rd.huuu.biz muss ein DNS-A-Eintrag auf die Server-IP zeigen – die Clients erreichen den Server später über diesen Namen.

Docker Compose – die Datei

So sieht das fertige Setup aus (deine Vorlage, um Kommentare ergänzt):

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r rd.huuu.biz:21117 -k ""   # -r = Relay-Adresse (hbbr), -k "" = ohne Schlüsselprüfung
    environment:
      - USER_UID=1000
      - USER_GID=1000
      # - ALWAYS_USE_RELAY=N   # erzwingt Direktverbindung, Relay nur als Fallback
    volumes:
      - ./hbbs:/root          # Datenbank + Schlüssel des ID-Servers
    ports:
      - 21115:21115           # NAT-Typ-Test
      - 21116:21116           # TCP: ID-Dienst / Hole Punching
      - 21116:21116/udp       # UDP: Heartbeat & ID-Dienst
      - 21118:21118           # Web-Client (TCP)
    networks:
      - rustdesk-net
    depends_on:
      - hbbr                  # Relay muss vor dem ID-Server laufen
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./hbbr:/root          # Relay-Daten
    ports:
      - 21117:21117           # Relay (TCP) – wird in hbbs via -r referenziert
      - 21119:21119           # Web-Client (TCP)
    networks:
      - rustdesk-net
    restart: unless-stopped

networks:
  rustdesk-net:               # internes Netz zwischen hbbs und hbbr
    driver: bridge
  • command: hbbs -r rd.huuu.biz:21117: Der ID-Server bekommt die öffentliche Relay-Adresse – die Clients erhalten sie bei der Registrierung automatisch mitgeteilt.
  • -k "": schaltet die Schlüsselprüfung ab (Details im nächsten Abschnitt) – für den Testbetrieb praktisch.
  • depends_on: startet zuerst den Relay-Server, damit hbbs ihn direkt erreichen kann.
  • :latest folgt der aktuellen Server-Version – wer kontrolliert updaten will, pinnt ein Versions-Tag.

Konfiguration: Relay, Key & Clients

Zwei Dinge entscheiden darüber, ob sich Clients verbinden dürfen: der -r-Parameter und die Schlüsselprüfung.

ThemaErklärung
-r rd.huuu.biz:21117Adresse des Relay-Servers, die hbbs an alle Clients weitergibt. Muss von außen erreichbar sein (DNS + Port 21117).
-k ""Deaktiviert die Schlüsselprüfung – jeder Client mit korrekter Server-Adresse darf sich verbinden. Bequem, aber weniger sicher.
Public KeyOhne -k "" erzeugt hbbs ein Schlüsselpaar in ./hbbs; den öffentlichen Schlüssel zeigt das Log (docker logs hbbs) – er muss in jedem Client hinterlegt werden.
ALWAYS_USE_RELAYAuf Y setzen, wenn direkte P2P-Verbindungen unterbunden werden sollen (z. B. hinter strikten NATs).
Client-EinstellungIm RustDesk-Client unter „ID/Relay-Server“ den Wert rd.huuu.biz eintragen – Port 21116 ist der Standard und kann weggelassen werden.
Empfehlung für den Betrieb: -k "" nur zum Testen verwenden. Für den Dauerbetrieb den generierten Public Key aus dem Log in die Clients eintragen – dann kann sich nur anschließen, wer den Schlüssel kennt.

Netzwerk, Firewall & Erreichbarkeit

Damit alles von außen funktioniert, müssen folgende Ports in der Firewall freigegeben sein:

PortProtokollZweck
21115TCPNAT-Typ-Test
21116TCP + UDPID-Dienst, Hole Punching, Heartbeat
21117TCPRelay (hbbr) – Datenübertragung
21118 / 21119TCPWeb-Client (Browser)
# Beispiel: UFW (Ports nur für die RustDesk-Dienste)
sudo ufw allow 21115/tcp
sudo ufw allow 21116/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21117/tcp
sudo ufw allow 21118/tcp
sudo ufw allow 21119/tcp
Hinweis: Läuft der Server hinter NAT/Cloud-Firewall (Provider, Hetzner, OVH …), dort dieselben Ports freigeben. 21116/udp wird gern vergessen – ohne ihn funktioniert die ID-Anmeldung der Clients nicht.

Erster Start & erste Verbindung

cd ~/rustdesk
docker compose up -d
docker compose logs -f hbbs    # zeigt u. a. den generierten Public Key

Danach auf dem Ziel-Rechner den RustDesk-Client einrichten:

  • Unter Einstellungen → Netzwerk bei „ID/Relay-Server“ rd.huuu.biz eintragen (ohne Port – 21116 ist Standard).
  • Wird die Schlüsselprüfung genutzt, den Public Key aus docker logs hbbs ins Feld „Key“ kopieren.
  • Die angezeigte ID erscheint danach im Netz – vom anderen Gerät aus verbinden und das Passwort eingeben.
  • Verbindungstest: Direktverbindung (P2P) wird bevorzugt; ist keine möglich, springt automatisch der Relay-Server ein.

Backups, Keys & Updates

Für Updates reicht docker compose pull && docker compose up -d – die Daten bleiben dank Volumes erhalten. Wichtig: Ein Backup der Ordner ./hbbs und ./hbbr sichert auch die Server-Schlüssel.

Schlüssel niemals verlieren: Werden die id_ed25519*-Dateien in ./hbbs gelöscht, erzeugt hbbs neue Schlüssel – und alle Clients mit dem alten Public Key sind abgemeldet. Wer mit -k "" arbeitet, umgeht das Problem, verzichtet dafür aber auf die Schlüsselprüfung.

Häufige Probleme (FAQ)

ProblemLösung
Clients finden den Server nichtPort 21116 TCP+UDP muss öffentlich erreichbar sein – DNS-Eintrag prüfen, Firewall (Host & Provider) kontrollieren.
Verbindung kommt nicht zustande / nur sehr langsamRelay-Adresse prüfen (-r rd.huuu.biz:21117), Port 21117 offen? Falls nötig ALWAYS_USE_RELAY=Y setzen.
„Key mismatch“ beim VerbindenPublic Key im Client entspricht nicht dem Server – aktuellen Key aus docker logs hbbs eintragen oder (nur Test) mit -k "" starten.
Web-Client funktioniert nichtPorts 21118 und 21119 müssen offen sein – sie werden nur für den Browser-Client benötigt.
Geräte-IDs verschwinden nach NeustartVolumes prüfen: ./hbbs:/root und ./hbbr:/root müssen gemountet bleiben.
Nach Update keine Verbindung mehrImage-Update kann Datenbankformat ändern – vorher Backups von ./hbbs/./hbbr ziehen und Version pinnen.

Fazit

RustDesk bringt Fernwartung zurück unter eigene Kontrolle: zwei kleine Container, sechs offene Ports und ein DNS-Eintrag genügen, damit deine Clients sich über deinen eigenen ID- und Relay-Server verbinden. Die Einrichtung ist in fünf Minuten erledigt – der einzige Punkt, den man im Betrieb nicht vernachlässigen darf, ist der Umgang mit den Server-Schlüsseln und der Firewall.

Die vier Merksätze: ① hbbs vermittelt (21116), hbbr leitet weiter (21117) – Ports müssen öffentlich sein. ② -r auf die öffentliche Relay-Adresse setzen. ③ Ohne -k "" gehört der Public Key in jeden Client. ④ Schlüssel-Ordner (./hbbs) sichern – Verlust meldet alle Clients ab.
📝
....

Wir betreiben unsere komplette Infrastruktur selbst auf Open-Source-Software und schreiben nur über Tools, die wir im Alltag wirklich einsetzen. Fragen zum Artikel? Schreib uns.