Zum Inhalt

Headplane

Web-Oberfläche zur Verwaltung von Headscale — Knoten, Benutzer, Routen und ACLs ohne CLI. GitHub

URL headscale.homelab-external.robinwerner.net/admin
Port 3000 (containerintern)
Netze proxy, internal
Zugriff Gruppe hetzner-admin über Authelia

Headplane teilt sich die Domain mit der Headscale-API und liegt unter dem Pfad-Präfix /admin.

Nur der /admin-Router trägt die Auth-Middleware

Die Headscale-VPN-Endpunkte /key, /ts2021 und /api liegen auf derselben Domain und bleiben bewusst ungeschützt. Würde man die Domain als Ganzes hinter Forward-Auth legen, käme kein VPN-Client mehr durch — das Tailscale-Protokoll kann sich an keinem Login-Portal anmelden.

Version muss zu Headscale passen

Headplane 0.6.1 funktioniert nicht mit Headscale v0.28

Nötig ist 0.6.2 oder neuer. Die beiden Projekte sind eng gekoppelt; ein Versionssprung bei Headscale verlangt in der Regel auch einen bei Headplane.

Fallstricke

Kein v-Präfix am Image-Tag

Richtig ist ghcr.io/tale/headplane:0.6.2nicht v0.6.2. Mit v-Präfix existiert der Tag auf ghcr.io nicht.

Der Docker-Socket braucht das unix://-Präfix

In der Headplane-Konfiguration muss unix:///var/run/docker.sock stehen, nicht nur der Pfad. Headplane nutzt den Socket, um den Headscale-Container nach Konfigurationsänderungen neu zu starten.

Ein unhealthy Container ist für Traefik unsichtbar

Traefik nimmt Container ohne bestandenen Healthcheck nicht ins Routing auf — die Folge ist ein 404, kein Fehler. Der Healthcheck ruft das Binary /bin/hp_healthcheck auf.

Betrieb

cd /opt/homelab-repo/hetzner
docker compose logs -f headplane
docker compose ps headplane          # healthy? sonst kein Routing