Headscale #
Headscale ist eine quelloffene, selbst gehostete Implementierung des Tailscale Control Servers. Es ermöglicht Ihnen, Ihr eigenes Tailscale-Netzwerk zu betreiben und somit die vollständige Kontrolle über Ihre Knoten und Daten zu haben.
Deployment #
Quelle #
Das Projekt basiert auf der offiziellen Headscale-Website. Das Helm-Chart stammt aus einem privaten Repository.
Dokumentation #
Funktion #
Dieser Dienst bietet einen selbst gehosteten Tailscale Control Server, der die Verwaltung von Tailscale-Knoten und die Einrichtung eines privaten Tailscale-Netzwerks ermöglicht. Er unterstützt die Integration mit Cert-Manager für TLS-Zertifikate und MetalLB für LoadBalancer-IPs.
Lokale Anpassungen #
- Die
values.yaml-Datei konfiguriert den Headscale-Server, einschließlich der Listen-Adressen, Server-URL und DNS-Einstellungen. - Die Persistenz wird über einen
nfs-clientStorageClass verwaltet. - Es sind Patches für den DERP-Dienst enthalten, um Dual-Stack (IPv4/IPv6)-Unterstützung zu ermöglichen.
- TLS-Zertifikate werden über Cert-Manager verwaltet.
- Private Schlüssel für WireGuard, Noise und DERP werden als Secrets generiert.
Wichtige Einstellungen #
- Server URL: Die öffentliche URL des Headscale-Servers ist
https://hs.zyria.de. - Datenbank: Headscale verwendet eine SQLite-Datenbank, die auf einem persistenten Volume gespeichert wird.
- Zertifikate: TLS-Zertifikate für den Ingress werden automatisch von
cert-managerausgestellt. - DNS: Nodes im Headscale-Netzwerk erhalten DNS-Namen unter der Domain
hsn.zyria.de. - DERP: Es werden die öffentlichen DERP-Server von Tailscale verwendet. Ein eigener DERP-Service ist konfiguriert, aber nicht als Server aktiviert. Der STUN-Dienst läuft über einen LoadBalancer-Service.
- Speicher: Die Konfiguration und die SQLite-Datenbank werden auf einem persistenten Volume via NFS gespeichert.
Installation #
Die Anwendung wird mittels Kustomize und Helm durch ArgoCD im Kubernetes-Cluster bereitgestellt. Die Konfiguration befindet sich im apps/headscale-Verzeichnis. Eine manuelle Installation kann mit folgendem Befehl durchgeführt werden:
1kubectl kustomize --enable-helm apps/headscale | kubectl apply -n headscale -f -
Abhängigkeiten #
- Ein laufender Kubernetes-Cluster.
- Ein Ingress-Controller (z.B. Traefik) für den externen Zugriff.
- Eine Zertifikatsmanagement-Lösung (z.B. cert-manager) zur Bereitstellung von TLS-Zertifikaten.
- MetalLB für LoadBalancer-IP-Zuweisung.
- Ein NFS-Server für persistente Speicherung.