Mehrere Netze

Ein Gerät kann gleichzeitig in mehr als einem Netz sein, etwa in einem Netz für zu Hause und einem für die Arbeit. Jedes Netz läuft neben den anderen, mit eigenem Daemon, eigener Adresse und eigenen Schlüsseln.

Worum es geht

Dein Laptop gehört vielleicht zu deinem Netz zu Hause und zum Netz deines Teams. Die beiden haben verschiedene Admins, verschiedene Geräte und verschiedene Regeln. juist hält sie auf dem Laptop getrennt: Jedes Netz hat seine eigene juistd. juistd ist der Daemon, der Dienst im Hintergrund, der die Tunnel hält (So funktioniert juist).

Das erste Netz läuft in juistd.service. Jedes weitere läuft in einer nummerierten Instanz daneben: juistd@juist1, juistd@juist2 und so weiter. Jede hat ihr eigenes Netzwerkgerät (juist0, juist1, …), ihr eigenes Zustandsverzeichnis und ihre eigenen Ports.

Einem zweiten Netz beitreten oder eines anlegen

1auf laptop, einem Gerät, das schon in home ist

Mit dem Link aus der Einladung dem anderen Netz beitreten, wie beim ersten:

sudo juist join 'juist:…'

Das neue Netz, etwa work, läuft neben home. juist create work geht genauso für ein eigenes Netz. Ohne sudo fragt juist einmal nach sudo, um die neue juistd zu starten.

2auf laptop

Beide prüfen:

juist status
juist devices

juist status zeigt beide Netze nacheinander, jedes mit seiner juistd als Überschrift. juist devices listet die Geräte aller Netze.

juist sagen, welches Netz gemeint ist

Ein Befehl, der ein Netz betrifft, nimmt es als erstes Argument, mit seinem Namen oder dem Namen seiner juistd:

juist devices work                      # mit Namen
juist devices juist1                    # mit juistd
juist invite work                       # bei mehreren Netzen sagen, welches
juist network renumber work 10.7.0.0/24

Ist das Gerät nur in einem Netz, kannst du den Namen weglassen.

--network NAME tut dasselbe für jeden Befehl, ebenso die Umgebungsvariable $JUIST_NETWORK.

Die Übersichten status, devices, network und admins zeigen alle Netze, wenn du keines nennst. Jeder andere Befehl hält an, statt zu fragen, welches Netz du meinst, und nennt sie:

$ juist invite
juist: this device is in 2 networks: home (juist0), work (juist1)
hint: name one first: juist invite home [NAME]

Ist das eigene Argument eines Befehls optional, kommt der Name des Netzes zuerst. Um ein Gerät namens home ins Netz home einzuladen, führst du juist invite home home aus.

Überlappende Adressbereiche

Zwei Netze dürfen IPv4-Bereiche haben, die sich überschneiden. Beide laufen trotzdem auf einem Gerät: das in der höher nummerierten juistd nur über IPv6. juist status sagt das, und welches du umnummerieren sollst:

$ juist status
…
warning: no IPv4 on this host: "home" (juist0) holds 198.18.36.2, which "work" claims too (198.18.36.0/22)
hint: renumber one of the two networks: juist network renumber juist1 PREFIX, or the other

Sobald eines der beiden umnummeriert ist, kommt IPv4 von selbst zurück.

Jedes Netz hat seinen eigenen Admin-Schlüssel

Ein Admin-Schlüssel ist der Schlüssel, mit dem ein Admin Änderungen signiert. Jedes Netz bekommt einen eigenen, etwa admins/alice@home.key und admins/alice@work.key. Ein verlorener oder gestohlener Schlüssel kostet dann nur ein Netz. Soll ein neues Netz mit einem Schlüssel verwaltet werden, den du schon hast, sag es: juist create lab --admin-key alice@home. Mehr dazu steht unter Mehrere Admins.

Ein Netz verlassen

juist reset work --force

Damit verlässt das Gerät work, und dessen juistd wird entfernt. home bleibt, wie es ist, mit seinen Schlüsseln. --force ist nötig, solange work dieses Gerät noch führt; entferne das Gerät dort vorher, wo es geht (Schlüssel).

Gut zu wissen

  • Ein Host betreibt höchstens zehn juistds: juistd.service und juistd@juist1 bis juistd@juist9.
  • Die Ports der n-ten juistd sind die der ersten plus 10·n: 41653/udp für juistd@juist1, und der Log-Abgleich auf TCP 41654 an juist1. Die Firewall-Profile der Pakete nennen die Ports des ersten Netzes; juist status nennt die der anderen (Relays, Ports und Firewalls).
  • Läuft die juistd des zweiten Netzes nicht, startest du sie mit sudo systemctl enable --now juistd@juist1; journalctl -u juistd@juist1 zeigt ihr Log.
  • Unter FreeBSD stehen die Instanzen der weiteren Netze in der rc.conf-Variable juistd_instances, und service juistd start juist1 startet eine.
  • Ein Gerät kann nur einmal im selben Netz sein. Eine Einladung sagt nicht, für welches Netz sie ist, deshalb wird ein zweiter Beitritt erst einmal aufgenommen. Die neue juistd lehnt das Netz dann ab und sagt, welche Aufnahme ein Admin entfernen soll.
  • Ein Gerät in mehreren Netzen schickt seinen Internetverkehr nur über einen Exit-Node eines Netzes.
  • Alle juistds laufen als derselbe Benutzer, juist. Wer eine übernimmt, hat die Geräteschlüssel aller Netze auf dem Host.
  • Die Mitglieder eines Netzes können die Adressen erfahren, die dieser Host in seinen anderen Netzen hat, und damit, in welchen Bereichen er ist.