Konfiguration
13. Admin-UI-Zugang verwalten
13.1 Users & Rollen
Seite: Sidebar → Benutzer (Pro) oder Settings (Community).
- Admin — kann alles. Admin-Passwort Pflicht für Web-UI-Login.
- Benutzer — begrenzte Client-Nutzung; sieht in der Client-App nur die Routen, bei denen er in Sichtbar für Benutzer gelistet ist.
Pro-User:
- Username, Anzeigename, Email
- Passwort (bei Admin Pflicht; bei User optional, wenn nur per API-Token zugegriffen wird)
- API-Tokens (siehe 13.2)
- Peers, die dieser User besitzt (aus Web-UI-Sicht: Filter auf Meine Peers)
13.2 API-Tokens
Seite: Sidebar → Benutzer → Benutzer auswählen → Token hinzufügen, oder direkt im Token-Wizard (4 Schritte). Gruppiert in drei Bereiche:
- Zugriffsebene —
Vollzugriff(alles) oderNur lesen. - Server-Verwaltung — Ressourcen-Scopes: Peers, Routen, Einstellungen, Webhooks, Logs, System, Backup.
- Client-App — Scopes, die die offizielle Client-App braucht:
client(Pflicht: connect/config/heartbeat),client:services(sieht Server-Routen),client:traffic(Traffic-Stats),client:dns(DNS-Leak-Test),client:rdp(RDP-Routen-Zugriff).
Optional:
- An Maschine binden — das Token wird beim ersten Connect an den Hardware-Fingerprint gebunden. Gestohlene Tokens sind dann auf anderen Maschinen wertlos.
- An Peer binden — der User hat bereits einen Peer im System; bei Connect mit diesem Token soll automatisch dieser Peer verwendet werden (keine neue Peer-Erstellung).
- Ablauf — Nie / 30d / 90d / 1 Jahr / Custom.
Nach der Erstellung wird das Token genau einmal im Klartext angezeigt. Verpasst → widerrufen und neu erstellen.
13.3 Login-Lockout
Settings → Sicherheit → Kontosperrung: Max. Fehlversuche, Sperrdauer. Betrifft sowohl den Admin-UI-Login als auch Route-Auth. Gesperrte Konten sind im gleichen Tab auflistbar und können manuell entsperrt werden.
13.4 Passwort-Policy
Im selben Tab: Mindestlänge, Pflicht-Groß/Klein-/Zahl-/Sonderzeichen. Betrifft neue Passwörter — bestehende bleiben unverändert.
14. Webhooks & Automation
Seite: Sidebar → Einstellungen → Webhooks. Verschickt bei Events einen HTTP-POST mit JSON-Body an deine URL.
14.1 Webhook anlegen
Pro Webhook brauchst du:
- URL — http oder https, darf nicht auf private/Loopback-Adressen zeigen (SSRF-Schutz; Resolver prüft auch DNS-Ergebnisse).
- Events —
*für alle, oder kommagetrennt spezifische (peer_created,route_updated,route_monitor_down,gateway_offline,gateway_recovered, …). - Beschreibung — frei.
14.2 Payload-Format
{
"event": "route_monitor_down",
"message": "Route nas.example.com ist nicht mehr erreichbar",
"timestamp": "2026-04-21T14:12:03.000Z",
"details": {
"route_id": 12,
"domain": "nas.example.com",
"status": "down"
}
}
Max. 64 KB — größere Payloads werden serverseitig gekürzt und mit
_truncated: true markiert. Rejected Requests (non-2xx) führen zu einer
Warnmeldung im Activity-Log, werden aber nicht automatisch wiederholt.
14.3 Test-Button
Im Webhook-Listing: Testen schickt eine Dummy-Payload mit Event
webhook_test. Perfekt zum Einrichten von Slack, Discord, Home-Assistant-
Webhook-Triggern.
14.4 Hinweis zur Authentizität
GateControl signiert Webhook-Payloads nicht mit HMAC. Wenn du die Authentizität absichern musst, beschränke die empfangende URL (Firewall, Token im Pfad) oder nutze einen Tunnel mit Basic-Auth.
16. Lizenz & Feature-Gates
16.1 Drei Modi
- Unlizenziert — kein Key gesetzt. Sehr enges Feature-Set, siehe
COMMUNITY_FALLBACKinsrc/services/license.js. Banner oben auf dem Dashboard: "Sie nutzen GateControl ohne Lizenzschlüssel. Registrieren Sie sich für eine kostenlose Community-Lizenz…" - Community (mit Key) — kostenloser Account bei callmetechie.de. Öffnet grundlegende Pro-Nah-Features, aber mit Limits (z.B. 3 Peers, 1 HTTP-Route, 1 Gateway).
- Pro / Lifetime — voller Featureumfang, Limits je nach Produkt.
Die aktuellen Werte siehst du unter Settings → Lizenz: Plan, Ablaufdatum, Aktivierungen, Feature-Liste. Refresh-Button forciert eine Revalidierung gegen den Lizenz-Server (ansonsten alle 7 Tage im Hintergrund).
16.2 Wie die Sperrung funktioniert
Features:
- Boolean (z.B.
circuit_breaker,request_mirroring,remote_desktop) — UI zeigt das Toggle mit einem Lock-Icon (🔒-ähnliche SVG) und Tooltip "Erfordert Pro- oder Lifetime-Lizenz". Klick macht nichts. - Numerisch (z.B.
vpn_peers: 3,http_routes: 1,gateway_peers: 1) — Badge oben auf der Seite:X / Y, rot wenn Limit erreicht. Versuch, mehr anzulegen, scheitert mit einer Fehlermeldung.
Wenn du die Lizenz downgraded (z.B. Pro → Community nach Ablauf), werden überzählige Einträge nach Alter deaktiviert (nicht gelöscht) — du bekommst eine Warnung im Activity-Log und optional per Email. Bei erneutem Upgrade aktivierst du sie einfach wieder.
16.3 Hardware-Bindung
Pro-/Lifetime-Lizenzen sind an einen Hardware-Fingerprint gebunden (DMI-Product-UUID + CPU-Model + RAM-Größe, SHA-256 gehasht). Beim Online- Refresh wird das Gerät mit diesem Fingerprint registriert. Bei Hardware- Wechsel (Umzug auf neuen Host) brauchst du eine neue Aktivierung — bestehende lassen sich per callmetechie-Admin-Panel freigeben.
Offline-Betrieb: nach einmaliger Online-Validierung wird ein JWT-Token lokal
gecacht (/data/license.token). Der Cache hält bis zum Expire-Datum; danach
versucht der Server ein Refresh, fällt bei Netz-Ausfall auf den gecachten
Token zurück.
16.4 Feature-Matrix (Auszug)
Statt einer vollständigen Tabelle hier die groben Gruppen — konkrete Werte für deinen Plan stehen unter Settings → Lizenz:
- Core (immer verfügbar): Peers (Limit), HTTP-Routen (Limit), Traffic- History, Backup/Restore, Interne Aktivitäts-Logs, WireGuard-CLI-Support.
- Community: + Tags, Peer-Gruppen, L4-Routen mit limitierter Anzahl,
Home-Gateway (Limit 1),
internal_dns, Basic Auth. - Pro: + unbegrenzte HTTP/L4-Routen, Route-Auth inkl. 2FA, Rate Limiting, Compression, Custom Headers, Load-Balancing, Sticky Sessions, Retry, Circuit Breaker, Request Mirroring, Uptime Monitoring, Prometheus, Log-Export, Scheduled Backups, Email-Alerts, Webhooks, API-Tokens, Debug, AI-Bot-Blocker, Remote Desktop (RDP-Routen), Split-Tunnel-Preset, RDP-via-Gateway, Gateway-TCP-Routing, Gateway-WoL, Custom-Branding.
Die aktuelle kanonische Liste findest du in
src/services/license.js::COMMUNITY_FALLBACK.