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.

RolleWas das Gerät tut
voucherBestätigt stündlich, dass der Stand des Netzes aktuell ist, damit abgeschnittene Geräte es merken. Siehe Frische weiter unten.
relayLeitet Verkehr zwischen Geräten weiter, die sich nicht direkt erreichen. Siehe Relays.
exitTrägt den Internetverkehr anderer Geräte, sobald sein Operator zustimmt. Siehe Exit-Nodes.
ingressNimmt Verbindungen aus dem Internet für die Namen an, die Geräte veröffentlichen. Siehe Dienste veröffentlichen.
serviceEin 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 create wählt einen zufälligen Block in 198.18.0.0/15, etwa 198.18.36.0/22. Das erste Gerät bekommt die erste Adresse, jedes danach aufgenommene die nächste freie. Admins können diese Adressen mit juist network renumber verschieben.
  • 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 nur juist 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.juist

Admins 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 2 ist 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

BegriffBedeutung
NetzDeine Geräte, die sich über juist erreichen, unter einem Namen
MitgliedEin Gerät im Netz
juistdDer Daemon auf jedem Gerät; hält die Schlüssel und das Log des Geräts
juistDer Befehl, den du eintippst
OperatorDer eine lokale Benutzer, der ein Gerät ohne sudo verwalten darf
MitgliederlogDie signierte Liste aller Änderungen am Netz, von jedem Gerät geprüft
ÄnderungEin Eintrag im Log, etwa das Aufnehmen oder Entfernen eines Geräts
AdminEin Mensch, der Änderungen signieren darf
Admin-SchlüsselDer Signierschlüssel eines Admins, im Keystore auf einem Rechner
Keystore~/.config/juist, wo deine Admin-Schlüssel liegen
QuorumWie viele Admin-Stimmen eine Änderung braucht
RolleEine zusätzliche Aufgabe für ein Gerät: Voucher, Relay, Exit, Ingress oder Service
EinladungEin Code oder Link, mit dem ein neues Gerät beitritt
FrischeOb ein Gerät in den letzten 48 Stunden von einem Voucher gehört hat
VoucherEin Gerät, das stündlich bestätigt, dass der Stand des Netzes aktuell ist
RelayEin Mitglied, das Verkehr zwischen Mitgliedern weiterleitet, die sich nicht erreichen