Fernzugriff auf Home Assistant mit Tailscale – ganz ohne Portfreigabe

von Patrick · · 6 Min. Lesezeit · Ratgeber

Dieser Artikel enthält Affiliate-Links. Kaufst du darüber, bekomme ich eine kleine Provision – für dich ändert sich am Preis nichts. Mehr dazu


Irgendwann kommt bei jedem Home-Assistant-Setup die Frage: Wie komme ich von unterwegs drauf? Mal schnell nachschauen, ob die Rollos unten sind, die Heizung für die Rückfahrt hochdrehen oder einfach prüfen, ob zu Hause alles läuft. Die klassische Antwort wäre eine Portfreigabe im Router. Bei mir war das aber nie eine echte Option – und im Nachhinein bin ich ganz froh darüber.

Warum keine Portfreigabe?

Zum einen aus Prinzip: Ich möchte Home Assistant nicht direkt ins offene Internet hängen. Jede Portfreigabe ist eine Tür, die man dauerhaft absichern, aktualisieren und im Blick behalten muss.

Zum anderen ganz praktisch: Mein Internetanbieter nutzt CGNAT. Mein Router bekommt also gar keine eigene öffentliche IPv4-Adresse, sondern teilt sie sich mit anderen Kunden. Eine Portfreigabe würde schlicht ins Leere laufen.

Die Lösung heißt bei mir Tailscale. Das ist ein VPN auf Basis von WireGuard, das ohne Portfreigaben auskommt. Die Geräte bauen die Verbindung selbst auf, meistens direkt, und wenn das mal nicht klappt, über Relay-Server von Tailscale. Für den privaten Gebrauch reicht der kostenlose Tarif locker.

Mein Aufbau: Ein Server als Subnet-Router

Tailscale läuft bei mir auf dem Heimserver. Home Assistant selbst läuft dort als virtuelle Maschine und hat gar kein eigenes Tailscale. Trotzdem erreiche ich es vom Handy aus. Der Trick heißt Subnet-Router.

Diagramm: Das Handy verbindet sich über das verschlüsselte Tailscale-Netz mit dem Heimserver, der als Subnet-Router das Heimnetz mit Home Assistant und Router anbietet. Der Heimserver bietet das ganze Heimnetz im Tailnet an – Home Assistant braucht kein eigenes Tailscale.

Ein Subnet-Router ist ein Tailscale-Gerät, das nicht nur sich selbst im Tailnet anbietet, sondern ein ganzes lokales Netz. Mein Server sagt also sinngemäß: „Über mich erreicht ihr das komplette Heimnetz.“ Damit kommt das Handy von unterwegs nicht nur an den Server, sondern auch an Home Assistant, den Router und alles andere im LAN – so, als wäre ich zu Hause im WLAN.

Die Einrichtung auf einem Linux-Server ist überschaubar:

  1. Tailscale installieren und anmelden.
  2. IP-Forwarding im Kernel aktivieren, sonst kann der Server keine Pakete weiterleiten.
  3. Das Heimnetz als Route ankündigen.
  4. Die Route in der Tailscale-Admin-Konsole freigeben. Das wird gern vergessen – ohne Freigabe passiert nämlich gar nichts.

Das Ankündigen sieht so aus (mit eurem eigenen Heimnetz statt dem Beispiel):

sudo tailscale up \
  --advertise-routes=10.0.0.0/24 \
  --accept-dns=false \
  --accept-routes=false

--accept-dns=false sorgt dafür, dass der Server seine eigene DNS-Konfiguration behält. --accept-routes=false ist auf dem Router selbst sinnvoll, weil er ja schon im Heimnetz steht und keine fremden Routen übernehmen muss.

Wer Tailscale nicht auf einem eigenen Server laufen lassen will: Ein kleiner Raspberry Pi 5 oder ein sparsamer Mini-PC wie ein Lenovo ThinkCentre Tiny taugt genauso als Subnet-Router. Alternativ gibt es Tailscale auch als Add-on direkt in Home Assistant OS.

Der Tag, an dem das Handy nicht mehr reinkam

Lange lief das völlig unauffällig. Bis das Handy eines Tages einfach keine Verbindung mehr bekam. Home Assistant nicht erreichbar, der Server auch nicht.

Meine erste Vermutung: Der Server ist abgestürzt, oder Tailscale ist nach einem Neustart nicht wieder hochgekommen. Beides falsch. Der Dienst lief, der Autostart war aktiv, und auch das Netz war in Ordnung. Direkte Verbindungen waren möglich, die Relay-Server gut erreichbar.

Die eigentliche Ursache war viel banaler: Der Node-Key des Servers war abgelaufen.

Tailscale gibt jedem Gerät einen Schlüssel, der standardmäßig nach einer gewissen Zeit abläuft. Danach muss man sich neu anmelden. Das ist ein Sicherheitsfeature – bei einem Server, der still vor sich hin läuft und den man selten anfasst, aber eine echte Falle. Denn von außen sieht es aus, als wäre das ganze Setup kaputt.

Auf dem Server selbst sagt tailscale status dann schlicht „Logged out“. Wer tiefer schaut, sieht in tailscale debug prefs, dass der private Node-Key nur noch aus Nullen besteht, obwohl die Einstellungen noch vorhanden sind.

Was ich daraus gelernt habe

Erstens: Bei „Handy kommt nicht rein“ immer zuerst tailscale status auf dem Server. Das spart eine Menge Rätselraten am Netzwerk.

Zweitens: Beim Neu-Anmelden alle Flags wieder mitgeben. Wenn ihr tailscale up nur so aufruft, riskiert ihr, dass die Subnet-Route verschwindet oder Tailscale sich über fehlende Optionen beschwert. Ich habe mir den kompletten Befehl deshalb notiert. Einzelne Einstellungen lassen sich später übrigens auch mit tailscale set ändern, ohne alles neu anzugeben.

Drittens: Key-Ablauf bewusst entscheiden. In der Admin-Konsole lässt sich der Ablauf pro Gerät deaktivieren. Für den Server habe ich das gemacht, weil er fest zu Hause steht und ich dort ohnehin die Kontrolle habe. Für das Handy habe ich den Ablauf bewusst aktiv gelassen – ein Handy kann verloren gehen, da ist die regelmäßige Neuanmeldung ein sinnvoller Schutz.

Ein täglicher Check statt böser Überraschungen

Seitdem läuft auf dem Server ein kleines Skript, das einmal am Tag per Cron prüft, ob Tailscale noch angemeldet ist und ob alles, was darüber laufen soll, auch wirklich erreichbar ist. Geht etwas schief, bekomme ich eine Push-Benachrichtigung aufs Handy. Wichtig war mir dabei zweierlei:

  • Nur einmal melden. Eine Störung soll nicht jeden Tag erneut aufploppen, sondern einmal – und wenn sie behoben ist, kommt eine Entwarnung.
  • Täglich statt nur beim Neustart. Ursprünglich hatte ich den Check nur in meinen Boot-Check eingebaut. Da der Server aber nur selten neu startet, wäre ein Ausfall so erst sehr spät aufgefallen.

Ein Wort zu Tailscale Funnel

Tailscale kann mit Funnel auch einzelne Dienste gezielt öffentlich im Internet erreichbar machen, inklusive HTTPS-Zertifikat. Das nutze ich für genau einen Anwendungsfall, bei dem ein externer Dienst von außen auf mein Setup zugreifen muss (mehr dazu im Artikel über meine DIY-Toniebox). Für den normalen Fernzugriff auf Home Assistant brauche ich Funnel aber nicht – der läuft ausschließlich innerhalb meines privaten Tailnets.

Zwei Dinge habe ich dabei gelernt. Das Zertifikat erneuert Tailscale automatisch, aber nur, solange das Gerät online und angemeldet ist. Ein abgelaufener Node-Key legt also nicht nur den Fernzugriff lahm, sondern auf Dauer auch alles, was über Funnel läuft. Und direkt nach einer Neuanmeldung kann es ein paar Minuten dauern, bis der öffentliche DNS-Eintrag wieder auflösbar ist. Öffentliche DNS-Server merken sich das „gibt es nicht“ gern eine Weile. Also nicht vorschnell denken, Funnel sei kaputt.

Fazit

Tailscale ist für mich die entspannteste Art, von unterwegs auf Home Assistant zuzugreifen: keine Portfreigabe, keine eigene Zertifikatsverwaltung für den Fernzugriff, und es funktioniert sogar hinter CGNAT. Mit einem Subnet-Router reicht ein einziges Gerät, um das ganze Heimnetz erreichbar zu machen. Die eine große Stolperfalle ist der Node-Key-Ablauf. Wer den kennt, bewusst pro Gerät entscheidet und einen kleinen täglichen Check einrichtet, hat ziemlich lange Ruhe.

Kommentare

Fragen, Ergänzungen oder eigene Erfahrungen? Ich freue mich über deinen Kommentar. Zum Kommentieren brauchst du ein kostenloses GitHub-Konto.

Beim Laden werden Daten an GitHub übertragen. Mehr dazu in der Datenschutzerklärung.