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 |