Cluster – mehrere Nodes abgleichen

Betreibst du mehr als eine Node64 – etwa den Raspberry Pi im Keller, eine VM auf dem Server und eine Node bei den Eltern –, verbindest du sie zu einem Cluster. Die Nodes gleichen Einstellungen und Einträge dann direkt untereinander ab: verschlüsselt, auch über verschiedene Netze und auch ganz ohne ipv64.net.

Der Cluster ist die frühere „lokale Gruppe“. Er hat jetzt einen eigenen Menüpunkt Cluster (Seite /cluster). Er ist immer optional: Ohne Mitglieder gibt es keinen Verkehr zwischen Nodes.

Wozu ein Cluster?

  • Ein Bild auf allen Nodes: Checks, Wartungsfenster, Benachrichtigungs-Einstellungen und weitere Bereiche sind auf jeder Node gleich – ändern kannst du überall.
  • Mehrere Messstellen: Ein Check kann von mehreren Nodes gemessen werden; jede Node erscheint als eigene Messstelle. Benachrichtigt wird trotzdem genau einmal.
  • Zertifikate verteilen: Zertifikate, ACME-Konto, DNS-Zugänge und eigene CAs einmal einrichten und auf allen Nodes nutzen.
  • Unabhängig von der Cloud: Ein Cluster ohne ipv64-Account funktioniert vollständig lokal – auch Healthchecks mit eigener Bewertung und Benachrichtigung.
  • Kein zusätzlicher Port: Die Nodes sprechen über den normalen Web-Port miteinander.

Voraussetzungen

  • Derselbe ipv64-Account oder keiner: Alle Nodes eines Clusters haben denselben ipv64-Account – oder alle keinen. Gemischt geht nicht.
  • Erreichbarkeit: Die Nodes müssen sich gegenseitig unter ihrer Adresse und dem Web-Port erreichen, im Heimnetz oder über verschiedene Netze (z. B. per VPN oder Portfreigabe).
  • Richtige Uhrzeit: Die Uhren der Hosts sollten per NTP stimmen – die Anfragen zwischen den Nodes sind mit Zeitstempel signiert.
  • Gleiche Version: Am besten alle Nodes auf demselben Stand halten; eine zu alte Node wird ausgesetzt.

So sieht das aus

  # Drei Nodes desselben Accounts (oder alle ohne Account)
 ┌───────────────┐   HTTPS, Web-Port      ┌───────────────┐
 │ Node64 „Pi“   │◄──────────────────────►│ Node64 „NAS“  │
 │ Heimnetz      │   signiert             │ Heimnetz      │
 └──┬────────────┘                        └────────┬──────┘
    │  ▲                                           ▲
    │  │   Checks · Zertifikate · Messwerte        │
    │  │            ┌───────────────┐              │
    │  └───────────►│ Node64 „Büro“ │◄─────────────┘
    │               │ anderes Netz  │
    │               └───────────────┘
    │ ausgehend, HTTPS 443 (optional)
    ▼
 ┌───────────────┐
 │   ipv64.net   │  Healthchecks laufen weiter über die ipv64-Server;
 └───────────────┘  der Cluster ist ein zusätzlicher Weg

Eine weitere Node aufnehmen

Auf einer Node, die schon im Cluster ist (oder der ersten Node), klickst du unter Cluster auf Code für eine weitere Node.

  • Die Node zeigt einen 8-stelligen Code (z. B. ABCD-EFGH) und ihre eigene Adresse an.
  • Der Code gilt 10 Minuten und nur einmal; du kannst ihn jederzeit verwerfen.

Einem Cluster beitreten

Auf der neuen Node öffnest du Cluster → Einem Cluster beitreten und füllst drei Felder aus:

  1. Adresse einer Node des Clusters
    mit https://, z. B. https://node64-pi.lan:8080.
  2. Code
    den Code von dort.
  3. Adresse dieser Node
    so, wie die anderen sie erreichen. Vorgeschlagen ist https:// plus die Adresse, unter der du die Seite gerade aufrufst; ist NODE64_HTTPS_PORT gesetzt, mit diesem Port.

Danach erscheint die Node bei allen Mitgliedern. Jede Node kann den Cluster auch selbst wieder verlassen – die anderen erfahren es automatisch.

Verbindung immer per HTTPS

  • Die Nodes sprechen immer verschlüsselt miteinander. Einen eigenen HTTPS-Port brauchst du nicht: Der normale Web-Port (NODE64_HTTP_PORT, Standard 8080) spricht auch TLS.
  • Das Zertifikat muss nicht gültig sein – ein selbst signiertes genügt. Schutz gegen Mitlesen und gegen einen Mittelsmann bietet die Bindung an die Schlüssel, die bei der Kopplung ausgetauscht werden.
  • Ein Proxy dazwischen, der TLS aufbricht, funktioniert deshalb nicht (die Node wird mit dem Grund tls_binding ausgesetzt). Sprich die Nodes direkt an.

Was wird abgeglichen?

Unter Was wird abgeglichen gibt es je Modul einen Schalter und darunter je Bereich einen eigenen:

ModulBereicheStandard
HealthchecksChecks (mit Messwerten), Wartungsfensteran
BenachrichtigungenEinstellungen (Ruhezeiten, Drossel, Bündeln)an
ZertifikateZertifikate, ACME (Konto und CAs), DNS-Anbieter, eigene CAsaus
DNS64Einstellungen, Blocklisten, Freigaben, eigene Einträge (mit Zonen), Weiterleitungen (mit Umschreiben), Gerätegruppen, Mitglieder der Gruppen – siehe DNS64 im Clusteraus
weitere ModulePROXY64 folgtaus
  • Ein Bereich wird nur mit Nodes abgeglichen, bei denen er ebenfalls an ist – also nur, wenn er auf beiden Nodes an ist.
  • Module, die auf dieser Node nicht laufen, sind ausgegraut.
  • Konflikte: Ändern zwei Nodes dasselbe, gewinnt die jüngere Änderung. Gelöschtes bleibt gelöscht.
  • Benachrichtigungskanäle bleiben die eigene Einstellung jeder Node.
  • Zertifikate: Erneuert wird nur von einer Node – der, die zuletzt ausgestellt hat. Eine andere übernimmt erst, wenn ein Drittel der Erneuerungsfrist verstrichen ist (bei Let's Encrypt 10 Tage). Löschen auf einer Node löscht überall.
  • Mitglieder ohne eingeschaltetes Modul Healthchecks und ausgesetzte Nodes zählen nicht für Messwerte, Benachrichtigungen und das Weiterreichen an ipv64.
  • Geschaltet wird nur hier auf der Seite Cluster. Die Seite Healthchecks-Sync zeigt nur noch an, ob der Abgleich an oder aus ist, und verweist hierher.

In Planung: PROXY64

PROXY64 soll später ebenfalls über den Cluster abgeglichen werden können – mit Schaltern je Bereich wie bei den anderen Modulen. Umgesetzt wird das, sobald die Nachfrage hoch genug ist; der Cluster ist dafür bereits vorbereitet. Geplant ist zum Beispiel:

  • PROXY64: Proxy-Hosts und Zugriffslisten gemeinsam auf allen Nodes – das Ziel eines Hosts darf je Node abweichen, und ein Host lässt sich auf einer Node gezielt ausschalten (Dienst nur an einem Standort).
  • Statistiken werden nicht kopiert, sondern live von jeder Node abgefragt und mit Node-Namen und als Summe angezeigt.

Bewusst nie abgeglichen werden DynDNS (zwei Nodes würden dieselbe Domain abwechselnd überschreiben), Anmeldung, Zwei-Faktor, Passkeys, SSO und API-Keys sowie Ports, Logging, Backup und Updates.

Mitglieder verwalten

Oben steht, ob diese Node zu einem ipv64-Account gehört („Diese Node gehört zum ipv64-Account #…“) oder keinen hat. Darunter die Liste aller Mitglieder:

AngabeBedeutung
Zustandonline, offline, abgelehnt (Fehler) oder ausgesetzt
Name, Versionwie in den Einstellungen der jeweiligen Node
Abzeichen „ipv64“die Node ist selbst mit ipv64.net verknüpft
Adresseänderbar, z. B. wenn sich die IP geändert hat
zuletzt erreichtwann die Node zuletzt geantwortet hat
Abgleich dortdie Bereiche, die dort an sind: grün = auch hier an, wird abgeglichen; grau = hier aus. Bei einer älteren Version „unbekannt“.

Mit Aus dem Cluster nehmen entfernst du eine Node; alle anderen erfahren es.

Ausgesetzte Nodes

Ändert sich an einer Node etwas Grundlegendes, wird sie ausgesetzt: Die anderen sprechen nicht mehr mit ihr, arbeiten untereinander aber normal weiter.

GrundBedeutung
account_changedDer eigene ipv64-Account hat sich geändert (keiner → einer, Wechsel oder wieder keiner).
account_mismatchDer Account der anderen Node passt nicht.
identity_changedSchlüssel bzw. Kennung der Node haben sich geändert, z. B. nach einer Neuinstallation.
tls_bindingEin Proxy dazwischen bricht TLS auf.
version_too_oldDie andere Node ist zu alt – dort aktualisieren. Nach dem Update wird sie von selbst wieder aktiv; so lassen sich die Nodes nacheinander aktualisieren.

Außer bei version_too_old wird eine Node nur von Hand mit Wieder aufnehmen zurückgeholt. Dabei wird erneut geprüft; passt es noch nicht, bleibt sie ausgesetzt und die Oberfläche nennt den Grund.

Wenn eine Node weg ist

  1. Offline, nicht ausgesetzt
    Die anderen pingen sie weiter alle 30 Sekunden; nach 2 Minuten ohne Antwort gilt sie als offline (in der Liste mit letztem Fehler). Sie wird weder ausgesetzt noch entfernt – offline ist kein Grund dafür.
  2. Die anderen arbeiten weiter
    Die übrigen Nodes gleichen normal untereinander ab.
  3. Benachrichtigen
    Misst sie einen Check zusammen mit anderen, übernimmt die nächste erreichbare messende Node die Meldungen – ohne Doppelmeldung. Misst nur sie einen Check, wird er nach 3 Intervallen (mindestens 5 Minuten) ohne Messung „nicht überwacht“.
  4. Weiterreichen an ipv64
    War sie die Node, die Änderungen an ipv64 weiterreicht, übernimmt die nächste verknüpfte und erreichbare Node.
  5. Sie kommt zurück
    Beide Seiten holen ab ihrem letzten Stand alles nach, was sich in der Zwischenzeit geändert hat – auch Änderungen, die auf ihr selbst gemacht wurden –, Messwerte ebenso. Dauerhaft entfernt wird eine Node nur mit Aus dem Cluster nehmen.

Meldung: Ist eine Node länger als 5 Minuten nicht erreichbar oder ausgesetzt, kommt über deine Benachrichtigungskanäle „🔴 Cluster: Node … nicht erreichbar“ (mit dem letzten Fehler bzw. dem Grund fürs Aussetzen), bei ihrer Rückkehr „🟢 … wieder erreichbar“ – jeweils mit Link auf die Cluster-Seite. Es meldet genau eine Node: die mit der kleinsten Kennung unter den erreichbaren; die Entwarnung schickt, wer gemeldet hat. Das Dashboard zeigt dann oben einen Hinweis, und die Kachel Cluster (nur mit Mitgliedern) zeigt den Zustand jeder Node.

Split-Brain: Teile des Clusters länger getrennt

Es gibt keinen Anführer und keine Mehrheitsregel: Ist die Verbindung zwischen Teilen des Clusters weg, arbeitet jeder Teil allein weiter, nichts wird gesperrt. Nach der Wiederverbindung holt jede Node ab ihrem letzten Stand alles nach, und alle landen beim selben Ergebnis:

WasWährend der TrennungNach der Wiederverbindung
Eintrag nur auf einer Seite geändert oder neunormalkommt überall an
derselbe Eintrag auf beiden Seiten geändertjede Seite hat ihren Standdie jüngere Änderung gewinnt, als Ganzes (kein Zusammenführen einzelner Felder); die ältere geht verloren
auf einer Seite gelöscht, auf der anderen geändert–die jüngere gewinnt: eine Änderung nach dem Löschen holt den Eintrag zurück, sonst bleibt er gelöscht
LöschvermerkeChecks und Wartungsfenster dauerhaft; Zertifikate 30 TageTrennung länger als 30 Tage: ein gelöschtes Zertifikat kann von der anderen Seite zurückkommen
Messwertejede Node misst selbstwerden nachgeholt (Messwerte gehören je einer Node, kein Konflikt)
Benachrichtigungenjede Seite meldet für sich – Checks, die auf beiden Seiten gemessen werden, können doppelt gemeldet werden (nicht bei Verknüpfung mit ipv64, dann bewertet und meldet ipv64)wieder genau eine Node
Meldung „Node nicht erreichbar“jede Seite meldet die Nodes der anderenEntwarnung von denselben Nodes
Zertifikateist die zuständige Node auf der anderen Seite, erneuert diese Seite ab einem Drittel der Frist selbstdas jüngere Zertifikat gewinnt überall (höchstens einmal doppelt bestellt)
Mitglieder aufnehmen oder entfernenerreicht nur die eigene Seitewird nicht automatisch nachgeholt – eine entfernte Node ggf. auch auf der anderen Seite entfernen
Beispiel: drei Nodes, A und B getrennt von C

A und B gleichen weiter untereinander ab und melden als Paar (A meldet „C nicht erreichbar“); C arbeitet allein und meldet „A“ und „B nicht erreichbar“. Checks, die nur C misst, meldet C; Checks, die A/B und C messen, melden beide Seiten. Nach der Wiederverbindung bekommt C alles von A und B und umgekehrt. Bei Änderungen am selben Eintrag gewinnt die jüngere – auch wenn sie von C, der Minderheit, kommt. Die Uhrzeit entscheidet, daher NTP auf allen Hosts; bei mehr als 5 Minuten Abweichung sprechen die Nodes ohnehin nicht miteinander.

Wer benachrichtigt?

  • Misst nur eine Node einen Check, benachrichtigt diese Node – oder ipv64, wenn sie verknüpft ist.
  • Messen mehrere Nodes des Clusters einen Check, benachrichtigt genau eine. Fällt sie aus, übernimmt die nächste – ohne doppelte Meldung.
  • Auf der Detailseite eines Checks steht unter Benachrichtigt, wer meldet.

Zusammenspiel mit ipv64.net

  • Healthchecks laufen für verknüpfte Nodes weiter über die ipv64-Server; der Cluster ist ein zusätzlicher Weg.
  • Eine verknüpfte Node reicht Änderungen der Nodes ohne eigenen Healthchecks-Sync an ipv64 weiter.
  • Ist keine verknüpfte Node erreichbar, bleiben Änderungen und Meldungen einfach im Cluster.

Mehr dazu unter Mit ipv64.net verknüpfen.

Sicherheit

  • Jede Node hat einen eigenen Ed25519-Schlüssel, der verschlüsselt in ihrer Datenbank liegt.
  • Jede Anfrage und jede Antwort zwischen den Nodes ist signiert – über Methode, Pfad, Zeit, Account, eine Einmal-Kennung, den Inhalt und eine Kennung der TLS-Verbindung. Ein Mittelsmann hätte zu beiden Seiten andere Verbindungen und wird abgelehnt, bevor Daten fließen.
  • Wiederholte Anfragen werden erkannt und abgelehnt.
  • Der Beitritt ist nur mit dem einmaligen Code möglich (10 Minuten, nach 5 Fehlversuchen verworfen).
  • Ändern sich Account oder Schlüssel einer Node, wird sie automatisch ausgesetzt.
  • Die Endpunkte für die Nodes liegen auf dem normalen Web-Port unter /peer/; sie nehmen nur signierte Anfragen von Mitgliedern bzw. den Beitrittscode an.

Technik: Port, Endpunkte, Zeiten

Port und Verbindung

WasWert
Portder normale Web-Port NODE64_HTTP_PORT (Standard 8080, spricht auch TLS); ist NODE64_HTTPS_PORT gesetzt, dieser
Protokollnur HTTPS (TLS 1.2 oder neuer); Klartext-HTTP an /peer/ wird mit 426 Upgrade Required abgelehnt
Zertifikatwird nicht geprüft (selbst signiert genügt), kein Pinning – ein Zertifikatswechsel ändert nichts
Richtungjede Node fragt die anderen ab (Pull); beide Seiten müssen die jeweils andere unter ihrer Mitglieds-Adresse erreichen
Proxy dazwischennur ohne TLS-Aufbruch (TCP-Weiterleitung, Portfreigabe, VPN); ein TLS-terminierender Proxy führt zu tls_binding
UhrzeitHosts per NTP; erlaubte Abweichung ±5 Minuten
Andere Portskeine; ausgehend zu ipv64 nur, wenn eine Node verknüpft ist (unabhängig vom Cluster)

Endpunkte

Auf dem Web-Port, ohne Anmeldung in der Oberfläche – sie nehmen nur signierte Anfragen von Mitgliedern bzw. den Beitrittscode an:

MethodePfadZweck
POST/peer/v1/pairBeitritt mit Code (der Code geht nie im Klartext über die Leitung)
GET/peer/v1/pingErreichbarkeit, Version, Account, eingeschaltete Bereiche
POST/peer/v1/membersMitglieder weitergeben (Beitritt, Entfernen, Austritt)
GET/peer/v1/changesÄnderungen von Healthchecks und Benachrichtigungen
POST/peer/v1/poke„bei mir gibt es Neues“ – sofort abholen
GET/peer/v1/measurementsMesswerte der anderen Node
GET/peer/v1/relayDaten einer verknüpften Node für nicht verknüpfte
GET/peer/v2/syncAbgleich der übrigen Module (Zertifikate; später PROXY64, DNS64)

Zeiten und Grenzen

WasWert
Ping an jedes Mitgliedalle 30 Sekunden
Mitglied gilt als offlinenach 2 Minuten ohne Antwort
Abholenalle 15 Sekunden, bei Änderungen sofort (gebündelt, höchstens alle 0,5 Sekunden)
Zeitlimit je Anfrage10 s (Ping und Anstoß 5 s), Änderungen 20 s, Messwerte und Abgleich 30 s
Erstes Abholen der Messwertedie letzten 24 Stunden
Healthchecks bei der anderen Node aus5 Minuten Ruhe statt alle 15 Sekunden (ein Anstoß holt trotzdem sofort)
Uhrzeithöchstens ±5 Minuten Abweichung
Beitrittscode10 Minuten gültig, einmal verwendbar, nach 5 Fehlversuchen verworfen
Größe einer Anfragehöchstens 8 MiB (Beitritt 1 MiB)
Konfliktedie jüngere Änderung gewinnt (auf die Millisekunde)
Löschvermerke30 Tage
Bereich neu eingeschaltetAbholen ab Anfang (doppelt schadet nicht, die jüngere Änderung gewinnt)

API

Der Bereich heißt in der API-Referenz „Cluster“; die Pfade beginnen weiter mit /api/group.

MethodePfadZweck
GET/api/groupMitglieder mit state (active/suspended), reason, sync; dazu sync_modules und https_port
POST / DELETE/api/group/codeCode für eine weitere Node erzeugen bzw. verwerfen
POST/api/group/joinbeitreten (addr, code, self_url)
POST/api/group/leaveCluster verlassen
PUT / DELETE/api/group/members/{id}Adresse eines Mitglieds ändern bzw. Mitglied entfernen
POST/api/group/members/{id}/resumeausgesetzte Node wieder aufnehmen (204; 409, wenn sie ausgesetzt bleibt)
PUT/api/group/syncAbgleich je Modul/Bereich schalten, z. B. {"module":"certs","item":"certificates","enabled":true} oder {"module":"notifications","item":"settings","enabled":false}

Jede Änderung steht im Audit-Log (Bereich Cluster). Für das Monitoring gibt es Prometheus-Werte zu den Mitgliedern – siehe Prometheus.

Beobachten

  • Dashboard: Kachel Cluster mit dem Zustand jeder Node und ein Hinweis oben, wenn eine Node weg oder ausgesetzt ist; dazu die Meldung nach 5 Minuten.
  • Oberfläche Cluster und GET /api/group – je Mitglied online, Zustand, Grund, Bereiche, zuletzt erreicht und letzter Fehler.
  • Prometheus: node64_group_members, node64_group_members_online und node64_group_member_up{node_id,node_name} – siehe Prometheus.
  • Log (Bereich peer): „cluster member suspended/resumed“, „peer request rejected“, „cluster entries updated“; Abholfehler auf Debug. Im Audit-Log steht alles im Bereich Sync.

Etwas unklar, fehlt etwas oder hast du eine Frage zu Node64? Frag im offiziellen Forum v64.tech.

Fragen zu Node64?
Für alle Fragen zum Produkt gibt es das offizielle Forum: Einrichtung, Fehlersuche, Ideen und Austausch mit der Community und dem ipv64.net-Team.
Zum Forum v64.tech