Relays, Ports und Firewalls

Können sich zwei Geräte nicht direkt erreichen, reicht ein Mitglied deines eigenen Netzes ihren Verkehr weiter. Diese Seite nennt auch die Ports, die juist nutzt, und was wo zu öffnen ist.

Worum es geht

Die meisten Geräte stehen hinter einem Router mit NAT: Sie teilen sich eine öffentliche Adresse und sind von außen nicht erreichbar. juist bekommt meist trotzdem einen direkten Tunnel hin. Das scheitert nur, wenn beide Geräte hinter symmetrischem NAT stehen, einer strengeren Art, die manche Router machen. Dann brauchen die beiden ein Relay.

Ein Relay ist ein Mitglied deines Netzes, ein Gerät mit öffentlicher Adresse wie ein VPS, das Verkehr zwischen Geräten weiterreicht, die sich nicht erreichen (So funktioniert juist). Kein Dritter reicht je deinen Verkehr weiter. Nur Mitglieder können das Relay nutzen, und es sieht nur verschlüsselten WireGuard-Verkehr.

Ein Relay trägt auch Einladungen. Führst du juist invite auf einem Laptop hinter NAT aus, wartet die Einladung auch beim Relay, und der Link nennt es. So tritt ein neues Gerät von überall bei (Einladungen). Das Geheimnis der Einladung erreicht das Relay nie.

Ein Relay einrichten

1auf vps, dem Relay

Dem Netz beitreten, dann die Ports mit ufw öffnen:

sudo juist join 'juist:…'
sudo ufw allow juist && sudo ufw allow juist-relay

Oder mit firewalld:

sudo firewall-cmd --permanent --add-service=juist --add-service=juist-relay && sudo firewall-cmd --reload
2auf dem Gerät eines Admins

Dem VPS die Rolle relay geben. Eine Rolle ist eine Berechtigung, die das Netz für ein Gerät festhält.

juist grant vps relay

Die Zeile Relays in juist status zählt ihn dann als verfügbar.

juist revoke vps relay entzieht die Rolle wieder. Am besten gibst du sie zwei oder mehr Geräten mit öffentlicher Adresse. In einem Netz mit mehr als zwei Geräten warnt juist status, solange keins Relay sein darf.

Ports

PortWofürWo öffnen
41643/udpWireGuard und Wegsucheauf einem Gerät mit öffentlicher Adresse
41645/tcp, 41645/udpdas Relay, und die STUN-Antworten, an denen Mitglieder es messenauf einem Gerät mit der Rolle relay
41642/tcpeine Einladung, die als Code im LAN angenommen wirdauf dem einladenden Gerät, solange juist invite läuft
443/tcp, 80/tcpdie Namen, die Geräte veröffentlichenauf einem Gerät mit der Rolle ingress; juist ingress serve öffnet sie

Hinter NAT muss nichts geöffnet werden. Eine Einladung per Link braucht auch keinen Port: Erreicht sie das einladende Gerät nicht direkt, trifft sie es sofort über ein Relay oder in etwa einer Minute über die öffentliche DHT.

Ein Gerät in mehreren Netzen betreibt für jedes einen juistd. Die Ports des n-ten sind diese plus 10·n: 41653/udp für juistd@juist1.

Firewalls

Die Pakete installieren Profile für ufw und firewalld mit den Namen juist, juist-relay, juist-invite und juist-ingress. Die Profile nennen die Ports des ersten Netzes; die der anderen gibt juist status als Nummer an.

Der Log-Abgleich, über den Geräte Änderungen am Mitgliederlog (der signierten Aufzeichnung, wer zum Netz gehört) weitergeben, läuft im Tunnel: TCP 41644 auf juist0 (41654 auf juist1 und so weiter). Was dort ankommt, ist schon durch WireGuard und juists eigenen Filter gegangen, und die Pakete lassen es herein, wo ufw oder firewalld läuft. Eine von Hand eingerichtete Firewall muss es auch hereinlassen. Sonst behält das Gerät seine Tunnel, verpasst aber Änderungen am Netz, auch Entfernungen; juist status sagt das. Ein Exit-Node beantwortet dort auch das DNS seiner Mitglieder, auf UDP und TCP 41646, was so eine Firewall ebenfalls hereinlassen muss.

Hinweis

Beim Upgrade von einem Build, dessen Profil juist jeden Port öffnete: ufw behält die alten Ports bis sudo ufw app update juist, und firewalld schränkt juist sofort auf 41643/udp ein. In beiden Fällen braucht ein Relay zusätzlich juist-relay.

Ohne öffentliche Helfer

Von Haus aus fragt juistd öffentliche STUN-Server (Google, Cloudflare) nach seiner öffentlichen Adresse. Außerdem nutzt es die öffentliche BitTorrent-DHT, ein gemeinsames Verzeichnis im Internet, um Mitglieder wiederzufinden, die es verloren hat. Beide sehen Adressen, nie Inhalte.

Hast du ein eigenes Relay, kommt das Netz ohne beide aus. Mach das auf jedem Gerät:

sudo systemctl edit juistd

und trag ein:

[Service]
ExecStart=
ExecStart=/usr/bin/juistd --home /var/lib/juist --socket /run/juist/juistd.sock --tun juist0 --no-dht --no-stun

Die Geräte finden sich dann im LAN und über Mitglieder, die sie schon kennen. Das Relay sagt jedem Gerät seine öffentliche Adresse, und Einladungen per Link treffen sich darüber. man juistd listet jede Option.

Wenn etwas nicht klappt

juist status sagtWas zu tun ist
no tunnel traffic from …41643/udp auf einem Gerät mit öffentlicher Adresse öffnen, oder einem Gerät relay geben
no device reaches this relay41645/tcp und udp auf dem Relay öffnen, auch in jeder Firewall davor
no device may relayjuist grant DEVICE relay für ein Gerät mit öffentlicher Adresse
log sync … fails in the tunneljuist0 durch die Firewall des Rechners lassen, wie der Hinweis sagt
no answer from …das Gerät ist offline, oder sein 41643/udp ist zu