Skip to Content

The habits that keep private access working, and the checklist for when it stops

the boring half
HA Tailscale Guide · Part 6

The habits that keep private access working, and the checklist for when it stops

Everything is set up and it works. This last article is about the unglamorous half: the order you do things in every day, the outside-in checklist that finds a fault in four moves instead of forty, what to do before and after an update, and the short note that means the next person to touch this — possibly you, a year from now — is not starting from nothing.

4 checks
The outside-in order when something breaks
2 networks
Every acceptance test runs on both
1 change
At a time, so you can always go back
The daily order

Tailscale first, Home Assistant second

The single habit that saves the most time is doing things in a fixed order. Every time, on every device:

  1. Open Tailscale on the device you are holding. Not Home Assistant. Tailscale.
  2. Confirm it is connected, and connected under the right account. A device can be signed in and idle, or signed in to the wrong account entirely.
  3. Then open Home Assistant.

It looks like fussiness until the first time something fails. Because you checked the network path a moment ago, you already know it was fine — which removes half the possible causes before you start looking.

The other half of the habit is a piece of restraint: if Home Assistant's local URL stops working, that does not mean Tailscale has failed. They are two separate things and they fail separately. Check them separately.

You noticeThe dashboard will not load while you are out. Look at the Tailscale client first. If it says it is connected, the network path is not your problem — move on to the Home Assistant login and URL.
You noticeIt works on your phone but not your laptop. Almost always the laptop is signed out, or signed in under a different account, and so is on a different tailnet.
You noticeIt worked yesterday and nothing changed. Something changed. An app update, a new phone, a login that expired, or a setting someone else adjusted.
Tailscale is not a login. The rules for remote use are the same as the rules at home: a personal account, a strong password, multi-factor authentication, and logging out when you leave a shared device. Tailscale solves the network path. It cannot make up for shared credentials.
Three layers

Knowing which layer you are looking at

Three words get used interchangeably in forum posts and they are not the same thing. Sorting them out now is what stops you clicking in the wrong place later.

  • A tailnet is your private Tailscale network.
  • A machine is one device that has joined it.
  • The Home Assistant app is the Tailscale service managed by Supervisor, which you open and configure from the Apps page in Home Assistant.
In plain terms

Think of a street and a house. The tailnet is the street, and the admin console is the council that decides who is allowed onto it. Your Home Assistant machine is a house on that street. Your Home Assistant login is the front door key. Somebody standing outside cannot tell whether the street is closed or the key is wrong — but the two are fixed in completely different places, by completely different people.

LayerWhat it handlesHow you check it
Tailscale admin consoleAccounts, Machines, routes and policyHome Assistant appears in the Machines list, with its last-seen status and its feature badges
The Tailscale app in HARuns Tailscale on the Home Assistant hostStatus healthy, no blocking errors in the log
Home Assistant itselfLogin, dashboard and admin rightsYou log in normally with a personal account
flowchart LR
  A["Your phone or laptop"] --> B["Tailscale client
signed in to your tailnet"] B --> C["The private path between the two machines"] C --> D["Your Home Assistant host,
joined to the tailnet as a machine"] D --> E["The Tailscale app,
managed by Supervisor"] E --> F["Home Assistant login,
your own account and password"] G["Tailscale admin console"] -.->|"accounts, machines, routes, policy"| C
Where each layer sitsThe admin console never carries your traffic. It decides who and what is allowed to, which is why a change there can break a path that is otherwise perfectly healthy.

That dotted line is why a working setup can stop working with nothing on your side having changed: policy was edited, a machine was removed, or a route approval was withdrawn.

The checklist

Work from the outside in

Before you touch anything, record where you are starting from. In the Home Assistant left-hand menu go to Settings → Apps and find Tailscale — if your screen still uses the old name, it will say Add-ons. Note whether it is running. One line, written before you change a setting, is what later tells you whether a change helped or made things worse.

And leave the rest of the page alone. For now, do not change any advanced options you are not using. A troubleshooting session is the worst possible moment to try a setting you have never needed — if you flip one while you are in there, you will not be able to tell afterwards which change caused what.

Then, when you cannot reach Home Assistant, resist the urge to start with Home Assistant. Rule things out from the outside in, in this order, and stop at the first one that fails.

  1. Is this device's Tailscale client connected, and to the right tailnet?
  2. Is Home Assistant still in the Machines list?
  3. Is the app running, and what does its log say?
  4. Only now: Home Assistant's own account, URL, Serve or route settings.
In plain terms

Nobody starts by rewiring a light fitting when a lamp will not come on. You look at the switch, then the fuse, then whether the whole street is dark. Outside in. Each check is quicker than the one after it, and each one you pass removes a whole category of causes.

flowchart TD
  A["You cannot reach Home Assistant"] --> B{"Is this device's Tailscale client
connected, and to the right account?"} B -->|"no"| B1["Sign in again on this device.
Stop here. Nothing else is proven broken yet"] B -->|"yes"| C{"Does Home Assistant still appear
in the Machines list?"} C -->|"no"| C1["Finish the sign-in from the app Web UI,
then read the app log.
Do not reinstall repeatedly"] C -->|"yes"| D{"Is the app running, with no
blocking errors in its log?"} D -->|"no"| D1["Deal with what the log names
before changing anything else"] D -->|"yes"| E{"Is it the LAN behind Home Assistant
that you cannot reach?"} E -->|"yes"| E1["Go to the subnet route approval"] E -->|"no"| F["The network path is healthy.
Look at the Home Assistant
account and URL"]
The outside-in checklist as a decisionFour questions, in order. Three of the four are answered somewhere other than Home Assistant, which is exactly why starting inside Home Assistant wastes so much time.

Check two is worth more than a glance. Open the Machines page in the Tailscale admin console and confirm the machine that corresponds to Home Assistant — three details, in this order:

  • That the machine is there, and that it is the right one. Names are chosen by people, so more than one entry can look plausible. Match it against what you wrote down when you set the machine up.
  • Its last-seen status. A machine that was last seen days ago is telling you something quite different from one seen a minute ago. If the timestamp is old, the fault is at the Home Assistant end, and you can stop testing from your phone.
  • Its feature badges. These are the labels the console puts on a machine to show what it has been allowed to do, not merely that it exists. Read them against what you meant to set up. A badge you were not expecting is worth understanding before you carry on.

Five faults account for most of what actually goes wrong, and each maps to one rung of that ladder:

  • You cannot find Apps at all. The path is Settings → Apps. If it is not there, confirm whether your Home Assistant install is managed by Supervisor. Container and Core installs cannot follow the app path this guide uses. If your screen still says Add-ons rather than Apps, that is a naming difference between versions, not a different thing.
  • Home Assistant is not in Machines. Go back to the app's Web UI and complete the login, then read the app log. Reinstalling over and over does not help, because the sign-in is the step that was never finished.
  • Machines shows Home Assistant, but Home Assistant will not open. First confirm the client you are holding is logged in to the same tailnet. Then check the Home Assistant login account and the URL you are using.
  • The route seems to exist but the LAN is unreachable. Confirm the route has been approved in route settings on the Machines page. Then test with the correct range, against a target you are authorized to reach. This is the next section.
  • Things got uncertain after a change. Go back to the last known-good state, keep the logs and the change record, then change one thing at a time.
Where you finish that sign-in matters. Complete the Web UI sign-in — the step that logs you in and authorizes the device — only on a personal device you trust. Not a shared family laptop, not a borrowed machine, not a hotel business-center PC. That sign-in is what puts a device on your tailnet, and a device on your tailnet has a path to your home.
The minimal-change principle: change one thing, test from another network, write down the result. That keeps every step reversible in a way that flipping routes, policy, DNS and public sharing all at once never does.
When it is the route

Pending approval is a checkpoint, not a fault

If you set up a subnet router in Part 5, this is the one failure that reads like a bug and is not. The app on your Home Assistant host can offer to carry traffic for a range of your home network. The tailnet will not act on that offer until an administrator approves it, in the admin console, under that machine's route settings. Until then, the subnet is shown as still waiting for approval.

In plain terms

It is a delivery driver who has the right address and is standing at the door of the building. Nothing has gone wrong. Somebody inside still has to press the buzzer, and until they do, the parcel does not come in.

flowchart LR
  A["The app advertises one subnet"] --> B["The subnet is listed
as awaiting approval"] B --> C{"An administrator approves it
in the admin console, under
that machine's route settings"} C -->|"not yet"| D["Tailnet devices cannot reach that range.
The checkpoint is doing its job"] C -->|"approved"| E["Tailnet devices can reach
the approved range"] E --> F["Retest from another network,
against a target you are
authorized to reach"]
Why a route can exist and still not workAdvertising and approving are two different acts, done by two different people in two different places. That separation is the security feature.

The page below is where you read that state from inside Home Assistant. Note what it is: the Subnet router page of the Tailscale app, not the admin console. The approval itself happens elsewhere, on the Machines page in the admin console — there is no capture of that screen here, so go by what your own console shows you.

The Subnet router page of the Tailscale app, open inside Home Assistant. The Home Assistant sidebar runs down the left with Overview at the top, then several dashboards, then File editor, HA-MCP, Media, Pi Agent and Tailscale, with Tailscale highlighted in blue as the current page; Settings, Notifications and the admin account sit at the bottom. In the main panel a tailscale logo sits beside a grey box marked as the redacted tailnet name, with a Viewing dropdown at the top right. Below a partly covered Back link is the heading Subnet router and the line Add devices to your tailnet without installing Tailscale, with a Learn more link. Under that, a large grey box stands in for the actual subnet CIDR, which has been redacted. Two red numbered markers with Chinese annotation boxes are overlaid on the capture.
The Subnet router page inside Home AssistantThis is the app's own page, not the Tailscale admin console. The tailnet name and the subnet range are both redacted in this capture.Annotations added by the guide author
  • Tailscale is highlighted in the sidebar. That is how you know you are inside the Home Assistant app rather than on a Tailscale website — the whole Home Assistant menu is still there beside it.
  • Subnet router is the heading, with the line about adding devices to your tailnet without installing Tailscale underneath it. That single sentence is the entire purpose of the feature.
  • The two large grey boxes are redactions, not empty fields. On your own screen these carry your tailnet name and the subnet range being advertised. Yours will show real values, and two rules follow from that: do not copy the names or IPs in the screenshots as your own values — the ones in any guide, including this one, belong to somebody else's network and will not work on yours — and do not paste your own values into a forum post.
  • The Chinese annotations added on top of the capture make the two points this section is about: that waiting for approval is a security checkpoint rather than an error, and that the approval is done in the admin console under the machine's route settings.
  • Viewing, top right, is a dropdown. Nothing on this page approves anything — you are reading state here, not granting it.

One habit goes with this: advertise one range with a clear purpose, and only that one. Not every network at once. When you write the range down — and here it is only a placeholder, since your own value is yours — it looks like 192.168.1.0/24. Take an inventory before you advertise a second one.

Updates and testing

Updating without losing your way in

Updates are the most common reason a working setup stops working, mostly because they arrive on a day you were not thinking about remote access. Three things make them uneventful.

Before

Read the release notes, and create a Home Assistant backup. The backup is the difference between an inconvenient evening and a lost one. Do both before you press update, not after something looks wrong.

After

Run a real test from a device on the tailnet, on a different network. Not from the sofa on your home wi-fi — that path may work for reasons that have nothing to do with Tailscale.

If you touched routes or policy

Go back to the Machines page and the policy editor and re-check the approvals and the scope. An update is a good moment to confirm that what is approved is still what you meant to approve.

Do that test the same way every time:

  1. Test 1

    On your home network

    Open Home Assistant on your local network and confirm that the accounts and the dashboard were not affected by whatever you just changed. This is the control, not the test.

  2. Test 2

    On a different network

    Switch a test phone to mobile data or another secure network. Confirm Tailscale is connected. Then open Home Assistant once. If the change involved routes, test only against targets you are authorized to manage.

  3. Test 3

    Write down the result

    Success or failure, which device, what time. Six months later, this note is worth more than the memory of “it used to work.”

  4. Test 4

    Stop at the security boundary

    Do not turn on something extra while you are already in there. Exit nodes, DNS override and public Funnel are outside what this guide covers. Leave them disabled unless you have a reason you can state out loud.

Serve and Funnel are not the same thing. Serve publishes a service inside your tailnet, where only your own devices can reach it. Funnel publishes it to the public internet. This guide keeps access private and never exposes Home Assistant directly to the internet, which means Funnel stays off.

The same restraint applies to anything you add later. Start with the smallest workable setup and expand one step at a time. If all you want is to see your dashboard while you are away from home, private access over the tailnet is usually easier to control than a public entry point. If you do need a LAN subnet, list one subnet with a clear purpose first, and do not advertise every network at once.

What you needWhere to startNot yet
See Home Assistant while awayPrivate access from a device logged in to the tailnetOpen ports, and public sharing you do not need
Manage devicesThe Machines list, with personal accountsA shared admin login everyone uses
Reach your home LANA single approved subnet routeAdvertising several subnets before taking inventory

Permissions follow the same shape. Only the people who need to reach Home Assistant get a path to it, and only the people who need to manage the tailnet get admin console access. Those are two different lists, and they should stay two different lists.

Before you call any of this finished, three security checks. They take about a minute between them:

  • The account logged in to Tailscale is the right one. On the device in your hand and on the Home Assistant host. Signed in is not the same as signed in to the tailnet you meant.
  • Home Assistant is still managed with separate personal accounts. One account per person, with the admin rights each person actually needs. Nothing you did on the network side should have quietly turned that into a single shared login.
  • The Machines list has no unknown or retired devices. Anything you cannot name, and anything belonging to a phone or laptop that is no longer in service, comes off the list.
Leaving a record

The note that makes this survivable

The biggest risk with network settings is not that they are wrong. It is that they worked at the time and nobody remembers why. When you finish a change, write down the date, who did it, the purpose, the state before and after, and the device you verified with — in your password manager, or in your site maintenance notes.

It does not need to be long:

In the notes“2026-08-19, the administrator confirmed the Home Assistant machine is still in the designated tailnet; private access tested successfully from a managed laptop on a non-home network.”
And for a route“Only a single approved LAN CIDR is advertised, approved in the admin console.”

Notice what is not in either sentence: no address, no domain, no CIDR, no credentials. The record exists to explain a decision, not to store a secret. Secrets belong in a controlled secrets manager.

Write this downKeep it out of public docsWho needs it next
Purpose of the change, date, verification resultCredentials, auth keys, login URLsThe Home Assistant maintainer
Each machine's purpose and its owner's roleThe full tailnet domain and private IP addressesThe Tailscale admin
Which subnet, with a clear purpose, was approvedUnredacted CIDRs, scan results, street addressesThe network maintainer
Before you paste anything anywhere: do not post login URLs, auth keys, your tailnet domain, full IP addresses, device serial numbers or raw logs into issues, group chats or screenshots. A log line is easy to trim. An address you have already published is not. And never write street addresses, customer names, the full Tailscale domain or device identifiers into a public repo — a maintenance note that ends up in a public repository stays there.

The record earns its keep on the bad days. A phone is lost, a router is replaced, the app is updated, or admin rights change hands — and the question becomes which layer to roll back. That is also the moment to go through the Machines list and confirm there is nothing unknown or retired sitting in it. When a device leaves for good, revoke it there; the record is what tells you which entry was which.

Do I need to open a port on my router?
The private tailnet flow in this guide does not require public port forwarding for Home Assistant. Assess it against your own network and security policy, but the default answer here is no.
Does Tailscale replace the Home Assistant login?
No. Tailscale manages the network path. Home Assistant should still use personal accounts, strong passwords and appropriate admin rights. The two protect different things and neither substitutes for the other.
My screen says Add-on, not App. Is that a problem?
No. The Home Assistant interface and its translations change with the version. Learn to recognize the Tailscale app and its Info, Configuration, Log and Web UI, then go by what your own screen and the official docs say rather than by the label in any guide.
Can I set up an exit node or DNS override while I am here?
This guide deliberately leaves those out. Finish verifying private Home Assistant access and a single subnet route, then plan them separately from the official documentation. Adding them mid-troubleshoot is how a small problem becomes an unclear one.
Where the facts in this series come from: the guide treats the Home Assistant Community App: Tailscale docs and Tailscale Docs as authoritative. Interface text changes with the app and admin console versions; when a name differs, go by your screen and the official docs first.

The specific pages behind this part:

Next

Where to go from here

that is the series

You have private remote access, and a way to keep it.

The full guide keeps every chapter in one place, along with the official Home Assistant and Tailscale documentation each part was built from.

Open the full guide

Part 6 of the Home Assistant Tailscale Remote Access Guide series on the Apporo blog.

Adapted from the Home Assistant Tailscale Remote Access Guide, produced by WoowTech and released under CC BY 4.0. This adaptation is published by Apporo under the same licence.

Light · Air · Water · Control · apporo

Let the tailnet reach the devices that will never run Tailscale