🕸️Tailscale – WireGuard als Mesh
🧠Control Plane vs. Data Plane
Jeder Knoten hält eine Verbindung zum Koordinationsserver: Anmeldung, Node-Keys, Netmap, ACLs, DNS-Einstellungen. Nur Metadaten – wenige Kilobyte, kein Nutzverkehr.
🔐Drei Schlüssel pro Gerät
Identifiziert das Gerät gegenüber dem Koordinationsserver. Damit wird die verschlüsselte Control-Verbindung (Noise-Protokoll) aufgebaut. Bleibt über Neuanmeldungen hinweg bestehen.
Der eigentliche WireGuard-Schlüssel. Der öffentliche Teil wird über den Koordinationsserver an alle berechtigten Peers verteilt. Läuft standardmäßig nach 180 Tagen ab (Key Expiry) und wird dann durch erneute Anmeldung ersetzt.
Nur für „Discovery“-Nachrichten beim NAT-Traversal (Ping/Pong, CallMeMaybe). So bleiben diese Steuerpakete authentisch, ohne den WireGuard-Handshake zu stören.
🕳️NAT-Traversal und DERP
🏷️MagicDNS und Adressen
- Jedes Gerät bekommt eine feste Adresse aus
100.64.0.0/10(Carrier-Grade-NAT-Bereich, RFC 6598) und eine IPv6-Adresse ausfd7a:115c:a1e0::/48. - MagicDNS registriert automatisch Namen wie
laptopbzw.laptop.<tailnet>.ts.net. Der Resolver läuft lokal im Client unter100.100.100.100– Anfragen verlassen das Gerät für Tailnet-Namen gar nicht. - Tunnel-MTU standardmäßig 1280 (IPv6-Minimum) statt 1420 – etwas weniger effizient, dafür robust auf Strecken mit zusätzlichem Overhead.
$ tailscale status 100.101.12.4 laptop alice@ linux - 100.101.12.9 server alice@ linux active; direct 203.0.113.50:41641 100.101.12.21 handy alice@ android active; relay "fra" $ ping server # MagicDNS löst auf 100.101.12.9 auf $ tailscale ping handy # zeigt, ob direkt oder über DERP
🛂ACLs und Grants
{
"groups": { "group:admins": ["alice@example.com"] },
"tagOwners": { "tag:server": ["group:admins"] },
"grants": [
// Admins dürfen per SSH und HTTPS auf alle Server
{ "src": ["group:admins"], "dst": ["tag:server"], "ip": ["tcp:22", "tcp:443"] },
// Alle Mitglieder dürfen einen Exit-Node benutzen
{ "src": ["autogroup:member"], "dst": ["autogroup:internet"], "ip": ["*"] }
]
}ip) und Anwendungsrechte (app) in einer Regel mit src und dst. Die ältere acls-Syntax (action: accept) wird weiter unterstützt.tag:server. Regeln hängen dann an der Rolle, nicht an einem Benutzerkonto – wichtig für Maschinen ohne Besitzer.🚪Subnet-Router und Exit-Nodes
Ein Tailscale-Gerät macht ein ganzes LAN erreichbar, auf dem kein Tailscale läuft (Drucker, NAS, Kameras). Technisch: das Präfix landet in den AllowedIPs dieses Peers – Cryptokey Routing wie auf der WireGuard-Seite.
# auf dem Router-Gerät (IP-Forwarding aktivieren!) sudo tailscale up --advertise-routes=192.168.178.0/24 # Route in der Admin-Konsole freigeben; # Linux-Clients: tailscale up --accept-routes
Ein Gerät bietet sich als Ausgang ins Internet an – der Peer erhält dann 0.0.0.0/0 und ::/0 als AllowedIPs. Praktisch im fremden WLAN oder um „von zu Hause aus“ zu surfen.
# Exit-Node anbieten sudo tailscale up --advertise-exit-node # auf dem Client benutzen tailscale set --exit-node=server
🏠Headscale – die Control Plane selbst betreiben
Headscale ist eine unabhängige Open-Source-Implementierung (BSD-3-Clause) des Tailscale-Koordinationsservers. Die offiziellen Tailscale-Clients verbinden sich per tailscale up --login-server https://… damit statt mit dem Tailscale-Dienst.
- Öffentliche Schlüssel, Gerätelisten und Policies liegen auf dem eigenen Server.
- Unterstützt u. a. Pre-Auth-Keys, OIDC-Anmeldung, ACL-Policies, MagicDNS, Subnet-Router und Exit-Nodes.
- Ein eingebauter DERP-Server kann aktiviert werden – oder man nutzt die öffentlichen DERP-Relays von Tailscale.
- Ausgelegt für ein einzelnes Tailnet (Selbsthoster, kleine Teams), nicht für einen Mehrmandanten-Dienst.