Geräte einladen
Mit einer Einladung tritt genau ein neues Gerät dem Netz bei. Du startest sie auf dem Gerät eines Admins, und das neue Gerät tritt mit dem Code oder dem Link bei, den sie ausgibt.
Worum es geht
Eine Einladung ist ein kurzlebiges Geheimnis, mit dem ein neues Gerät dem
Netz beitritt. juist invite gibt sie in zwei Formen aus, als Code und als
Link, und wartet. Das neue Gerät ruft sudo juist join mit einem davon auf.
Einladen kann nur das Gerät eines Admins, denn ein Gerät aufzunehmen ist eine Änderung am Netz, die ein Admin signiert. Ein Admin ist ein Mensch mit einem Schlüssel, der Änderungen signiert; siehe So funktioniert juist.
Bevor irgendetwas signiert wird, zeigen beide Geräte vier Wörter, und du vergleichst sie. Daran erkennst du, dass das fragende Gerät das eingeladene ist.
Code oder Link
| Code | Link | |
|---|---|---|
| Sieht so aus | 42-drumbeat-tolerance-glucose | 'juist:Kx7…@192.168.1.20:41642' |
| Funktioniert | nur im selben LAN | überall |
| Ein falscher Versuch | macht den Code ungültig | macht nichts ungültig |
Der Code besteht aus einer Zahl und drei Wörtern, kurz genug zum Vorlesen
oder Abtippen. Die Zahl unterscheidet Einladungen voneinander und ist nicht
geheim; die drei Wörter sind es. Das neue Gerät findet das einladende, indem
es im LAN fragt. Das einladende Gerät nimmt es auf TCP-Port 41642 an, den eine
Firewall dort vielleicht hereinlassen muss; juist invite gibt dann den
Befehl aus, der ihn öffnet, etwa
hint: the firewall may block the device: sudo ufw allow 41642/tcp.
Der Code erlaubt genau einen Versuch. Nach einem falschen meldet das
einladende Gerät warning: code voided: wrong guess from … und lehnt auch den
richtigen Code ab. Der Link funktioniert dann weiter.
Der Link enthält ein 128-Bit-Geheimnis, die Adressen des einladenden Geräts und den Schlüssel des einladenden Admins, der das neue Gerät an dessen Signatur bindet. Kopiere ihn vollständig, mit den Anführungszeichen, denn er enthält Zeichen, die eine Shell sonst verändern würde.
Beide enden, wenn ein Gerät beitritt oder die Einladung abläuft. Eine
Einladung gilt eine Stunde, außer du gibst --expires an, etwa
--expires 2h; am längsten geht 7d.
Ein Gerät einladen
Die Einladung starten. Gib dem neuen Gerät hier einen Namen, wenn es nicht seinen eigenen behalten soll:
juist invite nasOhne Namen behält das Gerät seinen Rechnernamen. Einen Namen, den schon ein anderes Mitglied trägt, ergänzt juist um eine Zahl.
Im selben LAN mit dem Code beitreten, von überall sonst mit dem Link:
sudo juist join 42-drumbeat-tolerance-glucoseDas neue Gerät zeigt vier Wörter: tell the inviting admin these words:.
Vergleiche sie mit den Wörtern, die die Einladung zeigt, und antworte:
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
Die vier Wörter
Die Wörter decken die Identität des neuen Geräts und jeden seiner Schlüssel ab. Hat sich ein anderes Gerät dazwischengeschaltet, zeigt es andere Wörter. Jede Seite legt ihren Teil der Wörter fest, bevor sie den der anderen kennt; ein Gerät dazwischen kann deshalb nicht nach passenden Wörtern suchen.
Sind die Wörter verschieden, antworte mit n. Die Einladung signiert dann
nichts: juist: words not confirmed; nothing signed. Starte eine neue
Einladung und finde heraus, welches Gerät gefragt hat.
juist invite --yes nimmt auf, ohne zu vergleichen. Nimm das nur, wo du
ohnehin nicht vergleichen könntest, etwa in einem Skript, denn damit fällt
diese Prüfung weg.
Mit einer Rolle einladen
Eine Rolle gibt einem Gerät eine zusätzliche Aufgabe im Netz. Eine Einladung kann das neue Gerät gleich mit einer aufnehmen:
| Option | Das neue Gerät wird |
|---|---|
--relay | ein Relay, das Verkehr für Geräte weiterleitet, die sich nicht erreichen (Relays) |
--voucher | ein Voucher, der stündlich bestätigt, dass der Stand des Netzes aktuell ist (Frische) |
--ingress | eine Ingress, die Verbindungen aus dem Internet für veröffentlichte Namen annimmt (Dienste veröffentlichen) |
Für einen VPS, der die Ingress des Netzes werden soll:
$ juist invite vps --ingress
invite to "home" as ingress, expires in 1h; on the new device:
Eine Ingress kann kein Voucher sein, --ingress und --voucher gehen also
nicht zusammen. Andere Rollen, etwa exit, gibst du nach dem Beitritt mit
juist grant.
Über NAT hinweg
Der Link funktioniert, wenn beide Geräte an verschiedenen Orten hinter NAT
stehen. Das neue Gerät versucht zuerst die Adressen im Link. Erreicht es sie
nicht, treffen sich beide über den öffentlichen BitTorrent-DHT, und das neue
Gerät meldet no direct answer; meeting through the DHT (up to a minute). Die
meiste Zeit davon braucht der Beitritt zum DHT.
Hat das Netz ein Relay, wartet eine Einladung auf einem Gerät hinter NAT auch
dort, und der Link nennt es. juist invite meldet dann
meets through relay 203.0.113.7:41645 where this device is unreachable. Das
Geheimnis der Einladung erreicht das Relay nie.
Das Treffen scheitert, wenn beide NATs symmetrisch sind, also für jedes Ziel einen neuen Port wählen. Dann hast du zwei Wege:
- über einen Internetanschluss beitreten, der das einladende Gerät erreicht;
- dem Netz zuerst ein Relay geben und dann neu einladen.
Gut zu wissen
- Eine Einladung nimmt ein Gerät auf. Für das nächste rufst du
juist invitenoch einmal auf. --no-langibt keinen Code aus, nur den Link.--no-dhthält die Einladung vom öffentlichen DHT fern.--portwählt einen anderen TCP-Port als 41642.sudo juist joinmacht den Benutzer, der sudo aufgerufen hat, zum Operator des Geräts, dem lokalen Benutzer, der es ohne sudo verwaltet, außer--operatornennt einen anderen.--namegibt den Namen an, unter dem das Gerät beitritt.- Braucht das Netz die Stimmen mehrerer Admins, wartet die Einladung auf die
anderen, und das neue Gerät zeigt
waiting for approval (1 of 2 votes). Die Wartezeit zählt zur Laufzeit der Einladung. - Auf einem Gerät in mehreren Netzen sagst du, welches gemeint ist:
juist invite work.
Wenn etwas nicht klappt
| Was du siehst | Was zu tun ist |
|---|---|
juist: no admin key of this network here | Vom Gerät eines Admins einladen. |
warning: code not announced on the LAN (…); use the link | Mit dem Link beitreten. |
warning: code voided: … | Mit dem Link beitreten. War das nicht dein Gerät, kennt jemand anderes die Einladung. |
juist: invite expired | Eine neue Einladung starten, mit längerem --expires, wenn auf andere Admins gewartet wurde. |
juist: cannot reach the inviting device, … | Prüfen, ob die Einladung noch läuft. Stehen beide Geräte hinter NAT, über einen Internetanschluss beitreten, der das einladende Gerät erreicht, oder zuerst ein Relay einrichten. |
juist: comparing the device's words needs a terminal; pass --yes to skip | juist invite in einem Terminal aufrufen, oder --yes angeben, wo du nicht vergleichen kannst. |