Ein Mesh-VPN ohne Koordinationsserver

WireGuard trägt den Verkehr. Wer zum Netz gehört, steht in einem Log, das deine Admins signieren, und jedes Gerät prüft dieses Log selbst.

make install
Kein Server in der Mitte
Geräte finden sich im LAN, übereinander oder über den öffentlichen BitTorrent-DHT. Sie kommen durch NAT; wo das nicht geht, nehmen sie ein Relay, das eines deiner eigenen Geräte betreibt.
Änderungen brauchen deine Admins
Ein Gerät aufzunehmen oder zu entfernen braucht ein Quorum von Admins, jeder mit einem Schlüssel auf eigenen Geräten. Die Schlüssel bleiben im Keystore, der Daemon hält sie nie.
Fail-closed
Ein Gerät, für das seit 48 Stunden kein Voucher gebürgt hat, behält nur noch Tunnel zu Vouchern. So kann es ein entferntes Gerät nicht weiter mitnehmen.

Das erste Netz

Auf dem ersten Gerät legt juist create ein Netz an, und juist invite gibt einen Code fürs LAN und einen Link für überall sonst aus. Das neue Gerät tritt mit einem von beiden bei. Danach zeigen beide Geräte vier Wörter, und erst wenn du sie verglichen hast, nimmt die Einladung das Gerät auf.

laptop
$ juist create home
created network "home"
$ juist invite
invite to "home", expires in 1h; on the new device:

  juist join 42-drumbeat-tolerance-glucose  # same LAN

  juist join 'juist:Kx7q…@192.168.1.20:41642'

nas wants to join; compare with the words it shows:
  atlas-amulet-banjo-asteroid
same? [y/N] y
admitting nas (nid:fcRW83T_…)
admitted nas at 198.18.36.2
nas joined

Funktionen

Für Netze mit 25 bis 100 Geräten und wenigen Admins.

FunktionWas sie tutLäuft auf
Mesh und NAT-TraversalWireGuard-Tunnel zwischen allen Geräten, direkt, wo NAT es zulässt.Linux, FreeBSD
EinladungenEin Code fürs LAN oder ein Link für überall. Beide Geräte zeigen vier Wörter zum Vergleichen.Linux, FreeBSD
Admins und QuorumJede Änderung braucht k von n Admins. Braucht sie mehr, kommt sie zu deren Geräten.Linux, FreeBSD
Mehrere NetzeEin Gerät in mehreren Netzen, jedes mit eigenem Admin-Schlüssel.Linux, FreeBSD
Exit-NodesInternetverkehr und DNS eines Geräts über ein anderes Mitglied.Linux, FreeBSD
Subnet-RouterDas LAN hinter einem Mitglied, von allen anderen erreichbar.Linux, FreeBSD
NamenJedes Mitglied als GERÄT.NETZ.juist, dazu öffentliche Namen für Mitglieder.Linux mit systemd-resolved
Dienste veröffentlichenDer Dienst eines Mitglieds, aus dem Internet per Name erreichbar, über eine Ingress.Linux; in Arbeit
RelaysWo NAT gewinnt, läuft der Verkehr über ein Mitglied mit öffentlicher Adresse.Linux, FreeBSD
Frische und EntfernenEin entferntes Gerät erfährt es. Eins, das 48 h abgeschnitten ist, behält nur Tunnel zu Vouchern.Linux, FreeBSD
AndroidEin Telefon tritt einem Netz bei und erreicht die anderen Mitglieder.geplant
ZugriffsregelnFreigabelisten pro Gerät, vom Quorum signiert. Bis dahin erreicht jedes Mitglied jeden Port.nach v1

Dienste veröffentlichen

Der Dienst eines Mitglieds, etwa eines NAS zu Hause, lässt sich aus dem Internet per Name erreichen. Ein Gerät mit öffentlicher Adresse, die Ingress, liest den Namen, den der Client verlangt, und reicht die Verbindung durch den Tunnel weiter. TLS endet beim Mitglied, die Ingress sieht den Inhalt also nie.

  1. browserüberall

    Fragt nach docs.example.org.

  2. TLSvpsIngress

    Liest den Namen im TLS-ClientHello und reicht die Verbindung weiter.

  3. WireGuardnasZiel

    Beendet TLS, mit einem Zertifikat von Let's Encrypt.

  4. HTTP127.0.0.1:8080Dienst

    Bekommt die unverschlüsselte Verbindung.

Die Ingress sieht den Namen, die Adresse des Clients, Größen und Zeitpunkte, nicht den Inhalt.

Wie du das einrichtest, steht im Handbuch.

Trade-offs

Ohne Server in der Mitte ist manches schwächer als mit einem. Jeder Eintrag sagt, was passieren kann, warum juist das in Kauf nimmt und was du ändern kannst. Alle stehen in 02-threat-model.md.

Mitgliedschaft

Entfernen wirkt nicht überall sofort

juist admins vouchers M

Was passiert
Ein vom Netz abgeschnittenes Gerät behält Tunnel zu einem entfernten Gerät, bis es von der Entfernung erfährt.
Warum akzeptiert
Es gibt keinen Server, den jedes Gerät fragen könnte. Die Frische begrenzt das: Ein Gerät, für das 48 h kein Voucher gebürgt hat, behält nur noch Tunnel zu Vouchern.
Was du tun kannst
M Voucher verlangen, damit die Grenze gegen M − 1 unehrliche hält.

Ein verlorenes Quorum ist endgültig

mehr Admins, als das Quorum braucht

Was passiert
Bleiben weniger als k Admin-Schlüssel, lässt sich nie wieder eine Änderung signieren.
Warum akzeptiert
Ein Weg am Quorum vorbei wäre auch einer für Angreifer. Eine Notfall-Wiederherstellung aus Geheimnissen vom Anfang des Netzes ist geplant.
Was du tun kannst
Dem Netz mehr Admins geben, als das Quorum braucht, jeden auf eigenen Geräten.

Erreichbarkeit

Symmetrisches NAT überall braucht ein Relay

juist grant vps relay

Was passiert
Sitzt jedes Gerät hinter symmetrischem NAT, entsteht kein direkter Tunnel.
Warum akzeptiert
Das Relay ist eines deiner eigenen Mitglieder und sieht nur WireGuard-Chiffretext.
Was du tun kannst
Einem Gerät mit öffentlicher Adresse die Rolle relay geben.

Öffentliche Helfer sehen Adressen

--no-dht --no-stun

Was passiert
Der öffentliche BitTorrent-DHT und STUN-Server sehen die Adressen, die sie nutzen.
Warum akzeptiert
Nichts, was sie liefern, wird vertraut. Ein kompromittierter Helfer kann Verbindungen verzögern, aber nicht ändern, wer zum Netz gehört.
Was du tun kannst
juistd ohne sie betreiben und Geräten Adressen geben, die sie erreichen.

Kryptographie

Tunnelverkehr ist noch nicht post-quanten-sicher

nach v1

Was passiert
Aufgezeichneter WireGuard-Verkehr könnte von einem künftigen Quantencomputer entschlüsselt werden.
Warum akzeptiert
Gruppengeheimnisse sind schon hybrid, X25519 + ML-KEM-768. Ein ML-KEM-Preshared-Key pro Paar für WireGuard ist nach v1 geplant.
Was du tun kannst
Noch nichts. Verlass dich bei Verkehr, der Jahrzehnte geheim bleiben muss, nicht auf juist.