π

Tailscale und NextDNS: Heimnetz unterwegs und Tracker blockieren

Show Sidebar

Auf meinem Android-Handy lief lange TrackerControl, um die Tracker der Apps zu blockieren. Dann kam Tailscale dazu, damit ich von unterwegs auf Home Assistant und Nextcloud zu Hause zugreifen kann. Doch damit war ich in einer Zwickmühle, denn beide Programme können nicht gleichzeitig laufen. Der Grund: Android erlaubt immer nur eine aktive VPN-App, und beide Apps arbeiten als VPN.

Eine Lösung wäre gewesen, eine Automation zu bauen, die TrackerControl abdreht und Tailscale aufdreht, sobald ich Nextcloud oder Home Assistant aufrufe. Das schien mir aber eine unschöne Lösung.

Die elegantere Lösung war, das Blockieren von der App ins Netz zu verlagern. Tailscale schickt die DNS-Anfragen aller meiner Geräte an NextDNS, und NextDNS beantwortet Anfragen an Werbe- und Tracking-Domains gar nicht erst. In diesem Artikel beschreibe ich beide Dienste, wie ich sie eingerichtet habe und was man an NextDNS auch kritisch sehen kann.

Tailscale: ein privates Netz für alle eigenen Geräte

Tailscale baut aus allen eigenen Geräten ein privates Netz, das sogenannte /Tailnet/. Technisch steckt WireGuard dahinter. Tailscale kümmert sich aber um alles, was WireGuard mühsam macht: Schlüssel verteilen, Geräte finden und Verbindungen durch NAT und Firewalls aufbauen.

Was mir daran gefällt:

Der Haken: Für die Koordination braucht man ein Konto bei Tailscale, angemeldet wird über Google, Microsoft, GitHub oder Apple. Wer gar keinen fremden Dienst im Spiel haben will, kann mit Headscale einen eigenen Koordinationsserver betreiben. Möglicherweise schaue ich mir in Zukunft Headscale an, da ich aktuell leider ein BigTech Konto für den Zugriff auf tailscale brauche.

Einrichtung

  1. Auf login.tailscale.com ein Konto anlegen.
  2. Tailscale auf den Geräten installieren. Bei mir sind das das Handy, der Laptop, das Home-Assistant-Add-on und das NAS mit Nextcloud. Unter Linux genügt curl -fsSL https://tailscale.com/install.sh | sh und danach sudo tailscale up.
  3. Auf jedem Gerät mit demselben Konto anmelden. Danach tauchen alle Geräte in der Admin-Konsole unter Machines auf.
Die Geräte im Tailnet in der Admin-Konsole (klicken für größere Version)
Die Tailscale-App unter Android mit aktiver Verbindung (klicken für größere Version)

Tailscale beim Einschalten automatisch starten

Damit das Handy immer im Tailnet ist, nutze ich das durchgehend aktive VPN von Android:

  1. Einstellungen → Netzwerk & Internet → VPN öffnen.
  2. Auf das Zahnrad neben Tailscale tippen.
  3. Durchgehend aktives VPN einschalten.

/Verbindungen ohne VPN blockieren/ lasse ich aus, sonst ist das Handy offline, sobald Tailscale einmal hängt. Zusätzlich stelle ich den Akku für Tailscale unter /App-Info → Akku/ auf /Nicht eingeschränkt/, damit Android die App nicht im Hintergrund beendet.

Durchgehend aktives VPN für Tailscale unter Android (klicken für größere Version)

NextDNS: Tracker blockieren per DNS

Bevor eine App einen Tracker kontaktiert, fragt sie per DNS nach dessen Adresse. Genau dort setzt NextDNS an. Es ist ein DNS-Resolver in der Cloud, der Anfragen an Domains auf Blocklisten einfach ins Leere laufen lässt. Weil das auf DNS-Ebene passiert, wirkt es für jede App und jeden Browser, ohne dass auf dem Gerät eine eigene Filter-App laufen muss. So bleibt der VPN-Platz frei für Tailscale.

Im Vergleich zu TrackerControl verliere ich dabei etwas: NextDNS blockiert nach Domain, nicht pro App. Ich sehe also nicht mehr, welche App welchen Tracker anfunkt. Außerdem rutschen Apps durch, die eigene DNS-Server oder fest eingebaute IP-Adressen nutzen. Werbung in YouTube oder Twitch lässt sich per DNS ebenfalls nicht blockieren, weil sie von denselben Servern kommt wie die Videos. Da verwende ich aber eh Apps wie PipePipe.

Ein eigener AdGuard Home oder Pi-hole zu Hause kann dasselbe, und wie viel gefiltert wird, hängt vor allem von den Blocklisten ab. NextDNS hat für mich den Vorteil, dass es auch unterwegs funktioniert und wenn zu Hause gerade Strom oder Internet weg ist.

Pro: Was für NextDNS spricht

Der Artikel NextDNS im Test auf dkeu.de fasst die Vorteile gut zusammen:

Der Autor weist auch auf Grenzen hin. Einige Optionen arbeiten unzuverlässig oder erzeugen Fehlalarme, und Chrome ignoriert teilweise die Systemeinstellung. Der Link zu NextDNS in seinem Artikel ist ein Affiliate-Link.

Kontra: Was man kritisch sehen kann

Der Artikel NextDNS – Datenschutz wider Datensparsamkeit? auf Curius hält dagegen:

Mein Fazit daraus: Die Kritik ist berechtigt, lässt sich aber zum großen Teil entschärfen. Ich habe das Logging abgeschaltet beziehungsweise auf einen EU-Speicherort und kurze Aufbewahrung gestellt. Wer niemandem außer sich selbst vertrauen will, ist mit AdGuard Home oder Pi-hole zu Hause besser bedient und kann Tailscale genauso darauf zeigen lassen.

NextDNS einrichten

  1. Auf my.nextdns.io ein Konto anlegen. Unter Setup steht die Konfigurations-ID, zum Beispiel abc123.
  2. Unter Settings die Logs abschalten oder einen Speicherort in der EU und eine kurze Aufbewahrungsdauer wählen.
  3. Unter Privacy → Blocklists wenige gute Listen hinzufügen. Ich nutze HaGeZi – Multi Pro. Viele Listen überschneiden sich stark, mehr ist hier nicht automatisch besser.
  4. Unter Privacy die Native Tracking Protection für den Handyhersteller einschalten, dazu Block Disguised Third-Party Trackers. Für mein Fairphone 5 gab es hier nichts zum Auswählen.
  5. Unter Security die Threat Intelligence Feeds und die Cryptojacking Protection einschalten.
Die Konfigurations-ID auf der Setup-Seite von NextDNS (klicken für größere Version)
Die aktiven Blocklisten unter Privacy (klicken für größere Version)

Beides zusammen: NextDNS als DNS für das ganze Tailnet

Jetzt kommt der eigentliche Trick. Tailscale kann NextDNS direkt als DNS-Server für alle Geräte im Tailnet setzen:

  1. In der Tailscale-Admin-Konsole DNS öffnen.
  2. Unter Nameservers auf Add nameserver → NextDNS klicken und die Konfigurations-ID eintragen.
  3. Use with exit node einschalten. Sonst übernimmt beim Surfen über einen Exit Node dessen DNS-Server, und der Filter wäre aus.
  4. Override DNS servers einschalten, damit die Geräte wirklich NextDNS verwenden.
  5. In der Android-App von Tailscale prüfen, dass Use Tailscale DNS eingeschaltet ist.
  6. In den Android-Einstellungen Privates DNS auf Aus oder Automatisch stellen, sonst umgeht das Handy Tailscale.
NextDNS als globaler Nameserver in der Tailscale-Admin-Konsole (klicken für größere Version)

Ab jetzt läuft jede DNS-Anfrage meiner Geräte über NextDNS, egal ob ich zu Hause bin oder unterwegs. TrackerControl habe ich deinstalliert. Einzelne Geräte können über die Policy in Tailscale (nodeAttrs mit nextdns:<ID>) sogar ein eigenes NextDNS-Profil bekommen. Das nutze ich für Geräte, denen ich weniger vertraue, mehr dazu weiter unten.

Nach ein paar Tagen lohnt sich ein Blick in die Statistik von NextDNS. Dort sieht man, was geblockt wird. Wenn eine App deswegen nicht mehr funktioniert, kommt die betroffene Domain auf die Allowlist oder die App von meinem Smartphone.

Access Controls: Weniger vertrauenswürdige Geräte nur eingeschränkt ins Netz lassen

Standardmäßig darf in einem Tailnet jedes Gerät jedes andere erreichen, und über eine Subnet-Route sogar das ganze Heimnetz. Für meine eigenen Geräte ist das praktisch. Es gibt aber Geräte, denen ich weniger vertraue, zum Beispiel das Smartphone meines Vaters. Er soll damit Home Assistant und unsere Nextcloud nutzen können, aber nicht ins restliche Heimnetz oder auf meine anderen Geräte kommen. Einen eigenen Tailscale-Account braucht er dafür nicht.

Der Trick sind Tags. Home Assistant bekommt tag:ha, das NAS tag:nextcloud und sein Smartphone tag:gast-geraet. Weitere Geräte, denen ich weniger vertraue, bekommen denselben Tag und damit dieselben Regeln. Ein getaggtes Gerät verliert die Rechte des Accounts, mit dem es angemeldet wurde. Was es darf, steht dann nur noch in der Policy unter /Access controls/:

{
  "tagOwners": {
    "tag:ha":          ["autogroup:admin"],
    "tag:nextcloud":   ["autogroup:admin"],
    "tag:gast-geraet": ["autogroup:admin"]
  },
  "grants": [
    // Ich und meine eigenen Geräte: alles
    { "src": ["ich@example.com"], "dst": ["*"], "ip": ["*"] },
    // Gast-Gerät: nur Home Assistant und Nextcloud
    { "src": ["tag:gast-geraet"], "dst": ["tag:ha"],        "ip": ["tcp:8123"] },
    { "src": ["tag:gast-geraet"], "dst": ["tag:nextcloud"], "ip": ["tcp:443"] }
  ],
  // Eigenes NextDNS-Profil für das Gast-Gerät
  "nodeAttrs": [
    { "target": ["tag:gast-geraet"], "attr": ["nextdns:<profil-id>"] }
  ],
  // Wird beim Speichern geprüft
  "tests": [
    {
      "src":    "tag:gast-geraet",
      "accept": ["tag:ha:8123", "tag:nextcloud:443"],
      "deny":   ["tag:ha:22", "tag:nextcloud:22"]
    }
  ]
}	  

Alles, was nicht ausdrücklich erlaubt ist, bleibt gesperrt, auch die Subnet-Route ins Heimnetz und Exit Nodes. Jeder Tag muss unter tagOwners stehen, sonst lässt sich die Policy nicht speichern. Der tests-Block prüft beim Speichern, ob wirklich nur das Gewollte durchgeht. Das hat mich vor versehentlichen Freigaben bewahrt.

Am Smartphone melde ich Tailscale mit meinem Account an und tagge das Gerät sofort in der Admin-Konsole. Getaggte Geräte laufen übrigens nicht nach 180 Tagen ab. Dazu kommen /Use Tailscale DNS/, Exit Node /None/ und /Durchgehend aktives VPN/. Die Nextcloud-App oder in meinem Fall davx5 bekommen die Adresse <nas>.<tailnet>.ts.net über HTTPS, die Home-Assistant-App <100er-IP>:8123 über http. Die Logins bleiben in den Apps mit eigenen Usern, Tailscale regelt nur, wer im Netz wen erreicht.

Stolpersteine

Die meisten Probleme lagen nicht an der Policy, sondern an Gerät und App:

Bei der Fehlersuche hat mir eine feste Reihenfolge geholfen: zuerst die 100er-IP im Browser, dann der Name, dann die App. So lässt sich trennen, ob es am Netz, am DNS oder an der App liegt.

Fazit

Tailscale löst für mich den Zugriff von unterwegs, ohne dass zu Hause ein Port offen sein muss. NextDNS übernimmt das Blockieren der Tracker, ohne den einzigen VPN-Platz unter Android zu belegen. Mit den Access Controls entscheide ich außerdem, welches Gerät was im Heimnetz erreicht. Zusammen sind sie in einer relativ kurzen Zeit eingerichtet. Wer bei NextDNS Bauchweh wegen des Datenschutzes hat, ersetzt es durch einen eigenen AdGuard Home oder Pi-hole und behält den Rest genau so bei.

Kommentiere via unter dem Hashtag #20261023_TailscaleNextdns (verteilt) oder via E-Mail (langlebig).