The first time I seriously planned an IoT VLAN for Home Assistant, it felt like one of those satisfying ideas that should improve everything at once. The least trusted devices would stop living casually beside laptops and servers. The network would look more deliberate. The smart home would feel less like a pile of consumer gadgets and more like a system with boundaries.
That feeling was not wrong. It was just incomplete.
What I did not understand at the beginning was that a smart home is not only a collection of devices. It is also a collection of assumptions about discovery, reachability, and small pieces of local network behavior that usually remain invisible while everything lives on one flat LAN. The moment a real VLAN boundary appears, those assumptions stop hiding. Suddenly a bulb is no longer discovered. A speaker no longer advertises itself in the same way. A mobile app behaves differently. Home Assistant still works, but only after you decide which conversations are allowed to cross the boundary and which ones are not.
That is the part I wish had been explained to me more clearly. An IoT VLAN is usually a good idea. But it becomes a good idea only when the boundary is small enough to understand and the rule set is disciplined enough to preserve normal life.
- Why an IoT VLAN feels obviously correct at first
- Why Home Assistant starts breaking in ways that feel irrational
- What discovery traffic is really doing behind the scenes
- How I now think about the safest simple layout
- Why default-deny rules matter more than perfect segmentation diagrams
- When mDNS reflection helps and when it becomes too generous
- What I would test before expanding the design further
The appeal of an IoT VLAN is real
There is a reason this design shows up so often in homelab and smart-home conversations. It solves a problem people can describe in one sentence: I do not fully trust every camera, plug, speaker, bulb, and appliance on my main network.
That instinct is healthy.
Many smart-home devices are inexpensive, opaque, cloud-dependent, or poorly maintained. Even when they behave well, they rarely deserve the same default trust as a workstation, a NAS, or an administrative machine. Once you see the network that way, a separate IoT segment feels less like overengineering and more like basic hygiene.
That is still how I think about it now. I do not think the mistake is creating the boundary. The mistake is expecting the boundary to create its own operating model automatically.
An IoT VLAN is a trust decision, not a completed design.
That lesson connects directly to what I wish I had known before my first VLAN. The VLAN number is the easy part. The hard part is explaining what the segment is allowed to be and what it is not allowed to become.
Home Assistant makes the hidden parts of the network visible
Home Assistant is one of the reasons VLAN design becomes so educational so quickly. It is not just an application that sends commands to fixed IP addresses all day long. It lives in an ecosystem where many integrations rely on local discovery, local broadcasting, device announcements, and protocols that feel effortless only because the network is carrying a lot of invisible context for you.
Home Assistant’s own developer documentation describes built-in support for discovery via mDNS/Zeroconf and SSDP, and its DHCP discovery integration can also detect devices when they request addresses on the network. That does not mean every device uses every method, but it does mean the smart-home experience is often more local and more discovery-driven than people realize. Once devices sit behind a boundary, that convenience stops being ambient and starts becoming policy.
That was the first emotional shift for me. Before segmentation, the smart home felt like it simply existed. After segmentation, it felt more like a set of deliberate relationships.
Some devices still work beautifully across VLANs once configured. Others discover poorly, adopt badly, or expect broadcast and multicast behavior that no longer reaches them in the same way. That is not Home Assistant being wrong. It is the network finally asking you to define what "local" should mean.
Discovery is where the smart home stops feeling magical
The most confusing part of this transition is that nothing looks obviously broken in a classic infrastructure sense. IPs may be correct. Routing may be correct. DNS may resolve. A ping may even work. And still the experience feels off.
That is because discovery-heavy ecosystems often fail at a softer layer than basic connectivity.
Home Assistant’s documentation makes clear that different integrations can rely on mDNS/Zeroconf, SSDP, or DHCP-based observation. Those methods are not all interchangeable, and they do not all cross boundaries the same way. Some are naturally local to the segment. Some depend on traffic that a strict routed design will not forward by default. Some devices can be added once by IP and remain stable afterward. Others keep wanting to rediscover or announce themselves.
This is where many first IoT VLAN projects become frustrating. We expect the question to be, "Can the device reach Home Assistant?" But a more accurate question is often, "Can the discovery method, onboarding flow, and ongoing control model survive the boundary without being turned into a broad any-to-any exception?"
That is a much better design question.
If an IoT device has an IP address and basic connectivity but still behaves strangely, the missing piece is often discovery, multicast, or a protocol assumption that no longer survives segmentation cleanly.
The safer simple layout is usually less clever than people expect
The layout I trust most now is also the one that feels least theatrical:
- Home Assistant stays on a trusted server or management-oriented segment.
- IoT devices live on their own lower-trust VLAN.
- The firewall uses a default-deny mindset for cross-VLAN traffic.
- Only the flows that are actually needed for onboarding, control, updates, and discovery are opened.
- Multicast reflection is treated as an exception, not a blanket entitlement.
This is not the only possible design, but it is the one I find easiest to reason about later.
The alternative many people drift toward is a network that is segmented in theory but practically re-flattened through permissive rules added one by one under pressure. A speaker fails, so a broad allow rule appears. A phone app struggles, so another one appears. A vendor device behaves mysteriously, so discovery gets opened more widely than intended. After a few weeks, the IoT VLAN still exists, but the meaning of the boundary has become foggy.
That is the part I try to resist now. A useful boundary is not one that blocks everything heroically. It is one whose permissions can still be explained a month later in plain language.
Default deny is calmer than trying to block badness later
This is one of the places where the official pfSense guidance maps beautifully onto homelab reality. Netgate’s firewall best-practices documentation recommends a default-deny strategy and explicitly says administrators should permit only the minimum traffic required for the needs of the network.
That sounds severe when you first read it. In practice, it is kinder.
When I tried to think about an IoT VLAN from the opposite direction, I made the same mistake I made in older networking experiments: I kept asking what dangerous traffic I should block. That question creates a network built out of anxieties. It also scales badly.
The better question is: what does this IoT segment actually need?
Usually the list is shorter than expected:
- outbound internet access for updates, if you allow that at all;
- selective access from Home Assistant to devices it controls or polls;
- selective responses from devices back to Home Assistant;
- possibly a discovery helper for specific protocols that truly need it;
- administrative access only from places you trust.
Everything else can stay denied until there is a real reason to add it.
This is one reason I prefer an architecture-first article over a port list. The exact device rules vary too much. But the discipline does not vary. Minimal allow rules age better than heroic spreadsheets.
mDNS reflection is useful, but it is not a philosophy
One of the most important practical details here is that pfSense documents the Avahi package as a service-discovery tool and notes in the package list that it can reflect mDNS across LAN segments. That makes it genuinely useful in smart-home environments where some discovery must survive segmentation.
Used carefully, it can remove a lot of pain.
Used carelessly, it can also turn the boundary into something blurrier than you intended.
This is the distinction I wish I had appreciated earlier. An mDNS reflector is not "the fix for VLANs." It is a targeted exception for a specific kind of local announcement traffic. If the design depends on reflecting everything everywhere because too many things break otherwise, that is usually a sign the segmentation model may be ahead of the operational clarity.
Sometimes the cleaner answer is not more reflection. Sometimes it is one of these:
- keep Home Assistant and the most discovery-sensitive devices on the same trusted interior segment;
- use static or reserved addressing where an integration can work reliably by direct reachability;
- reduce the number of smart-home ecosystems that need cross-boundary magic;
- segment in fewer, clearer layers until the system becomes understandable.
That last option is not failure. It is maturity.
It also aligns with what Home Assistant itself increasingly reflects in practice: not everything in a local-first ecosystem wants to be abstracted away from the local network. Some parts of the system really do care where "local" is.
Address discipline matters more once smart-home zones exist
This is another place where the smart-home problem quietly becomes a networking problem.
Once Home Assistant sits on one segment and devices sit on another, vague addressing habits become expensive. If a controller, bridge, or device changes unexpectedly, the cost of rediscovery rises. If reservations are inconsistent, troubleshooting gets slower. If ranges are hard to remember, firewall descriptions become less readable and future audits become less honest.
That is why I now treat smart-home segmentation as part of the same mental model described in the guide to static IPs, DHCP reservations, and leases and the piece on how address ranges start making sense. Segmentation only feels mature when addressing also feels intentional.
For devices that Home Assistant depends on directly, DHCP reservations usually keep the design calmer than half-remembered manual static addresses. Not because reservations are fashionable, but because central policy becomes more valuable when the network has more than one interior.
The best first test is not "Does it work?" but "Can I explain why it works?"
This may be the simplest lesson I took from the whole exercise.
After building an IoT VLAN, it is tempting to stop as soon as the lights turn on and the dashboard looks normal again. But the more important test is whether the design is legible.
I now like to ask a few blunt questions:
- Can I describe which segment Home Assistant lives on and why?
- Can I describe which kinds of IoT devices belong on the lower-trust segment and why?
- Can I explain each cross-VLAN rule in one sentence?
- Do I know whether discovery is happening by direct reachability, DHCP-based detection, SSDP, mDNS reflection, or something vendor-specific?
- If a new device fails tomorrow, do I know where to look first?
If the answer to those questions is no, the network may still be functional, but it is not yet calm.
That is the standard I care about more now. Not maximum segmentation. Not maximum cleverness. Calmness.
If a discovery-sensitive device breaks after segmentation, the fastest fix is often the wrong architectural fix. Temporary broad access has a way of becoming permanent policy unless the rule is narrowly reworked immediately.
What I would do differently now
If I were designing a Home Assistant and IoT VLAN setup again from scratch, I would do it in this order:
- Define one lower-trust IoT segment, not several.
- Keep Home Assistant on a stable trusted segment with predictable addressing.
- Use default-deny cross-VLAN policy from the beginning.
- Add only the minimum control traffic required for the first few devices.
- Introduce mDNS reflection only when a known discovery path truly needs it.
- Document each exception while it is still fresh.
- Expand the design only after daily use feels boring and reliable.
That last point matters more than it sounds. The best smart-home network is not the one that feels most advanced in a diagram. It is the one that disappears into ordinary life without becoming mysterious every time a speaker, plug, or bridge is replaced.
Conclusion
Putting Home Assistant and smart devices on an IoT VLAN is still something I recommend. But I no longer think of it as a single security upgrade that happens the moment the subnet exists. It is a design exercise in trust, discovery, and restraint.
Home Assistant brings out that truth faster than most tools because it depends so heavily on the small local behaviors people do not usually notice until they segment them away. Once you accept that, the goal becomes clearer. Do not isolate everything as aggressively as possible. Build one boundary you can actually explain. Use default deny. Open only what real daily automation needs. Treat discovery helpers as targeted tools, not as excuses to flatten the network again.
That is the design I trust now. Not because it looks the most technical, but because it remains understandable after the excitement wears off.
FAQ
Should Home Assistant live on the same VLAN as all IoT devices?
Not necessarily. It can live on a trusted segment while IoT devices sit on a lower-trust VLAN, as long as the required control and discovery flows are intentionally allowed. The simpler question is whether the boundary remains understandable after those exceptions are added.
Why do devices stop showing up after I move them to an IoT VLAN?
Often because the integration or onboarding flow depends on local discovery behavior such as mDNS/Zeroconf, SSDP, DHCP-based detection, or other traffic that does not cross the new boundary in the same way by default.
Is mDNS reflection always the right fix?
No. It can help when discovery really needs it, and pfSense’s Avahi-related documentation supports that role, but it should be treated as a targeted exception rather than a blanket design principle.
What is the safest firewall approach for an IoT VLAN?
Start from default deny and add only the minimum traffic required for actual device behavior. That matches pfSense best-practice guidance and usually produces a ruleset that is easier to audit later.
Is it better to create many smart-home VLANs right away?
Usually no. One clear IoT boundary is often more useful than several segments whose permissions are still vague. Complexity grows faster than confidence when segmentation expands before the device behavior is understood.



