Zum Inhalt springen
wavemesh
Frühe Entwicklung: Was schon geht

Erreiche deine Geräte von überall.Über deinen Server.

Ob im Büro, zu Hause oder unterwegs: wave-mesh verbindet Laptops, Server, NAS und Cluster über WireGuard direkt miteinander, auch hinter NAT und ohne Portfreigabe. Den Koordinationsserver betreibst du selbst, und er sieht nie einen privaten Schlüssel.

Mehrere Waves gleichzeitig. Ein Gerät ist zugleich im Netz der Firma, im eigenen und in dem eines Kunden, ohne umzuschalten.
*.wave.example.comwave0
relaylaptop10.77.0.2nas10.77.0.3workstation10.77.0.4grafanaDienst im Cluster

Alle Pfade direkt. Die Geräte haben sich gegenseitig durch ihre NATs gefunden.

  • Linux
  • macOS
  • Windows
  • Kubernetes
  • iOSin Arbeit
  • Androidin Arbeit

Ein Binary für Linux, macOS und Windows, jeweils für amd64 und arm64.

Downloads

Aktuelle Releases

Wähle eine Version und lade das Archiv für dein System direkt von GitHub herunter.

In drei Schritten im Netz

Ein Wave ist ein Netz. Du startest den Server einmal, danach braucht jedes Gerät zwei Befehle.

Zur ausführlichen Anleitung
  1. Control-Server starten

    Control-Server, Relay und Postgres per Kustomize im eigenen Kubernetes-Cluster; ein einzelner Server mit k3s genügt. Der Server vergibt Adressen, Namen und Regeln.

    $ cd deployment/server/overlays/mywave
    $ kubectl apply -k .
  2. Client installieren

    Ein einzelnes Binary von der Release-Seite. install richtet Dienst und Tray-Icon ein, danach braucht der Alltag kein sudo mehr.

    $ sudo ./wave install
  3. Anmelden und verbinden

    wave login nennt deinen Server und zeigt einen Link zum Anmelden. Danach findet das Gerät alle anderen im Wave von selbst, und es kann beliebig vielen Waves beitreten.

    $ wave login https://control.example.com
    $ wave up

Was ein Wave kann

Direkt, wann immer es geht

Jedes Gerät erfährt über STUN seine öffentliche Adresse, und beide Seiten schlagen gleichzeitig ein Loch in ihr NAT. Gelingt das nicht, etwa bei symmetrischem NAT im Mobilfunk, läuft der Verkehr über ein Relay. Wird der direkte Weg frei, wechselt die Verbindung, ohne abzureißen.

Abgesichert durch Ende-zu-Ende-Tests mit echten NATs, die in jeder CI laufen.

wave status
wave0  10.77.0.2
name  laptop.wave.example.com
dns   *.wave.example.com
relay connected wss://relay.example.com

PEER         ADDRESS    PATH                                HANDSHAKE
nas          10.77.0.3  direct 192.168.1.20:41641 3ms       12s ago
workstation  10.77.0.4  via relay 61ms                      8s ago
cluster      10.77.0.9  direct 203.0.113.7:41641 18ms       31s ago
  ↳ https://grafana.wave.example.com  10.77.128.1

Mehrere Waves gleichzeitig

Ein Gerät ist in so vielen Waves, wie du brauchst, und zwar alle zugleich: im Wave der Firma, im eigenen zu Hause und in dem eines Kunden, auch an verschiedenen Control-Servern. Umschalten zwischen Netzen gibt es nicht. Jeder Wave bleibt für sich, mit eigenen Schlüsseln, eigenen Adressen und eigenen Namen, und einer kann nicht in den anderen sehen.

Überschneiden sich die Adressen zweier Waves, verweigert der Client den zweiten, statt still eine Route zu überschreiben. In den Apps für iPhone und Android (in Arbeit) trägt ein einziger Tunnel alle Waves, und jeder lässt sich einzeln pausieren.

wave status
control.example.com https://control.example.com
wave0  10.64.0.12
name  laptop.corp.example.com
dns   *.corp.example.com

PEER     ADDRESS    PATH                                HANDSHAKE
gitlab   10.64.0.3  direct 198.51.100.4:41641 9ms       5s ago
staging  10.64.0.8  direct 198.51.100.9:41641 11ms      40s ago

────────────────────────────────────────────────

wave.example.net https://wave.example.net
wave1  10.80.0.5
name  laptop.home.example.net
dns   *.home.example.net

PEER     ADDRESS    PATH                                HANDSHAKE
nas      10.80.0.3  direct 192.168.1.20:41641 2ms       12s ago

Namen unter deiner Domain

Trägt ein Wave ein DNS-Suffix, das dir gehört, heißen deine Geräte laptop.wave.example.com statt 10.77.0.5. Ein lokaler Resolver beantwortet nur die Namen des Waves, alles andere geht unverändert an dein normales DNS.

  • laptop.wave.example.comverbunden
  • nas.wave.example.comverbunden
  • workstation.wave.example.comverbunden
  • build-runner.wave.example.comvor 3 Std.
$ ssh nas.wave.example.com

Echte Zertifikate für jedes Gerät

Jedes Gerät bekommt ein Let's-Encrypt-Zertifikat auf seinen Namen. Der private Schlüssel entsteht auf dem Gerät und verlässt es nie. Erneuert wird unbeaufsichtigt, über Cloudflare, Hetzner, IONOS oder INWX. Ohne Zugangsdaten geht es auch, dann legst du den TXT-Record selbst an.

wave cert
$ wave cert

This wave answers dns-01 by hand, so laptop.wave.example.com needs a record first:

  name   _acme-challenge.laptop.wave.example.com
  type   TXT
  value  0Zq8…

Waiting... Ctrl-C is safe: `wave cert` takes the same order up again.

Zugriff als Graph

Mitglieder, Gruppen, Tags und Dienste stehen als Karten nebeneinander. Eine Regel ist ein Pfeil, die Ports hängen an der Kante. Die Seite zeigt, wer danach wen erreicht, bevor du speicherst.

Cluster und Wave in beide Richtungen

Ein gewöhnlicher Ingress mit der Klasse wave macht einen internen Dienst im Wave erreichbar und sonst nirgends. Umgekehrt erreichen Pods Geräte und Dienste des Waves über deren Namen, per HTTP und HTTPS mit TLS Ende zu Ende. Der Connector im Cluster hat keinen eingehenden Port.

Updates, signiert

Der Dienst installiert neue Versionen selbst, aber nur mit gültiger Ed25519-Signatur. Erreicht die neue Fassung keinen Server, geht er von allein zurück.

Was der Server weiß, und was nicht

wave-mesh trennt drei Ebenen strikt. Der Control-Server verteilt nur öffentliche Schlüssel, das Relay reicht nur Chiffrat weiter. Den Verkehr zwischen deinen Geräten kann keiner von beiden entschlüsseln.

EbeneKennt private Schlüssel
Control-Servernein
Relaynein
Gerätnur den eigenen

Signierte Netzkarte

Der Control-Server signiert die Netzkarte mit seinem Ed25519-Schlüssel, und Geräte übernehmen nur, was dazu passt.

Authentifizierte Discovery

Auch die Pakete, mit denen sich Geräte finden, sind verschlüsselt: X25519 und XChaCha20-Poly1305.

Anmeldung, die du kontrollierst

E-Mail und Passwort mit Argon2id und auf Wunsch einem zweiten Faktor per Authenticator-App, oder dein OpenID-Connect-Anbieter wie Pocket ID, Keycloak oder Google. Konten legt der Betreiber an, eine offene Registrierung gibt es nicht.

Was es kostet

wave-mesh steht unter der Elastic License 2.0. Selbst betreiben ist und bleibt kostenlos.

Selbst betreiben

0 €ohne Gerätelimit

Alle Funktionen, auf deiner eigenen Infrastruktur. Nutzen, ändern und im eigenen Unternehmen einsetzen ist erlaubt.

  • Control-Server und Relay
  • Clients für alle Plattformen
  • Updates über deinen Server

Betrieb durch uns

4 €pro Nutzer und Monat

Wir betreiben Control-Server und Relays für dich, du verbindest nur noch Geräte. Jährlich zahlst du 40 € statt 48 € pro Nutzer. Die Zahl der Nutzer wählst du beim Buchen und änderst sie jederzeit.

  • Control-Server und Relays von uns
  • Updates und Backups inklusive
  • Eigene Domain für deine Geräte
Abo verwalten

Installation in deiner Cloud

4.650 €einmalig

Wir installieren wave-mesh in der Cloud deines Unternehmens. Danach übernehmen wir auf Wunsch mit einem Wartungspaket Updates und Betrieb.

  • Control-Server und Relays in deiner Cloud
  • Anbindung deiner Cluster und Geräte
  • Optional: Wartungspaket für Updates und Betrieb

Angebote für Unternehmen. Alle Preise zzgl. gesetzlicher MwSt., es gelten unsere AGB. Nicht erlaubt ist nur, wave-mesh Dritten als gehosteten oder verwalteten Dienst anzubieten.

Roadmap

Alles unter „Verfügbar“ steckt in den stabilen Releases. „Als Nächstes“ ist in Arbeit oder geplant; was neu dazukommt, steht im Changelog.

Changelog lesen

Verfügbar

  • Direkte Verbindung durch NAT
  • Relay, wenn Punching scheitert
  • Namen unter eigener Domain
  • Let's-Encrypt-Zertifikate
  • Dienste aus dem Kubernetes-Cluster
  • Aus dem Cluster in den Wave
  • Anmeldung per OpenID Connect und zweitem Faktor
  • Zugriffsregeln und Audit-Log
  • Signierte Selbstaktualisierung
  • Signierte und notarisierte macOS-Clients

Als Nächstes

  • Apps für iOS und AndroidKern fertig, Apps in Arbeit
  • Subnetz-Router und Exit-Nodes
  • Dienste aus dem Wave im offenen Netz

Häufige Fragen

Was ist anders als bei einem gehosteten Mesh-VPN?

Der Koordinationsserver gehört dir: Er läuft auf deiner Infrastruktur, nicht bei einem Anbieter. Deine Geräte tragen Namen unter deiner eigenen Domain, und jedes bekommt ein öffentlich gültiges Zertifikat.

Wie schnell ist es?

Der Datenpfad läuft heute im Userspace. Realistisch sind 100 bis 300 Mbit/s je Gerät. Ein schnellerer Pfad über Kernel-WireGuard ist geplant, aber noch nicht gebaut.

Brauche ich eine eigene Domain?

Nein. Ohne Domain heißen deine Geräte unter .internal und sind trotzdem per Namen erreichbar. Öffentlich gültige Zertifikate gibt es nur mit einer Domain, die dir gehört.

Was darf ich mit der Lizenz?

Nutzen, verändern und weitergeben, auch im eigenen Unternehmen. Nicht erlaubt ist, wave-mesh Dritten als gehosteten oder verwalteten Dienst anzubieten.

Was brauche ich auf dem Server?

Einen Kubernetes-Cluster; ein einzelner Server mit k3s genügt. Control-Server, Relay und Postgres kommen als fertige Images und werden per Kustomize eingerichtet. Nach außen braucht es HTTPS und UDP 3478 für STUN.

Bring deine Geräte zusammen.

Ein Server, ein Binary je Gerät, und alles spricht direkt miteinander.