Community-Lösung

Einen Tailscale-Docker-Knoten auf ZimaOS dauerhaft beibehalten

A September 2025 ZimaOS thread where a Tailscale Docker container created a new node after reboots or app edits. The original poster confirmed that removing the recurring auth-key environment variable fixed their setup once state persistence was already configured.

Ein permanenter Tailscale-Container sollte nach einem Neustart von ZimaOS oder einer Bearbeitung der Anwendung in der Tailscale-Administrationskonsole dieselbe Maschine bleiben. Im Quellthread vom September 2025 war dies nicht der Fall: Bei jedem Neustart oder jeder erneuten Bereitstellung wurde ein weiterer Tailscale-Knoten erstellt, obwohl die Compose-Datei bereits Folgendes eingebunden hatte /var/lib/tailscale in das persistente ZimaOS-AppData.

Das endgültige Ergebnis der Quelle ist wichtig, weil es die Ursache eingrenzt. Der ursprüngliche Verfasser erklärte, dass der persistente Speicher bereits korrekt eingerichtet war; das Löschen der fortlaufend bereitgestellten Umgebungsvariablen für den Authentifizierungsschlüssel war die einzige erforderliche Änderung. Danach blieb die Identität des Tailscale-Knotens erhalten.

Tailscale benötigt einen persistenten Maschinenzustand

Tailscale speichert die Knotenidentität, Schlüssel und den Verbindungsstatus in seinem Zustandsverzeichnis. In Docker wird der Pfad üblicherweise mit Folgendem konfiguriert:

TS_STATE_DIR=/var/lib/tailscale

Wenn dieses Verzeichnis nur im vergänglichen Container-Dateisystem existiert, erstellt das erneute Erstellen des Containers eine neue Tailscale-Identität.

Die Quelle hatte das Zustandsverzeichnis bereits eingebunden

Die ursprüngliche Compose-Datei enthielt:

/DATA/AppData/tailscale:/var/lib/tailscale

zusammen mit TS_STATE_DIR=/var/lib/tailscaleHost-Netzwerk, NET_ADMIN, NET_RAWsowie Zugriff auf /dev/net/tun. Auf dem Papier sollte das den Zustand bewahren.

Compose Toolbox mit einem Tailscale-Docker-Stack, bei dem ein persistentes Zustandsvolume von ZimaOS AppData nach /var/lib/tailscale eingebunden ist
Die Quellkonfiguration speicherte das Tailscale-Zustandsverzeichnis bereits persistent, daher konzentrierte sich die spätere Diagnose eher auf das Authentifizierungsverhalten als ausschließlich auf den Volume-Mount.

Ein Authentifizierungsschlüssel dient der Registrierung, nicht unbedingt jedem Neustart

Die Compose-Datei stellte außerdem Folgendes bereit: TS_AUTHKEY bei jedem Start des Containers. Ein Community-Antwortender erklärte, dass eine erneute Authentifizierung eine neue Maschine erstellen kann, wenn der vorhandene Knotenstatus nicht wie erwartet wiederverwendet wird.

Der Antwortende schlug vor, beim ersten Start einen wiederverwendbaren, nicht kurzlebigen Authentifizierungsschlüssel zu verwenden, zu warten, bis der Knoten in der Administrationskonsole erscheint, dann die Zeile mit dem Authentifizierungsschlüssel zu entfernen und die Bereitstellung erneut durchzuführen, damit der gespeicherte Maschinenzustand als Identitätsquelle verwendet wird.

Der ursprüngliche Verfasser bestätigte, dass das Entfernen des Authentifizierungsschlüssels sein Problem behoben hat

In der abschließenden Antwort der Quelle heißt es, dass die übrigen Komponenten für die Persistenz bereits vorhanden waren und lediglich die Umgebungsvariable für den Authentifizierungsschlüssel gelöscht werden musste. Anschließend blieb der Maschinenname auch nach Neustarts erhalten.

Diese Bestätigung ist aussagekräftiger als eine allgemeine Vermutung über Berechtigungen. Bei dieser konkreten Installation war die wiederholte Authentifizierung der praktische Auslöser.

Aktuelles Tailscale stellt TS_AUTH_ONCE bereit

Moderne Tailscale-Docker-Bereitstellungen können TS_AUTH_ONCE=true. Wenn bereits ein persistenter Zustand vorhanden ist, weist dies den Container an, nicht bei jedem Start erneut eine Anmeldung zu erzwingen.

Prüfe die aktuellen Tailscale-Docker-Parameter für Status und Authentifizierung, bevor du eine Compose-Datei aus dem Jahr 2025 unverändert wiederverwendest.

Ein dediziertes Hostverzeichnis für den Status verwenden

Ein dediziertes Hostverzeichnis, etwa ein Tailscale-AppData-/Statusordner, erleichtert die Überprüfung, ob die Maschinenschlüssel eine erneute Bereitstellung überstehen. Der Antwortende im Ausgangsfall empfahl außerdem sicherzustellen, dass der Prozess, der den Tailscale-Status speichert, Schreibzugriff auf den Ordner hat.

Berechtigungen sind wichtig, da ein Volume zwar korrekt eingebunden sein kann, der Prozess seine Dateien aber dennoch nicht aktualisieren kann. In diesem Fall verhält sich Tailscale möglicherweise so, als hätte die Maschine keinen wiederverwendbaren Status.

Ephemere Authentifizierungsschlüssel für einen permanenten Server vermeiden

Tailscale unterstützt kurzlebige Knoten, die absichtlich nur vorübergehend bestehen. Das ist für kurzlebige CI-Aufträge oder wegwerfbare Container nützlich, steht aber im Gegensatz zu den Anforderungen eines permanenten ZimaOS-Servers.

Überprüfe beim Erstellen einer Berechtigung, dass sie dem vorgesehenen Lebenszyklus entspricht. Ein persistenter Heimserver sollte normalerweise dieselbe Identität behalten, bis du sie absichtlich widerrufst oder ersetzt.

TS_HOSTNAME definiert nicht die Maschinenidentität

Der Container im Ausgangsfall verwendete TS_HOSTNAME=zimaos. Diese Einstellung steuert den Anzeigenamen, der im Tailnet verwendet wird. Die Beibehaltung derselben Hostnamen-Zeichenfolge bewahrt jedoch nicht die kryptografische Maschinenidentität. Zwei neu authentifizierte Maschinen können versuchen, ähnliche Namen zu verwenden, und dennoch separate Knoten bleiben.

Neustart und erneute Bereitstellung der App testen

Das ursprüngliche Problem trat sowohl nach vollständigen Neustarts des Betriebssystems als auch nach Änderungen an der ZimaOS-App auf. Eine korrekte Lösung sollte daher beides überstehen:

  1. den Tailscale-Container neu starten;
  2. die App bearbeiten und erneut bereitstellen, ohne das Statusvolume zu ändern;
  3. ZimaOS neu starten;
  4. Überprüfe, dass dieselbe Maschine in der Tailscale-Administrationskonsole weiterhin online ist.

Wenn nach nur einem dieser Ereignisse ein Duplikat erscheint, vergleiche, was während dieses speziellen Lebenszyklusvorgangs mit dem Statusverzeichnis geschieht.

FAQ zu persistentem Tailscale

Warum wurde nach jedem Neustart eine neue Tailscale-Maschine erstellt?

Im Ausgangsfall war das Statusvolume bereits vorhanden, und die wiederholte Verwendung des Authentifizierungsschlüssels war das verbleibende praktische Problem.

Welcher Pfad muss persistent sein?

Der Pfad, der durch TS_STATE_DIR, üblicherweise /var/lib/tailscale im Container.

Sollte TS_AUTHKEY dauerhaft in der Umgebung verbleiben?

Nicht unbedingt. Der Benutzer im Ausgangsfall behob doppelte Knoten, indem er die Option nach der Registrierung entfernte. Außerdem bietet Tailscale inzwischen TS_AUTH_ONCE.

Bewahrt TS_HOSTNAME die Knotenidentität?

Nein. Der gespeicherte Tailscale-Maschinenstatus bewahrt die Identität.