RDP über Home-Gateway (Option B)
Alternative: Option A — L4-Gateway-Route direkt anlegen.
Was es ist
Eine RDP-Route in der Admin-UI bekommt einen neuen Access-Mode:
Über Home-Gateway. Wenn du den wählst:
- Die Verbindung wird durch einen Home-Gateway-Container ins Heimnetz geroutet (Windows-Rechner muss keine Port-Weiterleitung im Heim-Router haben und keinen eigenen WG-Peer).
- GateControl legt im Hintergrund automatisch eine L4-TCP-Route
an die
public-port → gateway → LAN-RDP-Portdurchschleust. - Alle RDP-Komfort-Features (Credential-Vault, Auflösung, Clipboard, Audio, NLA, Sharing, WoL, Maintenance-Windows, …) bleiben erhalten.
- Die generierbare
.rdp-Datei nutzt die öffentliche Adresse + den Listen-Port statt der LAN-IP.
Unterschied zu MS RD-Gateway
Am RDP-Route gibt es historisch Felder „Gateway-Host" / „Gateway-Port" — die sind für den Microsoft RD-Gateway (TSGateway), also den Windows-Rollendienst der RDP über HTTPS tunnelt. Das ist ein eigenständiges Microsoft-Produkt, kein Teil von GateControl.
Das neue „Über Home-Gateway" ist der GateControl-Weg. Beides kann kombiniert werden (z.B. Home-Gateway zum LAN-Edge, dann dort ein MS-RDG der das RDP zum finalen Host tunnelt), die UI trennt beide Sektionen klar.
Voraussetzungen
- Home-Gateway-Peer im Admin-UI angelegt und heartbeatet
- Pro-Lizenz (beide RDP-Feature + Home-Gateway-Routing)
- RDP am Ziel-Gerät aktiviert
Anlegen — der Wizard
Remote Desktop → Neue RDP-Route öffnet einen 6-stufigen Wizard:
| Schritt | Inhalt |
|---|---|
| 1 — Verbindung | Name, Beschreibung, Host (LAN-IP), RDP-Port, Access-Mode, abhängig vom Mode: External-Hostname/Port oder Home-Gateway-Peer + Listen-Port, plus (optional) Microsoft RD-Gateway-Konfiguration |
| 2 — Authentifizierung | Credential-Mode (none / user_only / full), Domain, Username, Password |
| 3 — Darstellung + Ressourcen | Auflösung (Fullscreen/Fixed/Dynamic), Farbtiefe, Multi-Monitor, Redirects (Clipboard/Drucker/Drives/USB/Smartcard), Audio |
| 4 — Netzwerk + Session | Netzwerkprofil, Bandbreitenlimit, NLA, Wallpaper/Themes/Animationen deaktivieren, Session-Timeout, Remote-App, Start-Program, Admin-Session |
| 5 — WoL + Zugriffskontrolle + Tags | Wake-on-LAN, Maintenance-Window, Health-Check, Credential-Rotation, Tags, Notes |
| 6 — Zugriff + Review | Welche Benutzer sehen die Route + Zusammenfassung aller Felder vor dem Speichern |
Der Wizard nutzt dasselbe Form-State wie der klassische Flat-Edit — Edit-Button auf einer bestehenden Route öffnet ebenfalls den Wizard mit allen Feldern vorbefüllt.
Was wählst du im Wizard für Home-Gateway-Routing
Schritt 1 — Verbindung:
- Host: die LAN-IP des Windows-Rechners, z.B.
192.168.2.100. (Nicht die öffentliche Adresse — der Gateway muss ins LAN routen.) - Port:
3389(der RDP-Port auf dem Ziel-Gerät) - Access-Mode:
Über Home-Gateway - Home Gateway: dein registrierter Gateway-Peer (Dropdown nur mit Peers die als Gateway konfiguriert sind)
- Öffentlicher Listen-Port: der Port unter dem die Session von
außen erreichbar ist. Default: gleich wie der RDP-Port (3389).
Wähle einen anderen wenn 3389 auf dem Server bereits belegt ist
— z.B.
13389. - Microsoft RD-Gateway-Felder: leer lassen, außer du hast tatsächlich einen MS-RDG-Server hinter dem RDP-Ziel.
Datenfluss (identisch zu Option A)
RDP-Client ── TCP SYN ──▶ Server (VPS)
│
│ Caddy Layer-4-Plugin
│ (auto-generierte L4-Route)
│ forward → gateway-peer-IP : listen_port
▼
Gateway-Container (Heim)
│
│ TcpProxyManager : listen_port
│ forward → host : port (aus RDP-Route)
▼
Windows-Rechner (RDP-Server)
Unter der Haube ist es exakt das gleiche Netzwerk-Setup wie
Option A — der einzige Unterschied: die L4-Route wird automatisch
erzeugt und versteckt. Sie taucht mit route_type=l4,
target_kind=gateway, und Description „auto-created for RDP route …"
in der Routes-Tabelle auf. Wird beim Löschen / Toggle /
Access-Mode-Wechsel der RDP-Route automatisch mitgepflegt — kein
orphan möglich.
Edit-Fälle
Access-Mode zu gateway wechseln
- Wizard speichern → die L4-Route wird neu angelegt, die ID in
rdp_routes.gateway_l4_route_idhinterlegt.
Access-Mode weg von gateway wechseln
- Speichern → die L4-Route wird entfernt, der Pointer wird
NULL.
Listen-Port ändern, LAN-Host wechseln, etc.
- Update → die L4-Route wird in-place aktualisiert (dual-bind overlap im Gateway-TcpProxyManager sorgt für Zero-Downtime bei Port-Change).
RDP-Route löschen
- Cascade → L4-Route wird zuerst entfernt, dann die RDP-Route. Kein orphan.
RDP-Route deaktivieren (Toggle)
- Die L4-Route wird ebenfalls deaktiviert → der öffentliche Listen- Port schließt sofort. User-feedback: „der Rechner ist vom Netz."
Client-Seite
Aus der Admin-UI kannst du pro RDP-Route eine .rdp-Datei
herunterladen die bereits mit der öffentlichen Adresse + Listen-Port
befüllt ist. Der User klickt sie an → mstsc.exe öffnet sich mit
allen Einstellungen aus der Route (Auflösung, Redirects, Farbtiefe,
Domain-Prefix am Username etc.).
Sicherheit
- Credentials werden in der DB AES-256-GCM verschlüsselt
(
encrypted_username/encrypted_password). - Der Server entschlüsselt sie nur beim Generieren der
.rdp-Datei oder auf expliziten Credential-Request via API. - Die L4-Route forwarded pures TCP — RDP-interne Verschlüsselung (NLA / TLS 1.2+) greift unverändert. Der Tunnel ist zusätzlich WG- verschlüsselt, Double-Crypto auf dem Public-zum-Gateway-Hop.
- Keine GateControl-Komponente entschlüsselt den RDP-Stream zu irgendeinem Zeitpunkt.
Zusammenspiel mit anderen Access-Modes
Du kannst einer RDP-Route nur einen Access-Mode geben. gateway
ist exklusiv — wer drauf umschaltet, verliert automatisch die
Peer-Weiterleitungs- (internal) oder Port-Forwarding-Info (external).
Wenn du parallel eine Fallback-Route willst, lege zwei RDP-Routes an
(eine mit internal, eine mit gateway).
Relevante Dateien
Server
src/services/rdp.js—VALID_ACCESS_MODES+_syncLinkedL4Route(), cascade-delete, toggle-syncsrc/routes/api/rdp.js— License-Gate vor create/updatesrc/services/license.js—COMMUNITY_FALLBACK-Eintragsrc/db/migrations.js— Migration 38 (rdp_routes_gateway_link)- UI-Wizard:
public/js/rdp.js(Step-Navigation, Review, Gateway-Peer- Dropdown),templates/pro/pages/rdp.njk(wizard-step attributes + neue Home-Gateway-Sektion)
Tests
tests/rdp_gateway.test.js— 5 Szenarien (create + L4-link, cascade-delete, access-mode-wechsel, validation, toggle-sync)
Troubleshooting
Beim Speichern: „Feature not available in your plan"
Dir fehlt die Pro-Lizenz für Home-Gateway-RDP-Routing. Upgrade oder
nutze Option A (L4-Gateway-Route direkt) — die setzt nur
gateway_tcp_routing voraus, nicht das RDP-spezifische Feature-Flag.
Beim Speichern: „Linked L4 gateway route could not be created"
Der Listen-Port kollidiert mit einer anderen L4-Route oder einem blockierten Port (z.B. 3389 schon von einer anderen RDP-Route belegt). Wähle einen anderen Listen-Port im Wizard (z.B. 13389).
RDP-Client verbindet sich, sieht aber nur schwarzen Bildschirm
- NLA-Konflikt. Stelle im Wizard unter „Netzwerk & Verhalten" sicher dass NLA passend zum Ziel-Server ist (alte Server: aus, neue: an).
- Multi-Monitor auf alten Servern kann ebenfalls hängen — testweise deaktivieren.
Client kriegt „Gateway-Zeitüberschreitung"
- Home-Gateway im Admin-UI: Status-Check — ist der Gateway online?
- WG-Tunnel auf dem Server:
wg show wg0 | grep handshake— die Zeile fürs Gateway-Peer sollte < 2 Minuten alt sein. - Im Zweifel am Gateway
docker restart gatecontrol-gateway— der TcpProxyManager kommt dann mit frischer Route-Map hoch.
Ich will den L4-Listen-Port nachträglich ändern
Im RDP-Route-Wizard, Schritt 1, „Öffentlicher Listen-Port" anpassen und speichern. Die L4-Route wird in-place aktualisiert, der Gateway-Container migriert mit Dual-Bind-Overlap (10 s beide Ports offen) auf den neuen Port. Bestehende RDP-Sessions werden nicht abgeschossen.