thomas blog
  • About
Blogs

Headscale & Tailscale: Einrichtung und Nutzung im privaten Netzwerk

Motivation

Tailscale bietet eine einfache Möglichkeit, Geräte über ein Peer-to-Peer-VPN sicher miteinander zu verbinden – selbst hinter NAT oder CG-NAT. Für mehr Kontrolle und Datenschutz wurde in diesem Setup auf Headscale gesetzt, einer selbst gehosteten Open-Source-Implementierung des Tailscale-Control-Servers.

Vorteile:

  • Zugriff auf entfernte Geräte ohne Portweiterleitungen oder dynamische DNS-Dienste
  • Sichere Kommunikation zwischen Netzwerken (z. B. Wohnung & Gartenhaus)
  • Integration selbst gehosteter Dienste (z. B. Vaultwarden, Home Assistant)

Übersicht des Netzwerks

Gerät Hostname IP im Tailnet Erreichbarkeit Besonderheiten
Headscale VPS headscale Public IP Öffentlich (Hetzner) Selbst gehosteter Control-Server
Home Assistant (Zuhause) heim-ha 100.64.0.7 über Add-on Add-on mit Web-Auth verbunden
Home Assistant (Garten) garten-ha 100.64.0.8 über Add-on Add-on mit Web-Auth verbunden
BirdnetPi birdnet 100.64.0.10 Direkt mit SSH Tailscale CLI auf Alpine Linux, Subnet Routing aktiviert
Vaultwarden vaultwarden 100.64.0.11 Caddy Reverse Proxy Zugriff via TLS mit interner Domain

Lernziele & Learnings

  • Tailscale kann auf Home Assistant via Add-on verwendet werden, aber das CLI steht dort nicht zur Verfügung.
  • Headscale funktioniert problemlos als Login-Server für Tailscale-Clients.
  • WebAuth ist einem Auth-Key vorzuziehen, wenn man Geräte sicher und kontrolliert einbinden will.
  • Dienste wie Vaultwarden benötigen einen Reverse Proxy (Caddy) mit interner TLS-Konfiguration (tls internal) im Tailscale-Netzwerk.
  • Geräte mit direktem SSH-Zugang (wie BirdNET-Pi) können flexibel für Subnet-Routing oder Netzwerkdiagnose eingesetzt werden.

Schrittweise Anleitung

1. Headscale Server einrichten (Hetzner VPS)

sudo apt install headscale
sudo headscale users create <USER>
sudo headscale preauthkeys create --reusable --ephemeral --user <USER> --output json

2. Auf einem Client (z. B. BirdnetPi) Tailscale installieren

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --login-server=https://headscale.DOMAIN.tld

3. Geräte benennen (optional via Headscale CLI)

headscale nodes rename --identifier <ID> <neuer-name>

4. Dienste verfügbar machen

Beispiel: Vaultwarden über Caddy reverse-proxien

Caddyfile:

vaultwarden.hs.DOMAIN.tld {
  reverse_proxy localhost:11001
  tls internal
}
sudo systemctl restart caddy

Subnet-Routing aktivieren (z. B. für Routerzugriff im Garten)

Auf BirdnetPi:

sudo tailscale up --advertise-routes=192.168.1.0/24 --login-server=https://headscale.DOMAIN.tld

Auf dem Headscale-Server:

sudo headscale routes list
sudo headscale routes enable --route <ID>

Wichtig:

Nur der Zugriff auf das Subnetz wird darüber ermöglicht – kein gesamter Datenverkehr wird geroutet.


Wichtige Befehle (Copy & Paste)

Installation

curl -fsSL https://tailscale.com/install.sh | sh

Auth mit Headscale

sudo tailscale up --login-server=https://headscale.DOMAIN.tld

Status prüfen

tailscale status
tailscale ip -4

Namen ändern

headscale nodes list
headscale nodes rename --identifier <ID> <hostname>

Route freigeben

sudo headscale routes enable --route <ID>

Quellen & Dokumentation

Thema Link
Headscale GitHub https://github.com/juanfont/headscale
Tailscale CLI Docs https://tailscale.com/kb/1080/install-linux
Tailscale Serve/Funnel https://tailscale.com/kb/1242/tailscale-serve
Caddy Reverse Proxy TLS https://caddyserver.com/docs/automatic-https
Subnet Routing https://tailscale.com/kb/1019/subnets
Alpine Tailscale Net-Startup https://tailscale.com/kb/1103/alpine-linux

© thomas blog 2025