Ein Tailnet, in dem jedes Gerät jedes andere erreicht, ist bereits nützlich. Drei Ergänzungen machen daraus ein Netzwerk statt nur einer Ansammlung von Tunneln, und alle drei teilen eine Eigenschaft, über die man leicht stolpert: Der Client kündigt eine Fähigkeit an, und der Server muss sie genehmigen. Eine Route, die angekündigt, aber nicht genehmigt wurde, existiert schlicht nicht — und zwar stillschweigend; das Symptom ist, dass Sie den Router anpingen können, aber nichts dahinter.
Ein Subnetzrouter — ein ganzes LAN ins Tailnet bringen. Eine Maschine im Heim- oder Büronetzwerk kündigt dessen Adressbereich an; jedes andere Gerät erreicht dann die Drucker, das NAS und die Verwaltungsoberflächen dahinter, ohne dass dort sonst irgendetwas installiert werden muss. Aktivieren Sie zuerst die Weiterleitung im Kernel, sonst bleiben die Pakete ohne Fehlermeldung am Router hängen.
# On the machine that sits inside the LAN:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-ts.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-ts.conf
sudo sysctl -p /etc/sysctl.d/99-ts.conf
sudo tailscale up --login-server https://vpn.example.com \
--advertise-routes=192.168.1.0/24 --accept-routes
# On the control server — approve it, or it does not exist.
# The subcommand moved between releases; check `hs nodes --help` first.
hs nodes list
hs nodes approve-routes --identifier 3 --routes 192.168.1.0/24
Ein Exit-Node — alles über den VPS nach außen leiten. Derselbe Mechanismus mit einer weiter gefassten Route: Ein Gerät, das sich selbst als Exit-Node ankündigt, bietet an, die gesamte Internetverbindung eines anderen Geräts zu tragen. In einem nicht vertrauenswürdigen Café- oder Hotelnetzwerk ist genau das gewünscht, und es ist das Nächste, was dieser Leitfaden einem persönlichen VPN zu bieten hat.
# On the VPS that will do the exiting (forwarding must be on, as above):
sudo tailscale up --login-server https://vpn.example.com --advertise-exit-node
# Approve it on the control server, then on the laptop:
tailscale set --exit-node=100.64.0.1 --exit-node-allow-lan-access
tailscale set --exit-node= # turn it off again
Ein Exit-Node ist kein kommerzielles VPN und sollte Ihnen auch nicht als solches verkauft werden — nicht einmal von Ihnen selbst. Seine Adresse gehört Ihnen allein und ist stabil, was hervorragend gegen das Café-WLAN wirkt und nutzlos gegen langfristige Korrelation über mehrere Seiten hinweg — der Kompromiss wird im Grundlagen-Leitfaden ausführlich erklärt. Beachten Sie auch, dass Sie den Exit-Node auf einem zweiten, günstigeren VPS betreiben und den Kontrollserver dadurch vollständig von weitergeleitetem Traffic freihalten können.
Zugriffsregeln — schreiben Sie sie, bevor die zweite Person beitritt. Die Standardrichtlinie lautet „alles erlauben“, was für ein Tailnet mit einer Person richtig ist und falsch in dem Moment, in dem jemand anderes darauf ist. Die Richtlinie ist ein kleines HuJSON-Dokument: Gruppen von Nutzern, Tags für Maschinen und eine Liste von Regeln, die festlegen, welche Quellen welche Ziele auf welchen Ports erreichen dürfen. Richten Sie die Konfiguration auf die Datei aus, halten Sie die Datei in Versionskontrolle, und laden Sie nach jeder Änderung neu.
{
"groups": {
"group:admin": ["alice"],
"group:contractor":["bob"]
},
"tagOwners": {
"tag:server": ["group:admin"],
"tag:exit": ["group:admin"]
},
"acls": [
// Admins reach everything.
{ "action": "accept", "src": ["group:admin"], "dst": ["*:*"] },
// The contractor reaches one machine, on two ports, and nothing else.
{ "action": "accept", "src": ["group:contractor"],
"dst": ["tag:server:22,443"] }
],
"autoApprovers": {
"routes": { "192.168.1.0/24": ["tag:server"] },
"exitNode": ["tag:exit"]
}
}
Zwei Anmerkungen zu dieser Datei. Die Richtliniensprache stammt von Tailscale, und Headscale implementiert davon eine große und wachsende Teilmenge, nicht die Gesamtheit — prüfen Sie die Dokumentation für Ihre Version, bevor Sie sich auf eine exotische Regel verlassen. Und wo die Richtlinie lebt, hat sich verschoben: Ältere Releases nannten einen Pfad in der Top-Level-Konfiguration, neuere gruppieren sie unter einem Policy-Abschnitt mit einem Modus, der die Regeln auch in der Datenbank halten kann. Beides ist dokumentiert; entscheidend ist, was Ihre fixierte Version mitliefert.
MagicDNS — kurze Namen, und der eigene Resolver überall. Mit aktiviertem MagicDNS antwortet jedes Gerät auf einen kurzen Namen innerhalb des in Schritt 02 gewählten Suffixes, sodass ssh nas von überall aus funktioniert, ganz ohne Hosts-Datei. Die zweite Hälfte ist die interessante: Der Kontrollserver schiebt außerdem eine Nameserver-Liste an jeden Client, was bedeutet, dass der Resolver, den Sie im Leitfaden zum privaten DNS-Resolver gebaut haben, Ihr Telefon auch bei mobilen Daten bedienen kann — mit Filterung, Caching und ohne jede Protokollierung —, während er auf einer Tailnet-Adresse lauscht, die vom Internet aus überhaupt nicht erreichbar ist.
dns:
magic_dns: true
base_domain: ts.example.com
override_local_dns: true # beat whatever DHCP handed the device
nameservers:
global:
- 100.64.0.5 # your resolver, on the tailnet