2025-02-15
Karim Ouazmir

Hacking WireGuard: 25 KB Metriken in benutzerdefiniertem Nachrichtentyp 5

Wie wir das WireGuard-Protokoll missbraucht haben, um reichhaltige Gerätetelemetrie zu übertragen, ohne eine separate TCP-Verbindung zu öffnen.

Das Problem mit Sidecars

Die meisten Fernverwaltungsagenten funktionieren so:

  1. Steuerkanal: TCP/WebSocket.
  2. Datenkanal: Ein separater Stream.
  3. Tunnel: VPN (WireGuard/OpenVPN).

Das ist aufgebläht. Wir wollten eine Verbindung.

WireGuard Nachrichtentypen

WireGuard tauscht wenige Nachrichtentypen aus (Typ 1-4). Was wäre, wenn wir Typ 5 hinzufügen würden?

Das benutzerdefinierte "Wantasticd"-Protokoll

Wir haben WireGuard in wantasticd modifiziert, um Typ 5 (Telemetrie) zu unterstützen.

Anstatt einen separaten HTTP/gRPC-Stream zu öffnen, packt der Agent diese Daten direkt in den WireGuard UDP-Stream.

Komprimierungs-Magie

Wir verwenden Zstandard (zstd), um ~25 KB Rohdaten (Schnittstellen, WiFi-Scan, LTE-Signale) auf ~1,2 KB zu komprimieren.

Warum das wichtig ist

  1. Kein Overhead: Keine Keep-Alive-TCP-Pakete.
  2. Atomarer Zustand: Wenn der Tunnel steht, fließen die Metriken.
  3. Skalierbarkeit: Millionen von Paketen pro Sekunde mit minimaler CPU-Last.

Metriken live sehen

Hacking WireGuard: 25 KB Metriken in benutzerdefiniertem Nachrichtentyp 5 | Wantastic Blog | Wantastic