Headscale: Hol dir den vollen Tailscale-Funktionsumfang OHNE Abo-Gebühren!

BBetter Stack
Internet TechnologyTelecommutingComputing/Software

Transcript

00:00:00Das ist Headscale, eine kostenlose Open-Source-Version von Tailscale, die du auf jedem beliebigen Server installieren kannst.
00:00:06So behältst du die volle Kontrolle über dein verschlüsseltes Netzwerk, falls das Internet mal ausfällt oder Tailscale plötzlich die Preise erhöht.
00:00:13Das Kuriose ist jedoch, dass Headscale von einem Tailscale-Mitarbeiter entwickelt wurde.
00:00:18Warum bezahlen sie jemanden dafür, ihre eigene Konkurrenz aufzubauen?
00:00:22Abonniere den Kanal und lass es uns herausfinden.
00:00:25Schauen wir uns Headscale kurz in Aktion an, bevor wir tiefer ins Detail gehen.
00:00:30Alles klar, ich habe hier drei Hetzner-Server: einen für die Headscale-Steuerungsebene und zwei Knoten, die ich miteinander verbinden möchte.
00:00:40Diese beiden sind aktuell Teil meines verschlüsselten Netzwerks.
00:00:44Da alles über Docker läuft, kann ich mir mit diesem Befehl die aktuellen Knoten ansehen – hier „Ubuntu Test“ und „Ubuntu Test 2“.
00:00:53Und das sind die IP-Adressen, über die ich mich mit ihnen verbinden kann.
00:00:56Versuchen wir nun, uns von einem Knoten aus mit dem anderen zu verbinden.
00:00:59Zuerst kopiere ich diese IP-Adresse.
00:01:02Und jetzt werde ich mich von „Ubuntu Test 2“ aus als Root per SSH einloggen.
00:01:07Ja, ich weiß, man sollte sich nicht als Root einloggen, aber das dient nur Testzwecken.
00:01:09Das hier ist die IP-Adresse von Headscale.
00:01:11Wenn ich Enter drücke und den Bildschirm leere, sieht man: Ich bin jetzt auf „Ubuntu Test 1“.
00:01:17Ich bin also von Test 2 zu Test 1 gewechselt und kann mit „exit“ wieder zurückkehren.
00:01:24Das Gleiche klappt auch andersrum, wenn ich von Test 1 aus „ssh root“ und die IP von Test 2 eingebe.
00:01:31Nach dem Leeren des Bildschirms sehen wir: Ich bin jetzt von Test 1 aus auf „Ubuntu Test 2“.
00:01:36Wenn ich mich jedoch außerhalb des Tailnets befinde – ich öffne hier einen neuen Tab auf meinem Mac – und versuche, mich per SSH mit Test 2 zu verbinden...
00:01:48...dann passiert gar nichts, weil ich eben nicht Teil des Tailnets bin.
00:01:52Wie du siehst, ermöglicht Headscale den vollen Zugriff auf dein Netzwerk.
00:01:56Du kontrollierst jedes Detail und kannst beliebig viele Knoten hinzufügen, ganz ohne Vendor-Lock-in.
00:02:03Es funktioniert sogar ohne Internet, wenn du es zum Beispiel auf einem NAS oder einem alten Raspberry Pi installierst.
00:02:08Allerdings ist die Einrichtung etwas aufwendiger.
00:02:11Ich zeige dir mal, wie das Ganze funktioniert.
00:02:13Ich habe einen neuen Server namens „Ubuntu Test 3“ erstellt und werde nun ein neues Tailnet bzw. einen verschlüsselten Server mit einem neuen Benutzer anlegen, der zwei Knoten verbindet.
00:02:24Dafür nutzen wir zu Testzwecken „Ubuntu Test 3“ und „Ubuntu Test 1“.
00:02:29Auf meiner Headscale-Steuerungsebene ist Headscale bereits installiert, aber ich gehe den Prozess noch einmal mit euch durch.
00:02:37Aktuell laufen bei mir drei Docker-Container.
00:02:40Einer für das Headscale-UI, einer für Headscale selbst und einer für Caddy.
00:02:45In der Docker-Compose-Datei sehen wir, dass die Konfiguration der aus der offiziellen Headscale-Dokumentation sehr ähnlich ist.
00:02:56Ich habe lediglich ein paar Kleinigkeiten wie die Version und die Verzeichnispfade angepasst.
00:03:03Außerdem nutze ich einen Container für das Headscale-UI, eines der vielen Open-Source-Web-Interfaces für Headscale.
00:03:11Das zeige ich euch gleich noch genauer.
00:03:13Caddy dient dabei als Reverse Proxy.
00:03:16Einen Link zu dieser speziellen Docker-Compose-Datei packe ich euch in die Videobeschreibung.
00:03:21In diesem Verzeichnis haben wir zudem einen „lib“- und einen „config“-Ordner.
00:03:26Im „lib“-Ordner liegt hauptsächlich die SQLite-Datenbank, die Benutzer-, Knoten-, DNS-Informationen und mehr verwaltet.
00:03:36Wer kein SQLite nutzen möchte, kann in der Konfiguration stattdessen auf eine Postgres-Datenbank umstellen.
00:03:43Das „config“-Verzeichnis enthält die Tailscale-Konfiguration und die ACL-Richtlinien in einer menschenlesbaren JSON-Datei.
00:03:52Darauf kommen wir noch zu sprechen, aber schauen wir uns erst einmal die Vorlage an, die man aus der Dokumentation kopieren oder direkt per „curl“ laden kann.
00:04:01In der Beispielkonfiguration auf GitHub sehen wir alles, was anpassbar ist – vom Server über Präfixe bis hin zum Speicherort der Richtliniendatei.
00:04:11Meine Konfiguration sieht fast genauso aus; ich habe nur die Server-URL auf eine Cloudflare-Domain geändert, damit die Knoten wissen, wo sie die anderen finden.
00:04:23Dann noch den Pfad zur Richtliniendatei ergänzt, und das war's im Grunde.
00:04:28Die Domain ist eine typische Cloudflare-Domain mit einem A-Record, der über eine Subdomain auf die IP meines Headscale-Servers verweist.
00:04:37In der Caddy-Datei sieht man, dass zwei URLs verwendet werden: eine für das UI unter „/web“ und eine für den Headscale-Proxy.
00:04:49Sobald das steht, muss als Erstes ein neuer Benutzer angelegt werden. Das geht mit diesem Befehl.
00:04:56Ich nenne den Benutzer „Tom“, aber der Name ist völlig egal.
00:05:00Der Benutzer ist erstellt. Mit „users list“ sehen wir alle User – unser neuer User hat hier die ID 6.
00:05:08Bisher sind diesem Benutzer aber noch keine Knoten zugewiesen.
00:05:11Geben wir Tom also ein paar Knoten.
00:05:13Auf dem neuen Server „Ubuntu Test 3“ müssen wir zuerst den Tailscale-Client installieren, indem wir diesen Befehl ausführen.
00:05:23Damit haben wir Zugriff auf die Tailscale-Binärdatei.
00:05:27Hinweis: Wenn du nicht als Root angemeldet bist, musst du die Befehle eventuell mit „sudo“ ausführen.
00:05:31Bevor wir Tailscale starten oder uns einloggen, müssen wir das auf eine spezielle Weise tun, die mit Headscale kompatibel ist.
00:05:38Dazu benötigen wir „Pre-Auth-Keys“. Den passenden Befehl finden wir in der Headscale-Dokumentation unter „Getting Started“.
00:05:46Ich scrolle runter und kopiere mir den Befehl.
00:05:49In meiner Headscale-Konsole gebe ich nun „docker exec“ ein und füge den Befehl ein.
00:05:54Bei der User-ID tragen wir die 6 für Tom ein.
00:05:59Ich muss noch ein zweites Mal „headscale“ davor schreiben, da wir ja in den Container hineingehen.
00:06:04Und da haben wir unseren Pre-Auth-Key.
00:06:07Diesen Befehl kopieren wir nun und führen ihn auf „Ubuntu Test 3“ aus.
00:06:11Wir fügen den Key hier ein.
00:06:15Zuletzt ändern wir den Login-Server auf unsere Headscale-Adresse, die wir als „headscale.pandor.css“ konfiguriert haben.
00:06:23Pandora war leider schon vergeben, sonst hätte ich das genommen.
00:06:26Mit Enter sollte der neue Knoten nun unserem Headscale-Netzwerk hinzugefügt werden.
00:06:31Zurück in der Steuerungsebene zeigt uns „nodes list“ nun „Ubuntu Test 3“ an, der Benutzer Tom gehört und diese IP-Adressen hat.
00:06:44Jetzt fügen wir auch „Ubuntu Test 1“ dem Benutzer Tom hinzu.
00:06:47Dafür lösche ich zuerst den alten Knoten mit der ID 1 und erzwinge das Löschen, um die Bestätigung zu überspringen.
00:06:56Danach erstelle ich einen neuen Pre-Auth-Key und füge ihn bei „Ubuntu Test“ hinzu, wobei ich SSH mit dem entsprechenden Flag aktiviere.
00:07:06Das Gleiche mache ich bei „Ubuntu Test 3“, um die SSH-Verbindung zu ermöglichen.
00:07:13In der Knotenliste erscheinen nun beide Server, Test 1 und Test 3, unter dem User Tom.
00:07:20Versuchen wir, sie zu verbinden.
00:07:21Ich kopiere die IP von Test 3, gehe in Test 1 und gebe „ssh root“ mit dieser IP ein.
00:07:30Nachdem der Key akzeptiert wurde, bin ich von Test 1 aus auf Test 3 eingeloggt.
00:07:35Und das funktioniert natürlich auch in die Gegenrichtung.
00:07:41Falls du meine Schritte exakt befolgt hast, ist die Chance groß, dass es bei dir noch nicht klappt, weil noch die Zugriffsrichtlinien fehlen.
00:07:49Ich zeige dir mal meine.
00:07:51Wenn ich in das Headscale-Verzeichnis gehe, sehen wir im Config-Ordner diese menschenlesbare ACL-JSON-Datei.
00:08:01In dieser sehr einfachen Konfiguration wird im Grunde jede Quelle aus meinem Netzwerk für jedes Ziel und jeden Port akzeptiert.
00:08:11Außerdem erlaubt sie jedem Knoten im Tailnet, sich per SSH ohne zusätzliche Freigabe mit jedem anderen Knoten als Root zu verbinden.
00:08:24Je nach Netzwerk und Sicherheitsanspruch wirst du das sicher strenger regeln wollen, damit nur bestimmte Knoten auf bestimmte Ports zugreifen dürfen.
00:08:33Aber für den Anfang ist das hier eine gute Basis.
00:08:37Auch hierzu findet ihr den Link in der Beschreibung.
00:08:40Vielleicht fragst du dich jetzt: Was ist mit dem Headscale-UI?
00:08:43Macht das den ganzen Prozess einfacher?
00:08:45Ich würde sagen: Jein.
00:08:47Ich zeig's euch mal.
00:08:48Hier ist die URL meines Headscale-UI. Man sieht meine beiden Benutzer, Tess und Tom, sowie einige Infos zu ihnen.
00:08:57Also die Keys und die verbundenen Knoten.
00:09:01Damit das Ganze funktioniert, muss man anfangs einen Headscale-API-Key generieren und hinzufügen.
00:09:06Mein Problem war allerdings die Geräteansicht (Device View).
00:09:09Wie ihr seht, fehlen hier viele Informationen. Es gibt einen TypeScript-Fehler in der Konsole, was eigentlich nicht an mir liegen sollte, da ich den Quellcode nicht angefasst habe.
00:09:22Ab diesem Punkt friert die App oft ein und nichts geht mehr.
00:09:26Eigentlich sollte man hier neue Geräte hinzufügen und Konfigurationen ändern können.
00:09:32Da es aber noch so fehleranfällig ist, fand ich es bisher nicht besonders nützlich.
00:09:35Es gibt noch andere Headscale-UIs, mit denen sich zum Beispiel ACLs leichter verwalten lassen.
00:09:42Meiner Meinung nach braucht man ein Headscale-UI aber bisher nicht unbedingt.
00:09:46Ja, das Setup ist etwas kompliziert.
00:09:49Okay, es ist sogar ziemlich kompliziert.
00:09:51Jemand ohne technischen Hintergrund oder sogar ein Junior-Entwickler könnte bei der Einrichtung allein auf Probleme stoßen.
00:09:57Das ist wohl auch der Grund, warum Tailscale erlaubt, dass ihr Mitarbeiter daran arbeitet – es stellt aktuell keine große Gefahr für das Unternehmen dar.
00:10:07Es bräuchte nur jemanden, der mit Claude Opus ein schickes Interface dafür baut, und schon hätten sie ein echtes Konkurrenzprodukt, das allerdings durch die Lizenz eingeschränkt werden könnte.
00:10:18Aber wenn erst mal alles läuft, funktioniert Headscale fantastisch.
00:10:22Es fehlen zwar noch ein paar Features wie die „Funnel“- und „Serve“-Befehle, um Server öffentlich oder netzwerkintern freizugeben.
00:10:32Auch multiple Tailnets, kurzlebige Knoten (ephemeral nodes) und native Netzwerk-Logs werden noch nicht unterstützt.
00:10:38Für ein Open-Source-Tool ist das aber dennoch sehr beeindruckend.
00:10:42Falls ich irgendwann mal mein OpenClaw komplett offline mit einem lokalen LLM betreiben möchte, wäre das definitiv eine Option.

Key Takeaway

Headscale bietet eine leistungsstarke, selbst gehostete Open-Source-Lösung für verschlüsselte Netzwerke, die Tailscale-Funktionen ohne Kosten und Cloud-Abhängigkeit bereitstellt, sofern man die technisch anspruchsvollere Einrichtung nicht scheut.

Highlights

Headscale ist eine Open-Source-Alternative zu Tailscale

Timeline

Einführung in Headscale und Motivation

Der Sprecher stellt Headscale als die kostenlose Open-Source-Variante von Tailscale vor, die auf eigenen Servern installiert werden kann. Es wird betont, dass Nutzer so die volle Kontrolle über ihr verschlüsseltes Netzwerk behalten, unabhängig von Preiserhöhungen oder Internet-Ausfällen des kommerziellen Anbieters. Besonders interessant ist der Fakt, dass Headscale von einem Tailscale-Mitarbeiter entwickelt wurde, was Fragen zur internen Strategie aufwirft. Diese Einleitung legt den Grundstein für die Analyse, warum man eine eigene Infrastruktur für sein VPN bevorzugen sollte. Der Abschnitt endet mit der Aufforderung, den Kanal zu abonnieren, um mehr über diese Hintergründe zu erfahren.

Live-Demo: Verbindung zwischen Servern

In diesem praktischen Teil zeigt der Ersteller ein Setup mit drei Hetzner-Servern, wobei einer als Steuerungsebene fungiert. Mittels Docker-Befehlen werden die verbundenen Knoten "Ubuntu Test" und "Ubuntu Test 2" sowie deren IP-Adressen visualisiert. Der Sprecher demonstriert erfolgreich eine SSH-Verbindung zwischen den internen Knoten, während ein Zugriff von außerhalb des Netzwerks scheitert. Dies belegt die Effektivität des Tailnets und die Sicherheit der verschlüsselten Umgebung. Es wird klargestellt, dass Headscale volle Flexibilität ohne Vendor-Lock-in bietet, auch wenn die Ersteinrichtung komplexer als beim Standard-Tailscale ist.

Technische Architektur und Docker-Setup

Hier geht der Sprecher tief in die Konfiguration der Docker-Compose-Datei und die benötigten Container ein. Es kommen drei Container zum Einsatz: Headscale selbst, ein Web-UI und Caddy als Reverse Proxy für die TLS-Verschlüsselung. Die Datenstruktur umfasst einen "lib"-Ordner für die SQLite-Datenbank und einen "config"-Ordner für ACL-Richtlinien im JSON-Format. Der Nutzer erfährt, dass alternativ auch Postgres als Datenbank für größere Setups genutzt werden kann. Abschließend wird erklärt, wie die Server-URL über Cloudflare-Domains konfiguriert wird, damit die Knoten den Controller finden können.

Benutzerverwaltung und Knoten-Registrierung

Der Prozess beginnt mit dem Anlegen eines neuen Benutzers namens "Tom" über das Terminal innerhalb des Docker-Containers. Danach wird die Installation des Tailscale-Clients auf einem neuen Zielserver ("Ubuntu Test 3") durchgeführt, um diesen ins Netzwerk zu integrieren. Ein entscheidender Schritt ist die Erstellung eines "Pre-Auth-Keys" über Headscale, da der Standard-Login-Server auf die eigene Domain umgebogen werden muss. Nach der erfolgreichen Registrierung wird gezeigt, wie man SSH-Verbindungen zwischen den neuen Knoten autorisiert. Der Sprecher weist darauf hin, dass ohne diese expliziten Schritte keine Kommunikation zwischen den Systemen möglich wäre.

ACL-Richtlinien und Web-UI-Analyse

In diesem Abschnitt wird die Wichtigkeit der Access Control Lists (ACLs) erläutert, die den Datenverkehr im Netzwerk regeln. Der Sprecher zeigt eine einfache JSON-Konfiguration, die globalen Zugriff erlaubt, empfiehlt jedoch für Produktivumgebungen strengere Regeln. Im Anschluss wird das Headscale-Web-UI kritisch begutachtet, welches zwar optisch ansprechend ist, aber im Test durch TypeScript-Fehler und Instabilität auffiel. Da die App oft einfriert und wichtige Geräteinformationen fehlen, wird das UI als derzeit nicht zwingend notwendig erachtet. Der Fokus sollte laut Sprecher stattdessen auf der stabilen Verwaltung über die Kommandozeile liegen.

Fazit, Einschränkungen und Ausblick

Das Video schließt mit einer ehrlichen Einschätzung zur Komplexität ab, die für Einsteiger oder Junior-Entwickler eine Hürde darstellen könnte. Es wird spekuliert, dass Tailscale das Projekt gerade deshalb toleriert, weil es keine unmittelbare kommerzielle Bedrohung ohne ein poliertes Interface darstellt. Dennoch werden fehlende Features wie "Funnel", kurzlebige Knoten oder native Logs erwähnt, die in der Open-Source-Version noch nicht implementiert sind. Trotz dieser Lücken wird Headscale als fantastisches Werkzeug gelobt, das besonders für Offline-Szenarien oder lokale KI-Anwendungen („OpenClaw“) enormes Potenzial bietet. Der Sprecher zeigt sich beeindruckt von der Leistungsfähigkeit dieses Community-Projekts.

Community Posts

View all posts