Windows Server (Salto-Server) — Systemdokumentation
Hostname: Salto-Server IP: 10.128.40.6 Stand: 23. Februar 2026
Hardware (Virtuelle Maschine)
| Komponente | Details |
|---|---|
| Typ | Hyper-V VM auf Host 10.128.40.5 |
| CPU | 1x Intel Core i7-14700 @ 2496 MHz |
| RAM | 8 GB (ca. 5,7 GB belegt) |
| OS-Disk (C:) | 65 GB (20 GB frei) — Virtual Disk |
| Daten-Disk (E:) | 500 GB (364 GB frei) — Synology iSCSI |
| Laufwerk D: | Wechseldatenträger (leer) |
Betriebssystem
| Eigenschaft | Wert |
|---|---|
| OS | Windows Server 2019 Standard (Build 17763) |
| Installation | 08.08.2025 |
| Letzter Start | 10.02.2026, 16:55 |
| Domain | WORKGROUP (eigenständig) |
| Hotfixes | 9 installiert (KB5066137 u.a.) |
Netzwerk
| Eigenschaft | Wert |
|---|---|
| Adapter | Microsoft Hyper-V Network Adapter |
| IPv4 | 10.128.40.6/24 (statisch) |
| Gateway | 10.128.40.1 (Sophos XGS) |
| DNS | 10.128.40.1, 10.128.30.1 |
| DHCP | Nein |
| NetBIOS | Aktiviert |
Installierte Hauptsoftware
| Software | Version | Funktion |
|---|---|---|
| SALTO ProAccess Space | 6.12.2.3 | Schließanlagen-Management |
| Salto Local IO Bridge | 1.5.0.0 | USB-Geräte-Kommunikation (PPD/Keylaser) |
| SQL Server 2022 (Instanz: SALTO) | 16.0.1000.6 | Datenbank für Salto |
| Node.js | 22.14.0 | Salto-Abhängigkeit |
| TeamViewer | — | Fernwartung |
| FlexiHub | — | USB-over-Network (Workaround) |
| HHD Virtual USB Tools | — | USB-Virtualisierung Server-Seite |
| Hornetsecurity VM Backup | 9.13.3 | VM-Backup |
| Physical Server Backup | 2.2.0 | Server-Backup |
| Sophos Endpoint | — | Endpoint-Protection |
| Blackbox-Exporter | 0.25.0 | Prometheus Monitoring |
| SNMP-Exporter | 0.27.0 | Prometheus Monitoring |
| Grafana | — | Dashboard (Port 3000) |
| OpenSSH Server | — | Remote-Zugang |
Salto ProAccess Space — Konfiguration
Installation
- Pfad:
C:\SALTO\ProAccess Space\ - Datenbank: SQL Server 2022, Instanz
SALTO, DB-NameSALTO_SPACE - SQL-Auth: Windows-Authentifizierung (SQLAuthenticationEnabled=0)
Service-Ports (aus service.ini)
| Port | Protokoll | Funktion | Status |
|---|---|---|---|
| 8100 | TCP (HTTP) | Web-Frontend + Metrics-Endpoint | Aktiv, Firewall offen |
| 8102 | TCP (WebSocket) | Local IO Bridge Kommunikation | Aktiv, Firewall BLOCKIERT |
| 8099 | TCP (SOAP) | Service-Port (Grafik-Mapping) | Aktiv, lauscht |
| 5001-10000 | UDP | Peripherie-Kommunikation (IP-Geräte) | Konfiguriert |
Zugriff
- Web-Interface:
http://10.128.40.6:8100 - WebSocket (Bridge):
http://10.128.40.6:8102 - Prometheus Metrics:
http://10.128.40.6:8100/metrics/text(aktiviert 23.02.2026)
Prometheus-Integration (aktiv seit 23.02.2026)
MetricsEnabled=1 in service.ini → App.Metrics Endpoint auf /metrics/text (Port 8100).
Datenfluss:
http://10.128.40.6:8100/metrics/text (CRLF, GAUGE uppercase)
→ SSH-Tunnel Pi:18100 → Salto:8100
→ salto-metrics-proxy.py (Port 18101, CRLF→LF, GAUGE→gauge)
→ Prometheus scrape http://172.17.0.1:18101/metrics/text
→ Grafana Dashboard "Salto ProAccess Space" (salto-proaccess-2026)
Verfügbare Metrik-Gruppen (170 Metriken):
- process_* / processor_* — CPU-Auslastung
- memory_* — RAM verfügbar, .NET Heap, GC-Zeit
- disk_* / io_* — Disk I/O und freier Speicher (in GB)
- networkinterface_* — Netzwerk-Throughput
- db_sql — SQL-Abfrage-Latenzen (Summary)
- acm_business_* — Thread-Pool-Auslastung
- periodictasksmanager_* — Scheduler-Status
- saltosynchronizationcontext_* — Interne Context-Queues
- saltoscheduler_* — Job-Scheduler
Proxy-Service: salto-metrics-proxy.service (Pi, systemd, User: ak)
- Script: /usr/local/bin/salto-metrics-proxy.py
- SSH-Tunnel: -L 0.0.0.0:18100:localhost:8100 in snmp-tunnel.service
- Hostnamen-Mapping: 127.0.0.1 salto-server in /etc/hosts
USB-Workaround (aktuell im Einsatz)
Da die Local IO Bridge nicht funktioniert, wird ein USB-over-Network-Workaround verwendet:
| Komponente | Software | Funktion |
|---|---|---|
| Server | HHD Virtual USB Tools (Port 43581) | USB-Geräte virtuell bereitstellen |
| Server | FlexiHub | USB-over-Network Management |
| Client | USB Network Gate Client | USB-Geräte vom Server nutzen |
Nachteil: Der Benutzer muss sich per RDP auf dem Server anmelden, um Salto zu bedienen. Nur die USB-Strecke (PPD/Keylaser) wird über den Client geleitet.
Laufende Dienste (relevant)
| Dienst | Funktion |
|---|---|
| ProAccessSpaceService | Salto ProAccess Space Hauptdienst |
| SaltoLocalIOBridge | Local IO Bridge (läuft, aber extern nicht erreichbar) |
| MSSQL$SALTO | SQL Server Instanz für Salto |
| SQLWriter | SQL Server VSS Writer |
| TeamViewer | Fernwartung |
| flexihub | USB-over-Network |
| UsbService | USB Network Gate Server |
| hhdvusbsrv | HHD Virtual USB Virtualization Server |
| hhdvusbcli | HHD Virtual USB Virtualization Client |
| blackbox_exporter | Prometheus Blackbox-Exporter |
| snmpexporter | Prometheus SNMP-Exporter |
| SyslogRelay (Scheduled Task) | Sophos Syslog UDP→TCP Relay für Pi |
| sshd | OpenSSH Server |
| Sophos * | Endpoint Protection (4 Dienste) |
| Hornetsecurity * | VM Backup (5 Dienste) |
Windows Firewall — Eingehende Regeln (benutzerdefiniert)
| Regel | Port | Protokoll | Status |
|---|---|---|---|
| salto web | 8100 | TCP | Aktiv |
| Grafana Dashboard | 3000 | TCP | Aktiv |
| SNMP Exporter | 9116 | TCP | Aktiv |
| OpenSSH SSH Server | 22 | TCP | Aktiv |
| Syslog UDP 1514 Inbound | 1514 | UDP | Aktiv (für Sophos Syslog-Relay) |
| HHD Virtual USB Data | 43581 | TCP | Aktiv |
| HHD Virtual USB Control | Any | TCP | Aktiv |
| FlexiHub (GUI + Service) | Any | Any | Aktiv |
| TeamViewer (App + Service) | Any | TCP/UDP | Aktiv |
| Ping erlauben | — | ICMPv4 | Aktiv |
| RDP | 3389 | TCP/UDP | Aktiv |
| WinRM | 5985 | TCP | Aktiv |
Fehlende Regeln
| Port | Zweck | Auswirkung |
|---|---|---|
| 8102 TCP | Salto WebSocket / Local IO Bridge | Bridge kann von Clients nicht erreicht werden |
| 8099 TCP | Salto Service-Port | Grafik-Mapping nicht von extern erreichbar |
| 1100 UDP | Salto Gateways/Controller v1 | IP-Geräte-Kommunikation |
| 4433 UDP | Salto Encoder v2 | Encoder-Kommunikation |
| 5001-10000 UDP | Salto Peripherie | IP-Device-Kommunikation |
Erreichbarkeit von extern (Test von raspip5 via VPN)
| Port | Status | Dienst |
|---|---|---|
| 22 | OFFEN | SSH |
| 80 | geschlossen | — |
| 135 | OFFEN | RPC |
| 139 | OFFEN | NetBIOS |
| 443 | geschlossen | — |
| 445 | OFFEN | SMB |
| 3389 | OFFEN | RDP |
| 5985 | OFFEN | WinRM |
| 8100 | OFFEN | Salto Web |
| 8102 | GESCHLOSSEN | Salto WebSocket (Bridge) — PROBLEM |
| 8443 | geschlossen | — |
Problemanalyse: Local IO Bridge
Symptom
Die Salto Local IO Bridge auf Client-PCs kann keine Verbindung zum Server aufbauen. Dadurch können PPD und Keylaser nicht über den Browser bedient werden.
Ursache
Port 8102 (TCP) ist in der Windows Firewall nicht freigegeben.
Der Salto-Service lauscht intern auf Port 8102 (WebSocket), aber es gibt keine eingehende Firewall-Regel dafür. Es existiert nur die Regel "salto web" für Port 8100.
Kommunikationsfluss (Soll-Zustand)
Client-Browser (http://10.128.40.6:8100)
↕ HTTP
Salto Web-Interface
Client: Local IO Bridge Service
→ localhost:50000-51000 (Browser ↔ Bridge)
→ 10.128.40.6:8102 TCP (Bridge ↔ Server) ← HIER BLOCKIERT
→ USB-Port (Bridge ↔ PPD/Keylaser)
Lösung
-
Windows Firewall-Regel für Port 8102 erstellen:
netsh advfirewall firewall add rule name="Salto WebSocket Bridge" dir=in action=allow protocol=TCP localport=8102 profile=domain,private -
Sophos XGS Firewall prüfen: Falls die Sophos XGS (10.128.40.1) auch Port 8102 zwischen Client-Subnetz und Server blockiert, dort ebenfalls freigeben.
-
Auf dem Client: Local IO Bridge neu starten (System Tray → Stop Service → Start Service)
-
Optional: Auch Port 8099 freigeben, falls Grafik-Mapping benötigt wird.
-
Nach erfolgreichem Test: FlexiHub/HHD Virtual USB Tools können deinstalliert werden, da der USB-Workaround nicht mehr nötig ist.
Zusätzliche Empfehlungen
- HTTPS aktivieren: Salto unterstützt HTTPS auf Port 8100 — aktuell läuft nur HTTP
- SQL Server sichern: SQL-Auth ist deaktiviert (gut), aber Instanz-Name ist von extern sichtbar
- Sophos Firewall: UDP-Ports 1100, 4433 und Range 5001-10000 prüfen, falls Salto IP-Geräte (Online-Türcontroller) im Einsatz sind
Sophos Syslog-Relay (eingerichtet 23.02.2026)
Sophos XGS-Firewalls haben keine direkte Route zum Pi (192.168.178.199). Der Salto-Server fungiert als UDP→TCP Relay.
Funktionsweise
Sophos XGS (10.128.40.1) → UDP:1514 → Salto (10.128.40.6)
→ PowerShell SyslogRelay → TCP:localhost:5514
→ SSH-Reverse-Tunnel → Pi rsyslog TCP:5514
→ /var/log/sophos/xgs.log → Promtail → Loki
Konfiguration
- Script:
C:\syslog-relay.ps1 - Scheduled Task:
SyslogRelay(Ausführung als SYSTEM, AtStartup, RestartCount=5) - Windows Firewall: Regel "Syslog UDP 1514 Inbound" (UDP, Port 1514, Any Profile, Allow)
Verwaltung
# Status prüfen
Get-ScheduledTask -TaskName SyslogRelay | Select-Object State
# Neustart
Stop-ScheduledTask SyslogRelay; Start-ScheduledTask SyslogRelay
# Test: Paket an sich selbst senden (→ landet auf Pi)
$u = New-Object System.Net.Sockets.UdpClient
$b = [System.Text.Encoding]::ASCII.GetBytes('<14>Test: Relay-Test')
$u.Send($b, $b.Length, '127.0.0.1', 1514)
$u.Close()
Erstellt: 19.02.2026 | Aktualisiert: 23.02.2026