Skip to Content

Let the tailnet reach the devices that will never run Tailscale

one subnet, on purpose
HA Tailscale Guide · Part 5

Let the tailnet reach the devices that will never run Tailscale

Everything so far has been about reaching Home Assistant itself, and for that you need nothing in this article. A subnet router is for the rest of the house — the printer, the old NAS, the settings page on your switch — hardware that will never have Tailscale installed on it. This article covers whether that is worth doing at all, how to advertise exactly one subnet, and why the route then sits there marked as waiting until an administrator says yes. The rule that has governed every part of this guide still governs this one: keep access private first, and never expose Home Assistant directly to the internet.

1 subnet
The only scope this article advertises
2 places
The app advertises it, the admin console approves it
4 states
Advertised, approved, accepted, then reachable
Do you need one

Most people reading this do not need a subnet router

That is the honest first answer, and worth taking seriously before you change any settings. You need a subnet router in exactly one situation: you want to reach, from a device on your tailnet, something on your home network that does not have Tailscale installed on it. If all you want is to open your Home Assistant dashboard while you are out, the earlier parts of this guide already did that.

In plain terms

Every device you install Tailscale on gets its own front door onto the private network. Your printer, the NAS you bought in 2016 and the camera with the fixed firmware are never going to get one. A subnet router is one machine on that street agreeing to answer the door on behalf of the neighbors and carry the parcel down the hall. It is useful. It is also one machine now handling other people's post, which is why the rest of this article is about keeping that job small.

That decision has a shape:

flowchart TD
  A["What do you actually want to
reach from outside the house?"] --> B{"Does that device itself
run Tailscale?"} B -->|"yes, such as Home Assistant"| C["No subnet router needed.
The earlier parts already cover it"] B -->|"no, and it never will"| D{"Is it a device you are
authorized to manage?"} D -->|"no, someone else's NAS,
a camera, a resident's device"| E["Stop here. It is not
yours to route to"] D -->|"yes"| F["A subnet router is the right tool.
Advertise one subnet, with a purpose"]
The decision before the configurationTwo of the three paths through it end without you changing anything. That is the common outcome, not a failure to get somewhere.
Scope of this article: basic one-way access to a single subnet. Preserving the original source IP, site-to-site links and multiple-subnet designs are separate pieces of planning and are not covered here.

If you have landed on the path that does need one, start with the smallest workable setup and expand from there. 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 genuinely need a LAN subnet, list one subnet with a purpose you can state in a sentence, and do not advertise every network at once.

What you needWhere to startNot yet
View Home Assistant remotelyPrivate access from a device signed in to the tailnetOpen ports and unnecessary public sharing
Manage devicesThe Machines list and separate personal accountsA shared admin login
Reach your home LANA single approved subnet routeAdvertising several subnets without taking inventory first
Three layers

Three layers, and knowing which one you are clicking in

More people get lost here than get lost in the settings. Three separate things are involved, their vocabulary overlaps, and the step that makes a route usable happens in a different one from the step that creates it.

LayerWhat it handlesHow you verify it here
Tailscale admin consoleAccounts, the Machines list, routes and policyHome Assistant appears in Machines
The Tailscale app in HARuns Tailscale on the Home Assistant hostStatus healthy, no blocking errors in the log
Home AssistantLogin, dashboard and admin rightsYou log in normally with a personal account

Two naming notes, because both cause a wrong click. First, the tailnet is your private Tailscale network and a machine is one device that has joined it — the Machines list is a list of joined devices, not a list of routes. Second, the Tailscale service inside Home Assistant is reached from Settings → Apps; if your version of the interface still uses the older name, that same page says Add-ons. Recognize the thing rather than the label: Info, Configuration, Log and Web UI are the four places you will use.

Here is what a request looks like once all of this works:

flowchart LR
  A["Your phone, away from home,
signed in to the tailnet"] --> B["Encrypted tailnet path.
No router port opened"] B --> C["The Home Assistant host,
running the Tailscale app"] C --> D{"Is the destination inside
the one approved subnet?"} D -->|"yes"| E["Forwarded onto your home LAN"] D -->|"no"| F["Not forwarded"] E --> G["The printer or NAS answers.
It never knew Tailscale existed"]
What the subnet router is doingThe Home Assistant host becomes the one hop between the private network and your LAN. The approved range is the whole of what it will carry.

Notice the last box. The device on your LAN is unchanged and unaware. That is the appeal, and also the reason to keep the range narrow — the devices behind it did not opt in.

Waiting is the point

Advertised is not approved

Your app is now telling the tailnet it can reach a subnet, and other devices still cannot use it. People read that as a fault and go looking for what broke. Nothing broke. Tailscale's own subnet router guide requires a separate approval step, performed by an administrator, and until that has happened other tailnet devices should not assume the route is usable.

In plain terms

It is the difference between a builder telling you he can get into the whole basement and you deciding which room he gets a key to. The first is something he says about himself. The second is a decision you make, in a different place, on purpose. A subnet route waiting for approval is a builder standing at the door with no key yet.

The Tailscale page inside Home Assistant is where you confirm the first half happened.

The Subnet router page of the Tailscale app, viewed inside Home Assistant. The Home Assistant sidebar runs down the left with Tailscale selected and highlighted, below Overview, Energy, Activity, History, File editor, HA-MCP, Media and Pi Agent, and above Settings, Notifications and the admin account. The main panel starts with the small tailscale logo beside a gray box that covers the tailnet name, and a Viewing dropdown at the top right. Under a partly obscured back link is the heading Subnet router and the line Add devices to your tailnet without installing Tailscale, with a Learn more link. Below that, a large gray box covers the area where the advertised subnet range would be listed. Two red numbered markers with Chinese annotation boxes have been added on top of the screen by the guide's author.
The Subnet router page in the appThis is inside Home Assistant, not the Tailscale admin console. The tailnet name and the advertised range are both masked in this capture.Red markers and Chinese notes were added by the source author
  • Tailscale is highlighted in the Home Assistant sidebar. That is the single most useful thing on the screen: you are in Home Assistant. Nothing you click on this page approves a route.
  • The tailnet name at the top is behind a gray mask. Your own screen shows the real name there. Treat it the way this capture does — masked — whenever you share a screenshot.
  • Subnet router is the heading, and the line under it, Add devices to your tailnet without installing Tailscale, is the entire purpose of the feature in one sentence.
  • The large gray panel is where the advertised range and its state would be listed. It is masked here, so this capture cannot show you what a pending badge looks like. On your own screen this is the panel to read.
  • Viewing, top right, is the app's own dropdown. It is not the approval control either.
  • The red numbered boxes are annotations the guide's author drew on top of the screen, written in Chinese. They point at where the waiting state is shown, and note that the approval itself is done in route settings in the admin console — which is the next section, and a different browser tab.
Do not copy the names or IPs in the screenshots as your own values. Not from the capture above, and not from any other guide you read. The gray boxes are hiding one particular household's tailnet name and one particular subnet range. Yours are different, and a value borrowed from somebody else's screen produces a configuration that looks entirely plausible and routes nothing.
A route waiting for approval is a security checkpoint, not an error. It exists precisely so that a machine cannot grant itself access to a whole network by claiming it can reach one. If the state ever changed to approved without anybody approving it, that would be the thing worth worrying about.
Approve and accept

Approving it, and getting the client to take the route

This half happens in the Tailscale admin console, with an administrator account, in an ordinary browser tab. It is not part of Home Assistant, and no screenshot in this guide shows it — so read these as steps rather than looking for a picture to match.

  1. Step 1

    Confirm the app really advertised the route

    Go back to the previous section first. The Tailscale app must have saved the correct advertise_routes value and finished restarting. Approving a route that was never advertised is the most common way to spend twenty minutes on nothing.

  2. Step 2

    Find Home Assistant in Machines

    With an admin account, go to the admin console, open Machines, and find the machine that corresponds to your Home Assistant host — the one whose purpose you can actually name. Two things on that row are worth reading before you touch anything: its last-seen status, which tells you whether you are looking at a live machine or a stale entry, and its feature badges, the Subnets badge among them. While you are there, read the list for unknown or retired devices rather than scrolling past it.

  3. Step 3

    Open Edit route settings and approve only your range

    From that machine's menu, choose Edit route settings, select the IP range you meant to approve this time, and save.

    Do not approve other pending routes while you happen to be on the screen. Anything else waiting there is either something you have not thought about yet or something you did not put there — and both of those deserve their own decision.

  4. Step 4

    Have the test device accept routes

    On a Linux client, run sudo tailscale set --accept-routes when the official docs call for it. This is a setting on the device doing the testing. It does not turn Home Assistant into an exit node and it changes nothing about your tailnet.

  5. Step 5

    Run one minimal end-to-end test

    Test an authorized LAN address with a known purpose at the IP level first, then the service running on it. On success, record what you did. On failure, re-check the advertised route, the approval, whether the client is accepting routes, and your access policy — one at a time.

In plain terms

Step 4 is the one people skip. A new road appearing on the map does not put it into your car's satnav. The route can be advertised at your house and approved by the administrator and the laptop in your hand still will not use it, because nobody told the laptop to look.

The four states, and the two places they stall:

flowchart TD
  A["Configuration saved and
the app restarted"] --> B["State 1 — advertised.
The host claims it can reach the subnet"] B --> C{"Has an administrator
approved it?"} C -->|"not yet — this is
the checkpoint"| D["Other devices should not
assume the route works"] D --> E["Admin console, then Machines,
then Edit route settings,
then select that one range"] E --> F["State 2 — approved"] C -->|"yes"| F F --> G{"Is the testing device
accepting subnet routes?"} G -->|"no — common on Linux clients"| H["Run the accept-routes command
on that device"] H --> I["State 3 — accepted by the client"] G -->|"yes"| I I --> J["State 4 — the LAN device answers"]
Four states, two places it can stallBoth stalls look identical from the phone in your hand: the address simply does not answer. Knowing there are two of them is what keeps the troubleshooting short.

Three things to confirm before you close the admin console tab:

  • The account signed in to Tailscale is the right one. It is easy to be holding a personal account when you meant to be using the admin account, or the other way round, and the approval you just granted was granted by whichever one you were actually signed in as.
  • Home Assistant is still managed with separate personal accounts. Nothing in this article changes that, and nothing should. The Tailscale account and the Home Assistant account are two different credentials on purpose.
  • The Machines list has no unknown or retired devices. Every entry should be a device you can name and a person you can name. Anything else comes off the list.
Least privilege, at both ends. Only the people who need to reach Home Assistant should have a path to it, and only the people who need to manage the tailnet should have admin console access. Those are two different groups, and letting them collapse into one shared login is how a network stops having a boundary. Home Assistant keeps its own separate personal accounts either way — Tailscale manages the path, not the login.
Test, then write it down

Two networks, then a record somebody else can read

Test on both sides of your own front door. A change that works only from your sofa has not been tested.

  1. Test 1

    On your home network

    Open Home Assistant on your local LAN and confirm that the accounts and the dashboard were not affected by anything you changed. This is the check for damage, not the check for the new capability.

  2. Test 2

    On a different network

    Switch the test phone to mobile data or another network you trust, confirm Tailscale is connected, and open Home Assistant once. Then, and only then, try the LAN target — and only a target you are authorized to manage.

  3. Test 3

    Record the outcome either way

    Note whether it worked, which device you used, and the time. That is far more use later than remembering “it used to work.”

  4. Test 4

    Stop at the boundary

    Exit nodes, DNS override and public Funnel setup are outside this guide. Having got a subnet route working is not a reason to carry on into them the same evening.

Do not test against things that are not yours. Pick a LAN target with a known purpose that you are authorized to manage. An unknown NAS, a camera or a resident's device is not a test target, and pointing a scan at one is not troubleshooting.

The biggest risk with network settings is not that they break. It is that they work, and a year later nobody remembers why. When you finish, 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 your site maintenance notes.

A usable record reads something like this: “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.” For a subnet router, add a line saying that only a single approved LAN CIDR is advertised and that it was approved in the admin console.

Record thisKeep out of public documentsWho 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
Never post these anywhere: login URLs, auth keys, your tailnet domain, full IP addresses, device serial numbers or raw logs — not in an issue, not in a group chat, not in a screenshot. The captures in this guide are masked for exactly that reason. Notes describe a decision; secrets belong in a controlled secrets manager.
The minimal-change principle: change one thing, test it from another network, write down the result, then change the next thing. Flipping routes, policy, DNS and public sharing in one sitting does not save time — it removes your ability to tell which of them did what.
If the LAN stays unreachable

Check these, in this order

  • There is no Apps entry at all. Confirm whether your Home Assistant install is managed by Supervisor. A Container or Core install cannot follow the app path in this guide — nothing is wrong with it, it is a different shape of installation.
  • Home Assistant is not in Machines. Go back to the app's Web UI and finish the login, then read the app's log. Reinstalling repeatedly does not fix a login that was never completed.
  • Machines shows it, but Home Assistant will not open. First confirm the client is signed in to the same tailnet, then check the Home Assistant account and the URL you are using. That is a login problem wearing a network problem's clothes.
  • The route seems to exist but the LAN is unreachable. Confirm the route was actually approved in route settings on the Machines page, confirm the test device is accepting routes, and then test with the correct CIDR against a target you are authorized to reach.
  • Things got uncertain after a change. Return to the last known-good state, keep the logs and the change record, and then change one thing at a time.
Do I have to open a port on my router for this?
The private tailnet flow described in this guide does not require public port forwarding for Home Assistant. Assess it against your own network and security policy, but the whole point of the approach is that the answer here is no.
Does Tailscale replace the Home Assistant login?
No. Tailscale manages the network path. Home Assistant should still use separate personal accounts, strong passwords and appropriate admin rights. Two layers, two sets of credentials, on purpose.
My screen says Add-on, not App
The Home Assistant interface and its translations vary by version. Recognize the Tailscale app and its Info, Configuration, Log and Web UI tabs, then go by what your own screen and the official docs say rather than by the wording printed here.
Can I set up an exit node or DNS override while I am in here?
This guide deliberately leaves both out. Finish verifying private Home Assistant access and one working subnet route first, then plan those separately from the official docs. They change how traffic leaves your devices, which is a much larger decision than the one this article asked you to make.
Can I advertise several subnets at once and sort it out later?
You can, and it is the thing this article most wants you to avoid. Advertising every network without taking inventory first means you no longer know what the approval you gave actually covers. One subnet, with a purpose you can state in a sentence, then the next one when you need it.
A device left the household. What do I do?
Revoke it. Open the Machines list in the admin console and deal with the entry for that device rather than leaving it in place. A retired or unknown machine sitting in the list is the same problem as an old key still cut for your front door, and it is worth a periodic read of the whole list rather than only acting when something is lost.
Where the facts in this article come from. This guide treats the Home Assistant Community App: Tailscale docs and Tailscale Docs as authoritative — those two are what “the official docs” means everywhere above, including the subnet router setup and route approval pages and the access controls pages. Interface text changes with the app and admin console versions, so when a name on your screen differs from a name printed here, go by your screen and those docs first.
Next

Where to go from here

keep going

The route works. Now make it survive normal life.

Part 6 is the maintenance half: how phones and laptops should be set up for day-to-day use, what to check when something stops working, how to handle updates, and the handover checklist for whoever looks after this after you.

Open the full guide

Part 5 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

Decide who can reach Home Assistant, then give them a clean address