So funktioniert juist
juist verbindet deine Geräte zu einem privaten Netz, ohne Server in der Mitte. Diese Seite erklärt die wenigen Ideen, auf denen alle anderen Seiten aufbauen.
Das Netz und seine Geräte
Ein Netz ist eine Gruppe deiner Geräte, die sich über verschlüsselte Tunnel erreichen, wo immer sie gerade sind: ein Laptop, ein NAS zu Hause, ein VPS.
Jedes Gerät in einem Netz ist ein Mitglied. Du legst ein Netz auf einem
Gerät mit juist create an und holst die anderen mit einer
Einladung dazu. Ein Netz hat einen Namen, etwa
home. Gibst du keinen an, wählt juist zwei zufällige Wörter, etwa
belfast-hazardous.
Ein Gerät kann in mehreren Netzen zugleich sein, zum Beispiel in einem für zu Hause und einem für die Arbeit. Siehe Mehrere Netze.
Zwei Programme: juist und juistd
juist besteht aus zwei Programmen.
juistd ist der Daemon. Er läuft auf jedem Gerät im Hintergrund, hält die
eigenen Schlüssel des Geräts und seine Kopie des Logs und hält die Tunnel
aufrecht. Unter Linux startet ihn das Paket gleich bei der Installation; er
wartet dann, bis du ein Netz anlegst oder einem beitrittst.
juist ist der Befehl, den du eintippst. Er gibt juistd Aufträge, und er
hält deine Admin-Schlüssel, wenn du Admin bist.
juist status darf jeder lokale Benutzer aufrufen. Alle anderen Befehle sind
für root und für den Operator des Geräts: einen lokalen Benutzer, den
juist set --operator festlegt und der das Gerät dann ohne sudo verwaltet.
Siehe Der Operator.
Das Mitgliederlog
Wer zum Netz gehört, steht im Mitgliederlog: einer Liste signierter Änderungen, etwa „nas aufnehmen“ oder „phone entfernen“. Jede Änderung ist an die vorige gekettet, deshalb kann niemand die Geschichte unbemerkt umschreiben oder umsortieren.
Jedes Gerät hält eine Kopie des Logs und prüft jede Änderung selbst. Es vertraut weder dem Gerät, das die Änderung geschickt hat, noch dem Weg, auf dem sie kam. Eine Änderung zählt erst, wenn genug Admins sie signiert haben.
juist log listet die Änderungen und zu jeder, wer sie bestätigt hat.
Admins und das Quorum
Ein Admin ist ein Mensch, der das Netz ändern darf: Geräte aufnehmen oder
entfernen, Rollen geben, das Netz umbenennen. Wer juist create aufruft, ist
sein erster Admin.
Ein Admin signiert Änderungen mit einem Admin-Schlüssel. Die Schlüssel liegen
im Keystore des Admins, ~/.config/juist in seinem Home-Verzeichnis, und zwar
auf jedem Rechner, von dem aus er bestätigt. juistd hält sie nie. Ein
Schlüssel verlässt den Rechner nicht, auf dem er entstanden ist. Wer zwei
Laptops hat, hat also auf jedem einen.
Das Quorum sagt, wie viele Admin-Stimmen eine Änderung braucht.
Voreingestellt ist 1, ein Admin entscheidet also allein. Nach
juist admins quorum 2 braucht jede Änderung zwei Stimmen, zum Beispiel von
zwei Menschen. Eine Änderung, der Stimmen fehlen, wartet, bis die anderen
Admins sie mit juist approve bestätigen. Siehe
Admins.
Rollen
Jedes Mitglied erreicht jedes andere. Eine Rolle gibt einem Gerät eine
zusätzliche Aufgabe. Ein Admin gibt sie mit juist grant DEVICE ROLE und
entzieht sie mit juist revoke.
| Rolle | Was das Gerät tut |
|---|---|
voucher | Bestätigt stündlich, dass der Stand des Netzes aktuell ist, damit abgeschnittene Geräte es merken. Siehe Frische weiter unten. |
relay | Leitet Verkehr zwischen Geräten weiter, die sich nicht direkt erreichen. Siehe Relays. |
exit | Trägt den Internetverkehr anderer Geräte, sobald sein Operator zustimmt. Siehe Exit-Nodes. |
ingress | Nimmt Verbindungen aus dem Internet für die Namen an, die Geräte veröffentlichen. Siehe Dienste veröffentlichen. |
service | Ein Dienst-Mitglied: ein eigener juistd neben einem veröffentlichten Dienst. Jedes Gerät hindert es daran, Verbindungen aufzubauen. Siehe Dienste veröffentlichen. |
Admin ist keine Rolle eines Geräts. Ein Admin ist ein Mensch mit Schlüsseln, und ein Voucher ist ein Gerät, das keinen Admin-Schlüssel hält.
Ein Gerät kann außerdem das LAN hinter sich für die anderen Mitglieder
routen. Das legt juist subnet add fest, nicht eine Rolle. Siehe
Subnet-Router.
Wie Geräte einander finden
Bevor zwei Geräte sich verbinden, muss jedes wissen, wo das andere ist. Es gibt keinen Server, den sie fragen könnten, also sucht juist an drei Stellen:
- im LAN, in dem sich die Geräte melden;
- über andere Mitglieder, die weitergeben, wo sie ein Gerät zuletzt erreicht haben;
- über den öffentlichen BitTorrent-DHT, ein großes öffentliches Verzeichnis im Internet, wenn ein Gerät ein Mitglied aus den Augen verloren hat.
Was Geräte im DHT ablegen, ist verschlüsselt. Der DHT sieht Adressen, nie Inhalte, und nichts, was er liefert, kann ändern, wer zum Netz gehört.
Wie Geräte sich verbinden
Verkehr zwischen zwei Mitgliedern läuft durch einen WireGuard-Tunnel. WireGuard ist das VPN-Protokoll, das ihn verschlüsselt, durchgehend von einem Gerät zum anderen.
Die meisten Geräte stehen hinter einem Router mit NAT, der Verbindungen von außen abhält. juist kommt durch dieses NAT hindurch, sodass sich die beiden Geräte direkt verbinden. Um seine eigene öffentliche Adresse zu erfahren, fragt juistd dafür in der Voreinstellung öffentliche STUN-Server.
Erreichen sich zwei Geräte nicht direkt, gehen sie über ein Mitglied, dem das
Netz die Rolle relay gegeben hat, nie über einen Dritten. Das Relay sieht
nur verschlüsselten WireGuard-Verkehr.
Hinter NAT musst du in keiner Firewall etwas öffnen. Ein Gerät mit öffentlicher Adresse braucht 41643/udp offen. Die übrigen Ports stehen auf der Seite Relays.
Adressen im Netz
Jedes Mitglied hat zwei Adressen im Netz, und juist devices zeigt sie.
- Eine IPv4-Adresse, etwa
198.18.36.2.juist createwählt einen zufälligen Block in198.18.0.0/15, etwa198.18.36.0/22. Das erste Gerät bekommt die erste Adresse, jedes danach aufgenommene die nächste freie. Admins können diese Adressen mitjuist network renumberverschieben. - Eine IPv6-Adresse, etwa
fd84:7a1f:97ee:21a8:2ab0:e8e:caa0:b306, die sich aus dem Identitätsschlüssel des Geräts ergibt. Das Umnummerieren verschiebt sie nicht; das tut nurjuist rotate identity.
Namen
Wo systemd-resolved läuft, ist jedes Mitglied unter DEVICE.NETWORK.juist
erreichbar, etwa laptop.home.juist, oder einfach als laptop:
ssh laptop.home.juistAdmins können auch öffentliche Namen wie mail.example.org auf Mitglieder
zeigen lassen. Siehe Namen.
Frische und Voucher
Entfernt ein Admin ein Gerät, baut jedes Mitglied seinen Tunnel zu diesem Gerät ab, sobald es davon hört. Ein Mitglied, das vom Rest abgeschnitten ist, hört davon vielleicht nichts und spricht weiter mit dem entfernten Gerät.
Die Frische begrenzt das. Jede Stunde signiert jeder Voucher eine kurze Aussage darüber, wie das Netz in diesem Moment aussah. Ein Mitglied mit einer solchen Aussage aus den letzten 48 Stunden ist frisch. Eines ohne ist abgelaufen: Es behält nur noch Tunnel zu Vouchern, bis es wieder von einem hört. Ein entferntes Gerät kann so höchstens 48 Stunden mitgenommen werden.
Daraus folgt dreierlei:
- Halte mindestens einen Voucher online. Das Gerät, das das Netz angelegt hat, ist sein erster Voucher. Sind alle Voucher länger als 48 Stunden offline, haben alle anderen Mitglieder nur noch Tunnel zu Vouchern.
- Mit einem Voucher vertraust du darauf, dass er ehrlich ist. Nach
juist admins vouchers 2ist ein Mitglied nur mit Aussagen von zwei Vouchern frisch, ein lügender Voucher reicht dann nicht. - Ein Netz ohne Voucher prüft die Frische gar nicht.
juist status zeigt den Stand in der Zeile Freshness, zum Beispiel
vouched just now, valid 48h oder expired; vouchers only.
Begriffe
| Begriff | Bedeutung |
|---|---|
| Netz | Deine Geräte, die sich über juist erreichen, unter einem Namen |
| Mitglied | Ein Gerät im Netz |
| juistd | Der Daemon auf jedem Gerät; hält die Schlüssel und das Log des Geräts |
| juist | Der Befehl, den du eintippst |
| Operator | Der eine lokale Benutzer, der ein Gerät ohne sudo verwalten darf |
| Mitgliederlog | Die signierte Liste aller Änderungen am Netz, von jedem Gerät geprüft |
| Änderung | Ein Eintrag im Log, etwa das Aufnehmen oder Entfernen eines Geräts |
| Admin | Ein Mensch, der Änderungen signieren darf |
| Admin-Schlüssel | Der Signierschlüssel eines Admins, im Keystore auf einem Rechner |
| Keystore | ~/.config/juist, wo deine Admin-Schlüssel liegen |
| Quorum | Wie viele Admin-Stimmen eine Änderung braucht |
| Rolle | Eine zusätzliche Aufgabe für ein Gerät: Voucher, Relay, Exit, Ingress oder Service |
| Einladung | Ein Code oder Link, mit dem ein neues Gerät beitritt |
| Frische | Ob ein Gerät in den letzten 48 Stunden von einem Voucher gehört hat |
| Voucher | Ein Gerät, das stündlich bestätigt, dass der Stand des Netzes aktuell ist |
| Relay | Ein Mitglied, das Verkehr zwischen Mitgliedern weiterleitet, die sich nicht erreichen |