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:
- Steuerkanal: TCP/WebSocket.
- Datenkanal: Ein separater Stream.
- 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
- Kein Overhead: Keine Keep-Alive-TCP-Pakete.
- Atomarer Zustand: Wenn der Tunnel steht, fließen die Metriken.
- Skalierbarkeit: Millionen von Paketen pro Sekunde mit minimaler CPU-Last.