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.
$ 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.
| Funktion | Was sie tut | Läuft auf |
|---|---|---|
| Mesh und NAT-Traversal | WireGuard-Tunnel zwischen allen Geräten, direkt, wo NAT es zulässt. | Linux, FreeBSD |
| Einladungen | Ein Code fürs LAN oder ein Link für überall. Beide Geräte zeigen vier Wörter zum Vergleichen. | Linux, FreeBSD |
| Admins und Quorum | Jede Änderung braucht k von n Admins. Braucht sie mehr, kommt sie zu deren Geräten. | Linux, FreeBSD |
| Mehrere Netze | Ein Gerät in mehreren Netzen, jedes mit eigenem Admin-Schlüssel. | Linux, FreeBSD |
| Exit-Nodes | Internetverkehr und DNS eines Geräts über ein anderes Mitglied. | Linux, FreeBSD |
| Subnet-Router | Das LAN hinter einem Mitglied, von allen anderen erreichbar. | Linux, FreeBSD |
| Namen | Jedes Mitglied als GERÄT.NETZ.juist, dazu öffentliche Namen für Mitglieder. | Linux mit systemd-resolved |
| Dienste veröffentlichen | Der Dienst eines Mitglieds, aus dem Internet per Name erreichbar, über eine Ingress. | Linux; in Arbeit |
| Relays | Wo NAT gewinnt, läuft der Verkehr über ein Mitglied mit öffentlicher Adresse. | Linux, FreeBSD |
| Frische und Entfernen | Ein entferntes Gerät erfährt es. Eins, das 48 h abgeschnitten ist, behält nur Tunnel zu Vouchern. | Linux, FreeBSD |
| Android | Ein Telefon tritt einem Netz bei und erreicht die anderen Mitglieder. | geplant |
| Zugriffsregeln | Freigabelisten 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.
- browserüberall
Fragt nach docs.example.org.
- TLSvpsIngress
Liest den Namen im TLS-ClientHello und reicht die Verbindung weiter.
- WireGuardnasZiel
Beendet TLS, mit einem Zertifikat von Let's Encrypt.
- HTTP127.0.0.1:8080Dienst
Bekommt die unverschlüsselte Verbindung.
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
relaygeben.
Ö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.