Das Eisbär-Maskottchen von NordBastion steht in einer dunklen, nordischen Steinhalle, eine Pfote auf einem geschnitzten runischen Schlussstein-Obelisken, darüber ein schwebender, cyanfarbener holografischer Ring aus Schlüsseln, sowie fünf leuchtende Gerätesymbole — Laptop, Telefon, Tablet, Serverturm und Globus —, die oben in einem hellen, cyanfarbenen Mesh direkt miteinander verbunden sind, während schwache gepunktete Schlüssellinien vom Ring zu jedem Gerät fallen, dazu ein Serverrack und ein von Polarlicht erleuchtetes Bogenfenster hinter ihm
Anleitung · Privates Netzwerk·19 Min. Lesezeit · 50 Min. Praxis

Ihr eigener Kontrollserver.
Die Karte ist das, was es wert ist, gehalten zu werden.

Ein Mesh-VPN braucht jemanden, der die Schlüssel ausgibt. Bei Tailscale ist dieser Jemand ein Unternehmen; bei reinem WireGuard sind Sie es selbst, von Hand, für immer. Headscale ist die dritte Antwort: derselbe Open-Source-Client, im Gespräch mit einem Koordinationsserver auf einer Maschine, die Sie anonym mieten. Sechs Schritte zu einem Tailnet, dessen Gerätekarte, Zugriffsregeln und Fallback-Relays vollständig Ihnen gehören — Headscale hinter Caddy, schriftlich festgehaltene ACLs, MagicDNS auf den eigenen Resolver ausgerichtet, ein Subnetzrouter, ein Exit-Node und ein eingebettetes DERP. Die Maschine kostet $3.90 im Monat. Getestet unter Debian 12.

Die sechs Schritte
  1. 01

    Wählen

    WireGuard, Tailscale, Headscale

  2. 02

    Bereitstellen

    Drei Namen, vor dem Boot festgelegt

  3. 03

    Bereitstellen

    Headscale, Caddy, eine Konfiguration

  4. 04

    Registrieren

    Nutzer, Pre-Auth-Keys, Clients

  5. 05

    Routen

    Subnetze, Exit-Node, ACLs

  6. 06

    Behalten

    DERP, Backups, Upgrades

Bevor Sie beginnen · Was eine Kontrollebene ist

Niemand kann den Traffic mitlesen. Jemand hält trotzdem die Karte.

WireGuard ist bewusst unvollständig. Es ist ein kleiner, schneller, überprüfbarer Tunnel zwischen zwei öffentlichen Schlüsseln, und es hat schlicht keine Meinung dazu, wie diese Schlüssel einander erreichen. Genau diese Auslassung macht das Protokoll so gut, wie es ist — und sie ist auch der Grund, warum ein WireGuard-Netzwerk aus fünfzehn Geräten eine Tabellenkalkulation ist. Jeder Peer braucht den öffentlichen Schlüssel und die aktuelle Adresse jedes anderen Peers, und jeder Laptop, der zwischen Büro, Zug und Hotel wechselt, macht einen Teil dieser Tabelle ungültig.

Ein Mesh-VPN ist die Antwort auf genau dieses Problem, und es lohnt sich, seine Form präzise zu beschreiben, denn sie bestimmt, wem Sie eigentlich vertrauen. Die Datenebene bleibt genau, wie sie war: Jedes Gerät erzeugt lokal sein eigenes Schlüsselpaar, behält die private Hälfte und verschlüsselt direkt zu seinen Peers. Darüber liegt eine Kontrollebene — ein kleiner Dienst, der öffentliche Schlüssel und Endpunkte sammelt, jedem Gerät die Liste der Peers übergibt, mit denen es sprechen darf, und zwei Geräten hinter feindseligen Routern hilft, sich zu finden. Dieser Dienst hält niemals einen privaten Schlüssel und sieht niemals ein Byte im Klartext.

Was er tatsächlich hält, ist die Karte, und die Karte ist interessanter, als die meisten annehmen. Jeder Gerätename und jeder Nutzername. Jeder öffentliche Schlüssel. Die öffentliche Adresse, von der aus jedes Gerät gerade jetzt anwählt, was eine Live-Aufzeichnung davon ist, wo sich Ihr Laptop und Ihr Telefon physisch befinden. Die Zeitpunkte, zu denen jedes Gerät sich verbindet und trennt, was Ihren Tag beschreibt. Und die Richtlinie, die festlegt, wer was erreichen darf, was Ihre Organisation beschreibt. Nichts davon erfordert bösen Willen von irgendjemandem; es ist einfach das, wofür ein Koordinationsserver da ist.

Es gibt eine weitere Eigenschaft, die mehr zählt als die Metadaten. Die Kontrollebene ist das, was Schlüssel verteilt, also ist sie auch das, was einen hinzufügen könnte. Ein Kontrollserver, der kompromittiert oder gezwungen wird, kann Ihren Geräten mitteilen, dass eine neue Maschine ein legitimes Mitglied des Netzwerks ist — und Ihre Geräte werden, indem sie genau das tun, wofür sie gebaut wurden, zu ihr verschlüsseln. Tailscale nimmt das ernst genug, um dagegen ein Signierungsfeature gebaut zu haben. Self-Hosting löst dasselbe Problem aus der anderen Richtung: Die Partei, die es tun könnte, sind Sie selbst. Vier Konstellationen, und was jede davon tatsächlich preisgibt:

Eigenschaft Manuelles WireGuard Tailscale, gehostet Headscale auf Ihrem VPS Headscale + eigenes DERP
Wer die Nutzdaten lesen kannNiemand außer den PeersNiemand außer den PeersNiemand außer den PeersNiemand außer den Peers
Wer die Gerätekarte hältSie selbst, in einer TextdateiEin Unternehmen, in seinem RechtsraumSie selbst, auf Ihrem VPSSie selbst, auf Ihrem VPS
Wer sieht, von wo aus sich Geräte verbindenNur die Peers selbstDer Koordinationsserver, fortlaufendIhr Server, fortlaufendIhr Server, fortlaufend
Wer weiterleitet, wenn eine direkte Verbindung scheitertNiemand — die Verbindung schlägt einfach fehlDie Relay-Flotte des AnbietersStandardmäßig immer noch die Relays des AnbietersIhr Relay, in Ihrem Rechenzentrum
Das zwanzigste Gerät hinzufügenNeunzehn KonfigurationsänderungenEin BefehlEin BefehlEin Befehl
Wählen Sie sie, wennWenige Geräte, keines davon unterwegsSie wollen null Betriebsaufwand und nehmen die Karte in KaufSie wollen die Karte und können eine kleine Maschine betreibenSie wollen die Karte und auch den Fallback-Pfad

Die erste Spalte ist kein Strohmann-Argument. Für eine statische Handvoll Server ist handgeschriebenes WireGuard tatsächlich die bessere technische Antwort, und es ist ein Dienst weniger, den man patchen muss. In diesem Leitfaden geht es um den Punkt, an dem die Tabellenkalkulation aufhört, lustig zu sein.

Schritt 01 · Wählen

Brauchen Sie eine Kontrollebene? Zählen Sie die Geräte, die sich bewegen.

Es gibt drei ehrliche Antworten auf „Ich möchte, dass meine Maschinen einander privat erreichen“, und nur eine davon ist dieser Leitfaden. Reines WireGuard ist die kleinste: ein Kernelmodul, eine Konfigurationsdatei pro Peer, kein Daemon außer dem Interface, nichts aktuell zu halten außer dem Betriebssystem. Wenn Ihre Geräte Server mit festen Adressen sind und Sie sie an einer Hand abzählen können, hören Sie hier auf und lesen Sie stattdessen den WireGuard-Leitfaden. Sie enden mit weniger Software und einer kürzeren Liste von Dingen, die kaputtgehen können.

Tailscale ist die größte Lösung: darunter dasselbe WireGuard, dazu ein Koordinationsdienst, NAT-Traversal, das hinter fast allem funktioniert, eine Relay-Flotte auf mehreren Kontinenten, eine Weboberfläche, Single Sign-on und ein Support-Vertrag. Es ist wirklich exzellente Software, und die kostenlose Stufe deckt einen Haushalt bequem ab. Der Preis ist kein Geld — es ist, dass die Karte jedes Geräts, das Sie besitzen, und die Aufzeichnung, von wo aus sich jedes einzelne verbindet, in der Datenbank eines Unternehmens liegt.

Headscale ist die dritte Antwort, und sie ist enger gefasst als beide anderen: eine Open-Source-Neuimplementierung des Koordinationsservers, von Ihnen selbst betrieben, angesprochen vom selben offiziellen Client. Sie behalten die Automatisierung und das NAT-Traversal; Sie übernehmen dafür einen kleinen Dienst zum Betreiben, einen unvollständigen Funktionsumfang und Upgrades, die man lesen muss. Niemand sollte behaupten, das sei umsonst. Es kauft genau eine Sache, und das ist die Sache, um die es dieser Seite geht: Niemand sonst hält die Karte.

Die Fünf-Geräte-Schwelle

Manuelle WireGuard-Konfiguration wächst quadratisch mit der Flottengröße: Vier Peers sind sechs Verbindungen, zehn Peers sind fünfundvierzig, zwanzig Peers sind hundertneunzig. Kommt ein mobiler Laptop hinzu, dessen Endpunkt mit jedem Netzwerk wechselt, dem er beitritt, hört die Wartung auf, gelegentlich zu sein. In der Praxis liegt der Wendepunkt bei etwa fünf Geräten, oder beim ersten Gerät, das täglich umzieht, oder bei der ersten Zugriffsregel, die sich nicht als „jeder erreicht alles“ ausdrücken lässt.

Noch etwas, das Sie jetzt statt später entscheiden sollten, weil es beeinflusst, was Sie installieren: ob dieses Netzwerk nur für Sie ist oder ob noch andere Personen beitreten werden. Ein Tailnet für eine Person kann intern weit offenstehen, ohne dass etwas Schlimmes passiert. Ein Tailnet mit einem Kollegen, einem Auftragnehmer oder einem Familienmitglied darauf braucht schriftliche Zugriffsregeln ab der ersten Woche — Schritt 05 — und es braucht getrennte Nutzerkonten, statt dass sich alle einen Login teilen. Das im Voraus zu entscheiden kostet einen Absatz; es nachträglich einzurichten kostet einen Nachmittag.

Schritt 02 · Bereitstellen

Drei Namen, entschieden vor dem ersten Boot. Alle drei lassen sich nur schwer ändern.

Bestellen Sie zuerst die Maschine. Im Panel: Order → VPS → Sentinel, Image Debian 12, in welcher Bastion auch immer die Karte leben soll — Helsinki, Stockholm, Oslo oder Reykjavík. Für die Kontoeröffnung ist keine E-Mail-Adresse erforderlich, und die Rechnung wird in Monero, Bitcoin, Lightning oder jedem anderen unterstützten Asset beglichen. Wählen Sie die Bastion, die der Mehrheit Ihrer Geräte am nächsten liegt, wenn Sie auch das Relay aus Schritt 06 betreiben wollen; Latenz zu einem Relay ist Latenz auf jeder Verbindung, die es trägt.

Arbeiten Sie dann die Checkliste zur Härtung der ersten Stunde ab — SSH nur mit Schlüssel auf einem verlegten Port, unbeaufsichtigte Updates, eine Default-Deny-Firewall. Alles Folgende setzt eine Maschine voraus, die nicht bereits jemand anderem gehört, und diese hier ist mehr wert als die meisten: Es ist die Maschine, die entscheidet, welchen Schlüsseln auf jedem Gerät, das Sie besitzen, vertraut wird.

Legen Sie diese drei fest, bevor sich irgendetwas registriert

Jedes Gerät backt alle drei in seinen Zustand ein, sobald es beitritt — eine nachträgliche Änderung bedeutet also, die gesamte Flotte von Hand neu zu registrieren. Eins: die Kontrollserver-URL — die exakte öffentliche HTTPS-Adresse, die jeder Client anwählt, Schema und Hostname eingeschlossen. Zwei: das DNS-Suffix des Tailnets, die Domain, für die MagicDNS intern antwortet; sie muss eine sein, die Sie kontrollieren, und sie darf dem Hostnamen des Kontrollservers weder über- noch untergeordnet sein — das ist der mit Abstand häufigste Fehler beim ersten Boot. Drei: die Adressbereiche, die das Tailnet vergibt, üblicherweise der Carrier-Grade-NAT-Block 100.64.0.0/10 für IPv4 und ein Unique-Local-/48 für IPv6; belassen Sie es bei den Standardwerten, sofern diese nicht bereits mit einem von Ihnen genutzten Netzwerk kollidieren.

Ein durchgerechnetes Beispiel, und die Form, die Sie übernehmen sollten: Der Kontrollserver antwortet unter vpn.example.com, das Tailnet-Suffix lautet ts.example.com, und die Adressbereiche bleiben auf ihren Standardwerten. Beachten Sie, dass das Suffix ein Geschwister des Kontroll-Hostnamens ist, nicht dessen übergeordneter Bereich — vpn.example.com und ts.example.com teilen sich eine registrierbare Domain, aber keines enthält das andere. Richten Sie einen A-Record — und einen AAAA, wenn es auch über IPv6 erreichbar sein soll — auf die Maschine, und lassen Sie ihn propagieren, bevor Sie beginnen, denn der Reverse Proxy wird beim ersten Hochfahren versuchen, ein Zertifikat für diesen Namen zu beziehen.

Schreiben Sie dann die Firewall-Regeln, solange noch nichts lauscht. Der Kontrollserver ist notwendigerweise ein öffentlicher HTTPS-Endpunkt: Jedes Gerät, in jedem Netzwerk, muss ihn erreichen können. Der UDP-Port wird nur gebraucht, wenn Sie vorhaben, in Schritt 06 ein eigenes Relay zu betreiben, und es ist einfacher, ihn jetzt zu öffnen, als sein Fehlen später zu debuggen.

ufw default deny incoming
ufw allow 47222/tcp                  # administrative SSH, moved
ufw allow 80/tcp                     # ACME HTTP-01 challenge
ufw allow 443/tcp                    # the control server, and DERP over HTTPS
ufw allow 3478/udp                   # STUN, only if you run your own relay
ufw enable
ufw status numbered

Installieren Sie Docker aus dem offiziellen Repository statt aus dem Distributionspaket, damit Compose v2 vorhanden und aktuell ist. Legen Sie dann die zwei Verzeichnisse an, die alles Sicherungswürdige enthalten werden — eines für Konfiguration, eines für Zustand — und widerstehen Sie dem Drang, noch etwas anderes hineinzulegen.

curl -fsSL https://get.docker.com | sh
docker compose version

install -d -m 0750 /srv/headscale/config
install -d -m 0750 /srv/headscale/data
cd /srv/headscale
Schritt 03 · Deploy

Zwei Container und eine Datei. Die Version immer fixieren.

Headscale und Caddy, und sonst nichts. Headscale lauscht auf einfachem HTTP innerhalb des Docker-Netzwerks; Caddy terminiert TLS, bezieht das Zertifikat beim ersten Boot und erneuert es, ohne dass man fragen muss. Der Metrics-Listener bleibt auf localhost, weil er eine interne Debug-Oberfläche ist und keine öffentliche.

Eine Regel vor der Datei: Fixieren Sie das Image auf eine exakte Version. Headscale ist Software vor Version 1.0, die schon mehr als einmal über Minor-Releases hinweg Konfigurationsschlüssel und CLI-Subbefehle umbenannt hat. Ein nicht fixierter Tag macht aus einem routinemäßigen Container-Neustart einen Ausfall bei einem Dienst, dessen Aufgabe es ist, Sie alles andere erreichen zu lassen.

/srv/headscale/docker-compose.yml

services:
  headscale:
    image: docker.io/headscale/headscale:0.26            # pin it; never :latest
    container_name: headscale
    command: serve
    volumes:
      - ./config:/etc/headscale
      - ./data:/var/lib/headscale
    ports:
      - "3478:3478/udp"                                  # STUN, for your own DERP
    restart: unless-stopped

  caddy:
    image: caddy:2-alpine
    container_name: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
    restart: unless-stopped

volumes:
  caddy_data:

/srv/headscale/Caddyfile

vpn.example.com {
    reverse_proxy headscale:8080
}

Das ist die gesamte Proxy-Konfiguration. Caddy spricht HTTP/2 und hebt langlebige Verbindungen an, ohne dass man es ihm sagen muss — das ist hier wichtig, weil jeder Client eine offen hält, um Karten-Updates zu empfangen. Nehmen Sie die Beispielkonfigurationsdatei, die mit der von Ihnen fixierten Version mitgeliefert wird, und bearbeiten Sie sie, statt eine von Grund auf neu zu schreiben — die Datei ist lang, das meiste davon sind sinnvolle Standardwerte, und die Schlüssel, auf die es ankommt, sind diese:

/srv/headscale/config/config.yaml — the lines that matter

server_url: https://vpn.example.com          # exactly what clients will dial
listen_addr: 0.0.0.0:8080                    # inside the Docker network only
metrics_listen_addr: 127.0.0.1:9090          # debug surface, keep it local

prefixes:
  v4: 100.64.0.0/10
  v6: fd7a:115c:a1e0::/48

noise:
  private_key_path: /var/lib/headscale/noise_private.key

database:
  type: sqlite                               # postgres for a large fleet
  sqlite:
    path: /var/lib/headscale/db.sqlite

dns:
  magic_dns: true
  base_domain: ts.example.com                # NOT a parent or child of server_url
  nameservers:
    global:
      - 1.1.1.1                              # replaced by your own in step 05

Starten Sie ihn, und lesen Sie danach das Log, statt zu raten. Ein erster Boot, der kein Zertifikat beziehen kann oder das DNS-Suffix ablehnt, weil es sich mit dem Server-Hostnamen überschneidet, sagt das klar und deutlich — und hält dann an.

docker compose up -d
docker compose logs -f headscale

# From your laptop — a control server that is up answers this:
curl -s https://vpn.example.com/health

Der erste Boot erzeugt das private Schlüsselmaterial in /srv/headscale/data. Kopieren Sie es jetzt an einen sicheren Ort, bevor sich ein einziges Gerät registriert, und noch einmal nach der ersten Registrierung: Geht dieser Schlüssel verloren, weist jedes Gerät den Server zurück, dem es bisher vertraut hat, und die einzige Reparatur ist, alle von Hand neu zu registrieren. Schritt 06 macht aus dieser Kopie ein echtes Backup.

Schritt 04 · Registrieren

Ein Nutzer, ein Schlüssel, ein Client. Dann prüfen, ob die Verbindung direkt zustande kam.

Der Befehl headscale lebt innerhalb des Containers, jede administrative Aktion ist also ein docker exec. Legen Sie zuerst einen Nutzer an — ein Nutzer ist Eigentümer von Geräten und die Einheit, auf die sich Zugriffsregeln beziehen; geben Sie ihm also den Namen einer Person oder einer Rolle, nicht einer Maschine.

hs() { docker exec -it headscale headscale "$@"; }

hs users create alice
hs users list                      # note the numeric id — newer releases want it

# A single-use key that expires in an hour is the right default.
hs preauthkeys create --user 1 --expiration 1h

Starten Sie dann den offiziellen Client auf dem Gerät, ausgerichtet auf Ihren Server statt auf den Standardserver. Das ist ein unterstütztes Flag, kein Workaround — der Client ist quelloffen, und der Login-Server ist ein Parameter.

# On the device (Debian/Ubuntu shown; every platform has an equivalent):
curl -fsSL https://tailscale.com/install.sh | sh

sudo tailscale up \
  --login-server https://vpn.example.com \
  --auth-key <the-key-you-just-created>

tailscale status
tailscale ip -4

Ohne Pre-Auth-Key gibt der Client stattdessen eine URL aus; ruft man sie auf, zeigt sie einen Registrierungsbefehl zum Ausführen auf dem Server — das ist der interaktive Weg und praktisch für ein Gerät, vor dem Sie gerade sitzen. So oder so: Machen Sie das zweite Gerät, bevor Sie feiern — ein Mesh aus einem Gerät beweist nichts. Pingen Sie es über seine Tailnet-Adresse an, und lesen Sie dann sorgfältig die Statusausgabe:

hs nodes list

# On a client, the word after the peer name is the one that matters:
tailscale status
#   100.64.0.2  laptop  alice  linux  active; direct 203.0.113.9:41641
#                                              ^^^^^^ direct, not relay

tailscale netcheck                 # why it chose what it chose

direct bedeutet, die beiden Geräte haben sich gefunden, und der Traffic läuft Peer-to-Peer. relay bedeutet, er läuft über einen DERP-Server — das funktioniert einwandfrei, erhöht aber die Latenz und bringt eine dritte Maschine in den Pfad, und standardmäßig gehört diese Maschine nicht Ihnen. In Schritt 06 geht es darum, das zu korrigieren.

Telefone, Tablets und der Apple-Umweg

Auf dem Desktop genügt ein Kommandozeilen-Flag. Android legt den benutzerdefinierten Server in der App offen, versteckt hinter der Versionsnummer im Einstellungsbildschirm. Apple-Plattformen haben kein Feld in der App: Sie installieren ein kleines Konfigurationsprofil, das die Kontrollserver-URL festlegt, bevor Sie sich anmelden — einmalig umständlich und danach dauerhaft. Zwei Dinge sparen Zeit. Prüfen Sie die Pro-Client-Seite der Headscale-Dokumentation, statt zu raten, denn der Ablauf bei Apple hat sich schon mehrfach geändert. Und melden Sie die App zuerst bei Tailscales eigenem Dienst ab — eine App, die dort bereits eine Sitzung hält, verweigert oft einen anderen Server, bis sie abgemeldet oder neu installiert wurde.

Zwei Gewohnheiten, die sich sofort lohnen. Nutzen Sie einmalige, kurzlebige Pre-Auth-Keys für Personen und wiederverwendbare oder ephemere nur für Automatisierung, die sie wirklich braucht — ein ephemerer Key registriert ein Gerät, das sich selbst entfernt, sobald es offline geht, was für einen CI-Runner genau richtig und für einen Laptop genau falsch ist. Und legen Sie sich jetzt auf eine Haltung zum Schlüsselablauf fest: Ein registriertes Gerät trägt ein Ablaufdatum, und ein Gerät, dessen Schlüssel abgelaufen ist, ist nicht mehr erreichbar, bis jemand es erneut authentifiziert. Das ist ein Sicherheitsfeature bei einem Laptop und ein Ausfallgenerator bei einem Headless-Server um drei Uhr morgens. Prüfen Sie, wie Ihre Version den Ablauf verwaltet — die Subbefehle sind umgezogen —, und legen Sie ihn bewusst pro Gerät fest, statt den Standardwert auf die harte Tour zu entdecken.

Schritt 05 · Routen

Angekündigt ist nicht genehmigt. Zwei Befehle, zwei Maschinen.

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
Schritt 06 · Erhalten

Ihr eigenes Relay, Ihr eigenes Backup. Und Upgrades, gelesen bevor angewendet.

Das Relay, von dem Sie vergessen haben, dass Sie es nutzen. Wenn zwei Geräte keine direkte Verbindung aufbauen können — symmetrisches NAT auf beiden Seiten, eine Firewall, die UDP verschluckt, ein Mobilfunkanbieter, der etwas Kreatives tut —, fällt der Traffic auf ein DERP-Relay zurück. Er bleibt Ende-zu-Ende-verschlüsselt, das Relay trägt also Chiffretext. Was das Relay sieht, ist, wer mit wem spricht, wie viel und wann. Von Haus aus gibt Headscale Ihren Clients die öffentliche Relay-Karte mit, und diese Relays werden von genau dem Unternehmen betrieben, von dem Sie sich eigentlich lösen wollten. Headscale bringt ein eingebettetes Relay mit; es zu aktivieren bringt diesen Fallback in dasselbe nordische Rechenzentrum wie den Rest von alldem.

derp:
  server:
    enabled: true
    region_id: 999                  # custom regions live in the 900s
    region_code: "nb-hel"
    region_name: "Helsinki (self-hosted)"
    stun_listen_addr: "0.0.0.0:3478"
  urls:
    - https://controlplane.tailscale.com/derpmap/default   # remove for yours only
  auto_update_enabled: true
  update_frequency: 24h

Die öffentliche Karte neben der eigenen Region zu belassen, ist die pragmatische Voreinstellung: Clients bevorzugen jeweils das nächstgelegene Relay, sodass ein Gerät in derselben Hemisphäre Ihres nutzt und ein Gerät auf der anderen Seite der Welt nicht hinter einem einzelnen nordischen Hop hängen bleibt. Die öffentliche URL zu entfernen, macht das Tailnet strikt in sich geschlossen — zum Preis eines schlechteren Fallbacks für entfernte Geräte. Beides ist vertretbar; entscheiden Sie sich bewusst, nicht durch Unterlassung.

Vier Dateien, extern, verschlüsselt. Das Backup ist klein genug, um peinlich zu sein, falls es fehlt: die Datenbank, das private Schlüsselmaterial, die Konfigurationsdatei und die Richtliniendatei. Zusammen sind sie ein Rundungsfehler auf jeder Speicherrechnung, und ohne das Schlüsselmaterial weist jedes Gerät im Netzwerk den Server zurück. Schicken Sie sie irgendwohin, das nicht diese Maschine ist — idealerweise in einen zweiten Rechtsraum, was der Backup-Leitfaden behandelt —, und spielen Sie sie einmal, bewusst, auf einem Wegwerf-VPS zurück, bevor Sie es wirklich brauchen.

# Stop briefly for a consistent SQLite copy, or use .backup on a live db.
docker compose stop headscale
tar czf /tmp/headscale-$(date +%F).tar.gz -C /srv/headscale config data
docker compose start headscale

restic -r sftp:backup@backup.example.com:/srv/restic backup \
       /tmp/headscale-$(date +%F).tar.gz

Upgrades, das eigentliche Risiko. Das ist Software vor Version 1.0, und sie verhält sich auch so: Konfigurationsschlüssel wurden umbenannt, CLI-Subbefehle sind umgezogen, und ein Release brauchte schon mehr als einmal eine dokumentierte Migration statt eines einfachen Neustarts. Das alles ist kein Grund, sie zu meiden — es ist ein Grund, eine Routine zu haben. Lesen Sie die Release Notes, bevor Sie pullen. Erstellen Sie zuerst das Archiv von oben. Vergleichen Sie Ihre Konfigurationsdatei mit dem Beispiel, das mit der neuen Version mitgeliefert wird, denn dort kündigen sich umbenannte Schlüssel an. Springen Sie jeweils eine Minor-Version weiter statt gleich drei. Und notieren Sie sich den alten Image-Tag, denn ein Rollback, den Sie in dreißig Sekunden durchführen können, ist es, was das Ganze risikoarm macht.

Richten Sie dann eine monatliche Erinnerung ein, sich zwei Dinge anzusehen: die Liste der registrierten Geräte, damit Maschinen, die Sie vor sechs Monaten stillgelegt haben, aufhören, Mitglieder zu sein, und die Ablaufdaten, damit nichts still und heimlich im falschen Moment wegfällt. Ein Mesh-VPN ist einer der wenigen Dienste, die leise versagen — alles funktioniert weiter, bis zu dem einen Mal, an dem Sie genau das Gerät brauchten, dessen Schlüssel unbemerkt abgelaufen war.

Der ehrliche Teil · Was das nicht leistet

Sie haben sich die Karte zurückgeholt. Unsichtbar sind Sie damit nicht geworden.

Die Kontrollebene selbst zu hosten ist eine echte, konkrete Verbesserung, und es ist kein Verschwindetrick. Fünf Dinge bleiben wahr, nachdem alles oben Beschriebene erledigt ist, und sie zu kennen ist der Unterschied zwischen einer Verteidigung und einer beruhigenden Geschichte.

Der Kontrollserver ist ein öffentlicher, benannter Endpunkt. Jedes Gerät wählt ihn an, also braucht er einen Hostnamen — und dieser Hostname wird in dem Moment, in dem das Zertifikat ausgestellt wird, in Certificate-Transparency-Logs veröffentlicht. Er ist auffindbar, selbst wenn Sie nie darauf verlinken, und seine Adresse ist die eine Konstante, die alle Ihre Geräte gemeinsam haben. Nutzen Sie eine Subdomain eines Namens, den Sie bereits veröffentlichen, statt eines Namens, der beschreibt, wofür er da ist.

Headscale ist eine Neuimplementierung, und das sagt es auch selbst. Es wird weder von Tailscale gebaut noch unterstützt, die Funktionsparität ist konstruktionsbedingt unvollständig, und manches von dem, was das gehostete Produkt verkauft — die Weboberfläche, die öffentliche Relay-Flotte, die ausgefeilten Single-Sign-on-Wege — existiert hier entweder nicht oder ist ein Drittprojekt, das niemand geprüft hat. Lesen Sie in der Projektdokumentation nach, ob eine Funktion existiert, bevor Sie einen Plan darauf aufbauen, und behandeln Sie Upgrades als Aufgabe, nicht als Hintergrundprozess.

Die Standard-Relays gehören immer noch jemand anderem. Solange Sie den eingebetteten DERP-Server nicht aktivieren, fällt eine Verbindung, die nicht direkt zustande kommen kann, auf die öffentliche Relay-Flotte zurück. Die Nutzdaten sind weiterhin Ende-zu-Ende-verschlüsselt, und niemand kann sie lesen — aber die Tatsache, dass zwei Ihrer Geräte miteinander sprechen, und wie viel, durchläuft Infrastruktur, die Ihnen nicht gehört. Das ist der Teil der Vertrauenskette, den die meisten Menschen am ersten Nachmittag übersehen.

Ein Exit-Node ist eine stabile Adresse, keine Menschenmenge. Ihren Traffic über den eigenen VPS zu routen, schlägt das Café-Netzwerk und das ISP-Profil. Es schlägt keine Korrelation, denn diese Adresse gehört Ihnen allein und ändert sich nicht. Die geteilte Adresse eines kommerziellen VPN ist in jeder Hinsicht schlechter — außer in der einen, die für genau diese Bedrohung zählt.

Die Maschine steht immer noch in einem Gebäude. Ein gemieteter Server läuft auf Hardware in einem Rechenzentrum mit Türen und Personal. Was sich ändert: Es gibt keinen produktweiten Index Ihrer Geräte, keine Unternehmensdatenbank, die aufzeichnet, von wo aus sich jedes einzelne verbindet, und keine Datenschutzrichtlinie, die im nächsten Quartal geändert werden kann. Was sich nicht ändert: Die Festplatte ist physisch vorhanden, und sie steht nicht bei Ihnen zu Hause.

Was Sie tatsächlich gekauft haben, präzise formuliert: Die Liste jeder Maschine, die Sie besitzen, die Aufzeichnung, von wo aus sich jede einzelne verbindet, und die Befugnis, eine neue hinzuzufügen, liegen alle auf einer Maschine, die Sie unter keinem bestimmten Namen mieten. Das ist eine enge Behauptung, und es ist eine echte. Sie ist ihren Preis nur wert, wenn Schritt 06 erledigt ist — eine selbstgehostete Kontrollebene ohne getestete Wiederherstellung ist keine Verbesserung der Privatsphäre, sie ist ein Single Point of Failure mit besserem Branding.

Dimensionierung · Was Sie bestellen sollten

Die Kontrollebene ist kostenlos. Bezahlt wird für den Traffic.

Stufe Monatlich Ressourcen Was sie komfortabel stemmt
Sentinel$3.902 vCPU · 4 GB · 120 GB · 1 GbpsDer Kontrollserver, ein Relay und leichte Exit-Node-Nutzung. Der richtige Anfang.
Ein zweiter Sentinel$3.90Der Exit-Node, auf einer eigenen MaschineHält weitergeleiteten Traffic von der Kontrollebene fern
Ravelin$16.908 vCPU · 16 GB · 480 GB · 2.5 GbpsEin täglich genutzter Exit-Node für einen Haushalt, mit voller Leitungsgeschwindigkeit
Bulwark$32.9016 vCPU · 32 GB · 960 GB · 5 GbpsDer Exit-Node eines Unternehmens und ein stark ausgelasteter Relay, zusammen

Nichts in dieser Tabelle ist wegen der Koordination dimensioniert. Der Kontrollserver hält eine im Leerlauf befindliche Verbindung pro Gerät und eine Datenbank im Kilobyte-Bereich; ein paar Hundert Geräte bringen nicht einmal die kleinste Stufe ins Schwitzen. Was eine Maschine beansprucht, ist weitergeleiteter Traffic — Relay-Verbindungen und, weit mehr noch, ein Exit-Node, der die gesamte Internetverbindung von jemandem trägt. Dimensionieren Sie nach Uplink und Verschlüsselungsdurchsatz, und denken Sie daran, dass die Bandbreite auf jeder Stufe unbegrenzt ist — die einzige Frage ist, wie schnell Sie es haben wollen.

Feldnotizen · Sechs Fallen

Sechs Arten, wie das schiefgeht. Zwei davon sehen aus wie DNS.

Falle 01 · Verwirrend

Das Tailnet-Suffix überschneidet sich mit dem Server-Hostnamen

Ein MagicDNS-Suffix, das dem Hostnamen des Kontrollservers über- oder untergeordnet ist, bricht die Namensauflösung auf eine Weise, die sich wie ein DNS-Ausfall liest. Halten Sie beide als Geschwister: vpn.example.com für den Server, ts.example.com für das Tailnet.

Falle 02 · Lautlos

Eine angekündigte und nie genehmigte Route

Der Client meldet fröhlich, dass er 192.168.1.0/24 ankündigt, und nichts hinter dem Router antwortet, weil der Server es nie genehmigt hat. Es gibt nirgendwo eine Fehlermeldung. Genehmigen Sie auf dem Server, und prüfen Sie dann die Routenliste statt den Client.

Falle 03 · Langsam

Alles über Relay, nichts direkt

Ein Netzwerk, das ausgehendes UDP blockiert, zwingt jede Verbindung durch ein Relay: Es funktioniert, ist aber langsamer und bringt eine dritte Maschine in den Pfad. tailscale status zeigt dann relay statt direct, und netcheck verrät, warum. Reparieren Sie die Firewall, oder nehmen Sie den Umweg wissentlich in Kauf.

Falle 04 · Exponiert

Die Standardrichtlinie „alles erlauben“, mit einem Gast im Tailnet

Ein frisches Tailnet lässt jedes Gerät jedes andere Gerät über jeden Port erreichen. Für eine einzelne Person ist das richtig — und falsch in dem Moment, in dem der Laptop eines Auftragnehmers beitritt, samt der Verwaltungsoberflächen, von denen er nie wusste, dass es sie gibt. Schreiben Sie die Richtlinie, bevor Sie einladen.

Falle 05 · Fatal

Der private Schlüssel, der nie gesichert wurde

Maschine neu aufsetzen, Datenbank wiederherstellen, das Schlüsselmaterial vergessen — und jedes Gerät weist den Server zurück, dem es gestern noch vertraut hat. Es gibt keine clevere Rettung, nur einen Tag, an dem Sie Telefone von Hand neu registrieren. Kopieren Sie das Datenverzeichnis, bevor das erste Gerät beitritt.

Falle 06 · Vermeidbar

Ein nicht fixierter Image-Tag bei einem Dienst vor Version 1.0

Konfigurationsschlüssel und CLI-Subbefehle wurden über Minor-Releases hinweg umbenannt. Mit :latest zieht ein x-beliebiger Neustart eine neue Version, und die Kontrollebene für Ihre gesamte Geräteflotte steht still. Fixieren Sie den Tag, lesen Sie die Release Notes, und aktualisieren Sie bewusst.

FAQ · Selbstgehostetes Mesh-VPN

Fragen, beantwortet.

Elf Fragen, die beim Aufbau davon aufkommen — angefangen mit den beiden, die entscheiden, ob Sie es überhaupt aufbauen sollten.

Ist Headscale ein offizielles Tailscale-Produkt?

Nein, und es lohnt sich, präzise zu sein, was das bedeutet. Headscale ist eine unabhängige, quelloffene Neuimplementierung des Koordinationsservers — des Teils von Tailscale, der öffentliche Schlüssel, Endpunkte und Richtlinie verteilt. Es wird von Tailscale weder gebaut noch verkauft noch unterstützt, es gibt keinen kommerziellen Support-Vertrag, und wenn etwas kaputtgeht, lesen Sie im Issue-Tracker nach, statt ein Ticket zu öffnen. Was es tatsächlich tut, ist, das Protokoll zu sprechen, das der offizielle, quelloffene Tailscale-Client bereits spricht — deshalb funktioniert der Client unverändert damit. Daraus folgen zwei praktische Konsequenzen. Die Funktionsparität ist unvollständig und wird es immer bleiben, weil das Projekt einem beweglichen Ziel hinterherläuft, das von einem viel größeren Team gepflegt wird — prüfen Sie in der projekteigenen Dokumentation, ob eine Funktion existiert, bevor Sie darum herum planen. Und Upgrades verdienen mehr Sorgfalt als das durchschnittliche Container-Update: Das Konfigurationsschema und mehrere CLI-Subbefehle wurden über Minor-Releases hinweg umbenannt, was mit Abstand der häufigste Weg ist, auf dem eine funktionierende Installation kaputtgeht.

Kann der Koordinationsserver meinen Traffic mitlesen?

Nein — und das ist der Teil der Architektur, den man wirklich verstehen sollte, statt ihn einfach zu glauben. Jedes Gerät erzeugt lokal sein eigenes WireGuard-Schlüsselpaar, und die private Hälfte verlässt es nie. Was ein Gerät zum Kontrollserver hochlädt, ist sein öffentlicher Schlüssel, seine aktuellen Endpunkte und einige Metadaten; was es herunterlädt, ist dasselbe für jedes andere Gerät, das es erreichen darf. Die Tunnel werden dann direkt zwischen den Geräten ausgehandelt, und die Verschlüsselung ist gewöhnliches WireGuard zwischen zwei Schlüsseln, die der Server nie besessen hat. Der Kontrollserver kann also nichts entschlüsseln, und das gilt genauso für Tailscales Server. Was er stattdessen kann, wird seltener diskutiert: Er hält die Karte. Gerätenamen, Nutzernamen, öffentliche Schlüssel, die öffentliche IP, von der aus sich jedes Gerät gerade einwählt, welches Gerät um 3 Uhr morgens aufgewacht ist, und die Richtlinie, die festlegt, wer wen erreichen darf. Er ist außerdem das, was Schlüssel verteilt — ein Kontrollserver, der kompromittiert oder gezwungen wird, kann also ein Gerät zu Ihrem Netzwerk hinzufügen. Self-Hosting löst kein mathematisches Problem; es verlagert ein administratives auf eine Maschine, die Ihnen gehört.

Was passiert mit meinem Netzwerk, wenn der Kontrollserver ausfällt?

Viel weniger, als man erwartet — das ist der beruhigende Teil an diesem Design. Geräte cachen die zuletzt erhaltene Netzwerkkarte, und bestehende WireGuard-Tunnel sind Peer-to-Peer — sie laufen nicht über den Kontrollserver und brauchen ihn nicht, um weiterzufunktionieren. Ein Neustart des VPS während eines normalen Arbeitstags bleibt meist unbemerkt. Was aufhört, ist Veränderung: Kein neues Gerät kann sich registrieren, ein Gerät, das in ein neues Netzwerk wechselt, braucht womöglich länger, um seine Peers wiederzufinden, Richtlinienänderungen verbreiten sich nicht, und jeder Knoten, dessen Schlüssel abläuft, während der Server offline ist, kann ihn nicht erneuern. Der Kontrollserver ist also richtig gedacht als Kontrollebene, nicht als Datenpfad: Ein Ausfall ist ein Ärgernis, keine Trennung. Trotzdem: Behandeln Sie ihn wie Produktivbetrieb. Sichern Sie ihn (Schritt 06), und wenn eine ganze Abteilung vom Tailnet abhängt, stellen Sie den Kontrollserver auf eine eigene kleine Maschine, statt ihn mit etwas zu teilen, das häufig neu gestartet wird.

Headscale oder reines WireGuard — wann lohnt sich die Kontrollebene wirklich?

Zählen Sie Ihre Geräte, und zählen Sie, wie viele davon sich bewegen. Reines WireGuard ist eine hervorragende Antwort für eine kleine, statische Menge: drei oder vier Peers, feste Endpunkte, je eine Konfigurationsdatei, nichts zu betreiben außer dem Kernelmodul. Das ist weniger Software, weniger Angriffsfläche und weniger Wartung als alles in diesem Leitfaden, und unser WireGuard-Leitfaden deckt es von Anfang bis Ende ab. Der Preis dafür: WireGuard verzichtet bewusst auf Schlüsselverteilung, sodass jedes neue Gerät eine Änderung auf jedem anderen Gerät bedeutet — eine Aufgabe, die quadratisch mit der Größe Ihrer Flotte wächst — und mobile Clients im Hotel-WLAN oder auf mobilen Daten brauchen jemanden, der allen anderen ständig mitteilt, wohin sie umgezogen sind. Genau das kauft Ihnen eine Kontrollebene. Die Schwelle liegt in der Praxis bei etwa fünf Geräten, oder beim ersten Laptop, der täglich das Netzwerk wechselt, oder beim ersten Mal, dass Sie eine Regel wie „der Laptop des Auftragnehmers erreicht den Staging-Server und sonst nichts“ wollen. Darunter: Nutzen Sie WireGuard und genießen Sie die Ruhe.

Funktioniert die Tailscale-App auf meinem Telefon mit Headscale?

Ja — es ist derselbe offizielle Client, und ihn auf einen anderen Kontrollserver auszurichten ist eine unterstützte Operation, kein Hack. Die Mechanik unterscheidet sich je nach Plattform, und genau dort verliert man einen Abend. Unter Linux, macOS und Windows ist es ein Kommandozeilen-Flag am Client (--login-server) oder die entsprechende Einstellung. Unter Android ist die Option in der App selbst zugänglich, versteckt hinter der Versionsnummer im Einstellungsbildschirm. Unter iOS, iPadOS und tvOS gibt es kein Feld in der App: Sie installieren ein kleines Konfigurationsprofil, das die Kontrollserver-URL festlegt, bevor Sie sich anmelden — beim ersten Mal umständlich und danach dauerhaft. Die Headscale-Dokumentation führt dafür eine Seite pro Plattform, und es lohnt sich, sie zu öffnen statt zu raten, denn gerade der Ablauf bei Apple hat sich schon mehrfach geändert. Ein Vorbehalt, der nicht plattformspezifisch ist: Eine App, die bereits bei Tailscales eigenem Dienst angemeldet ist, muss meist abgemeldet — und manchmal neu installiert — werden, bevor sie einen anderen Server akzeptiert.

Muss ich mein eigenes DERP-Relay betreiben?

Nicht, damit das Netzwerk funktioniert — sondern weil es den Unterschied zwischen größtenteils privat und durchgängig privat ausmacht, also entscheiden Sie bewusst. DERP-Server sind Relays, die genutzt werden, wenn zwei Geräte keine direkte Verbindung aufbauen können: symmetrisches NAT auf beiden Seiten, eine Firewall im Unternehmen, die UDP verschluckt, ein Mobilfunkanbieter, der etwas Kreatives tut. Der weitergeleitete Traffic ist weiterhin Ende-zu-Ende-verschlüsseltes WireGuard, ein Relay-Betreiber sieht also Chiffretext, keinen Inhalt. Was er sieht, sind Metadaten: welche zwei Geräte miteinander sprechen, wie viel und wann. Von Haus aus gibt Headscale Ihren Geräten Tailscales öffentliche DERP-Karte mit — das heißt, diese Relays gehören Tailscale: Sie haben die Kontrollebene selbst gehostet und den Fallback-Datenpfad bei genau dem Unternehmen belassen, von dem Sie sich eigentlich lösen wollten. Headscale bringt einen eingebetteten DERP-Server mit; ihn zu aktivieren gibt Ihnen ein Relay im selben nordischen Rechenzentrum wie den Kontrollserver. Der ehrliche Kompromiss ist die Abdeckung: Tailscale betreibt Relays auf mehreren Kontinenten, Sie betreiben eines — ein Gerät auf der falschen Seite der Welt ist bei ihnen also besser aufgehoben. Beide gleichzeitig zu betreiben, mit Ihrem in der Karte, ist ein völlig vernünftiger Mittelweg.

Kann ich das gesamte Tailnet meinen eigenen DNS-Resolver nutzen lassen?

Ja, und das ist einer der besseren Gründe, das hier aufzubauen. Headscale kann jedem beitretenden Gerät eine DNS-Konfiguration mitgeben, sodass Ihr Laptop im Café-WLAN und Ihr Telefon bei mobilen Daten beide über einen Resolver auflösen, den Sie selbst betreiben — mit Filterung, mit Cache, und ohne dass das lokale Netzwerk die Abfragen sieht. Richten Sie den globalen Nameserver des Tailnets auf die Tailnet-IP der Maschine, auf der Ihr eigenes Unbound oder AdGuard Home läuft, und setzen Sie die Override-Option, damit sie gegen das gewinnt, was auch immer DHCP dem Gerät mitgegeben hat. Zwei Dinge müssen dabei stimmen. Der Resolver muss im Tailnet erreichbar sein, nicht im öffentlichen Internet — das ist der ganze Sinn der Sache, und es bedeutet auch, dass Sie Port 53 endlich für die Welt schließen können. Und MagicDNS, das jedem Gerät einen kurzen Namen innerhalb eines von Ihnen gewählten Suffixes gibt, braucht ein Suffix, das Sie kontrollieren und das dem Hostnamen des Kontrollservers weder über- noch untergeordnet ist; das falsch zu machen ist ein verwirrender Fehler, der wie ein DNS-Bug aussieht und ein Konfigurationsfehler ist.

Wie groß muss der VPS sein?

Für die Kontrollebene allein: klein, und dann noch kleiner. Headscale ist eine einzelne Go-Binary, die eine kleine Datenbank aus Geräten, Schlüsseln und Richtlinie hält; der Koordinationsverkehr ist ein Rinnsal aus Long-Poll-Verbindungen, eine pro Gerät, die die meiste Zeit fast nichts transportieren. Ein Sentinel — 2 vCPU, 4 GB, 120 GB NVMe, $3.90 im Monat — betreibt einen Haushalt, ein kleines Unternehmen oder ein paar Hundert Geräte, ohne es zu merken. Die Dimensionierungsfrage wird erst interessant, wenn dieselbe Maschine eine zweite Aufgabe übernimmt. Ein eingebettetes DERP-Relay leitet echten Traffic weiter, es braucht also Uplink statt Kerne. Ein Exit-Node leitet den gesamten Traffic eines Geräts weiter, er braucht also Uplink, ein großzügiges Bandbreitenkontingent und eine CPU, die mit Verschlüsselung bei voller Leitungsgeschwindigkeit mithalten kann. Wenn Sie beides planen, dimensionieren Sie nach dem Traffic und behandeln Sie den Kontrollserver als den Rundungsfehler, der er ist — oder besser: Stellen Sie den Exit-Node auf eine zweite Maschine und halten Sie die Kontrollebene langweilig.

Ist ein Exit-Node auf meinem eigenen VPS dasselbe wie ein kommerzielles VPN?

Technisch ähnlich, in Sachen Privatsphäre fast das Gegenteil — es lohnt sich also, klar zu sehen. Ein Exit-Node leitet die gesamte Internetverbindung eines Geräts durch Ihren VPS, sodass Websites die VPS-Adresse statt Ihrer Heim- oder Hoteladresse sehen und das lokale Netzwerk einen verschlüsselten Tunnel sieht statt Ihres Browsings. So weit deckt sich das mit einem kommerziellen VPN. Der Unterschied ist die Menge. Die Adresse eines kommerziellen VPN wird von Tausenden nicht miteinander verbundenen Kunden geteilt, was genau das ist, was es schwer macht, Traffic Ihnen zuzuordnen; die Adresse Ihres Exit-Node wird von Ihnen genutzt, stabil, für immer. Gegen ein schnüffelndes Café-Netzwerk oder einen ISP, der ein Profil aufbaut, ist der Exit-Node hervorragend. Gegen einen Beobachter, der Aktivität über Monate hinweg seitenübergreifend korreliert, ist eine zugeordnete Adresse ein dauerhafter Identifikator und eine geteilte nicht. Nutzen Sie den Exit-Node für das, worin er gut ist — nicht vertrauenswürdige lokale Netzwerke, das Erreichen eigener Dienste, eine stabile Adresse für Dinge, die eine solche erwarten — und lesen Sie den Grundlagen-Leitfaden für den Teil des Bedrohungsmodells, den er nicht abdeckt.

Was genau muss ich sichern?

Vier Dinge, und nur eines davon ist offensichtlich. Die Datenbank — standardmäßig SQLite, PostgreSQL, falls Sie umgezogen sind — hält Nutzer, Geräte, öffentliche Schlüssel, Routen und Pre-Auth-Keys. Das beim ersten Boot erzeugte private Schlüsselmaterial ist der Teil, den man vergisst: Geht es verloren, weist jedes Gerät den Server zurück, mit dem es seit einem Jahr spricht — das bedeutet, die gesamte Flotte von Hand neu zu registrieren. Die Konfigurationsdatei zählt, weil sie die drei Namen aus Schritt 02 kodiert, und sie aus dem Gedächtnis zu rekonstruieren ist der Weg, auf dem man versehentlich einen davon ändert. Und die Richtliniendatei, falls Sie die Zugriffsregeln auf der Platte halten, ist das Letzte, was Sie neu schreiben wollen. Alle vier liegen in zwei Verzeichnissen und wiegen zusammen weniger als ein Foto. Verschlüsseln Sie sie, schicken Sie sie an eine Maschine, die nicht diese hier ist — idealerweise in einem anderen Rechtsraum, wofür der Backup-Leitfaden da ist —, und spielen Sie sie einmal, absichtlich, auf einem Wegwerf-VPS zurück, damit Sie wissen, dass die Datei, die Sie haben, auch die Datei ist, die Sie brauchen.

Hat NordBastion etwas dagegen, wenn ich einen Kontrollserver und einen Exit-Node auf einem VPS betreibe?

Ein Kontrollserver ist eine gewöhnliche, wohlerzogene Last — ein wenig HTTPS, ein wenig UDP, praktisch kein Traffic —, und in der Nutzungsrichtlinie gibt es nichts, das ihn betrifft. Ein Exit-Node verdient einen Gedanken, keinen Richtlinienvortrag: Alles, was ein Gerät durch ihn hindurchschickt, verlässt das Internet über Ihre VPS-Adresse, unter Ihrem Konto — wofür auch immer Ihre Geräte genutzt werden, dafür wird diese Adresse bekannt sein. Das ist in Ordnung und genau der Zweck der Funktion; es ist aber auch der Grund, warum ein mit Fremden geteilter Exit-Node eine schlechte Idee ist, aus demselben Grund wie ein offener Relay. Die Bandbreite ist auf jeder Stufe unbegrenzt, und weitergeleiteter Traffic ist normaler Traffic — ein DERP-Server und ein Exit-Node sind daher beide inklusive statt nach Verbrauch abgerechnet. Darüber hinaus: Das Konto braucht nicht Ihren Namen, die Rechnung wird in Monero oder Bitcoin beglichen, und die Maschine, die die Karte jedes Geräts hält, das Sie besitzen, wird von niemandem indexiert.

Die Maschine beschaffen

Eine eigene Kontrollebene, auf einem Konto, das nicht auf Ihren Namen läuft. KYC-frei, mit Krypto bezahlt.

Sentinel — 2 vCPU und 4 GB für $3.90 im Monat, in Helsinki, Stockholm, Oslo oder Reykjavík. Genug für Headscale, Caddy und ein eigenes DERP-Relay, mit Raum übrig für den Exit-Node, falls Sie ihn auf derselben Maschine wollen. Keine E-Mail bei der Anmeldung, kein Ausweisdokument, und keine Unternehmensdatenbank, die die Liste jedes Geräts hält, das Sie besitzen.

Zuletzt überprüft · 2026-10-12 · Quellen · Headscale-Dokumentation (Konfigurationsreferenz, Client-Einrichtung, ACLs, DERP, Remote-CLI), Tailscale-Client- und Exit-Node-Dokumentation, WireGuard-Protokollpapier, Caddy-Dokumentation · Rhythmus · jährlich

Privates Hosting, im Norden gebaut.