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
Dem Netz beitreten, dann die Ports mit ufw öffnen:
sudo juist join 'juist:…'
sudo ufw allow juist && sudo ufw allow juist-relayOder mit firewalld:
sudo firewall-cmd --permanent --add-service=juist --add-service=juist-relay && sudo firewall-cmd --reloadDem VPS die Rolle relay geben. Eine Rolle ist eine Berechtigung, die das Netz
für ein Gerät festhält.
juist grant vps relayDie 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
| Port | Wofür | Wo öffnen |
|---|---|---|
| 41643/udp | WireGuard und Wegsuche | auf einem Gerät mit öffentlicher Adresse |
| 41645/tcp, 41645/udp | das Relay, und die STUN-Antworten, an denen Mitglieder es messen | auf einem Gerät mit der Rolle relay |
| 41642/tcp | eine Einladung, die als Code im LAN angenommen wird | auf dem einladenden Gerät, solange juist invite läuft |
| 443/tcp, 80/tcp | die Namen, die Geräte veröffentlichen | auf 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.
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 juistdund trag ein:
[Service]
ExecStart=
ExecStart=/usr/bin/juistd --home /var/lib/juist --socket /run/juist/juistd.sock --tun juist0 --no-dht --no-stunDie 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 sagt | Was 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 relay | 41645/tcp und udp auf dem Relay öffnen, auch in jeder Firewall davor |
no device may relay | juist grant DEVICE relay für ein Gerät mit öffentlicher Adresse |
log sync … fails in the tunnel | juist0 durch die Firewall des Rechners lassen, wie der Hinweis sagt |
no answer from … | das Gerät ist offline, oder sein 41643/udp ist zu |