Putting a device on its own VLAN feels like isolation, but on most routers it isn't — by default. Here's how to check whether a VLAN actually has the isolation you assume it does, how to fix it properly, and a real gotcha that can silently break the one direction you meant to keep working.
Modern routers with zone-based firewalls (UniFi, pfSense, OPNsense, and similar all work this way) group networks into zones — and by default, every "trusted" network you create often lands in the same zone as everything else, with a standing rule permitting all traffic between zone members. Creating a new VLAN for a specific purpose — a media/downloads network, a smart-home segment, a guest network you upgraded from basic — does not automatically isolate it. Always check the actual zone assignment and the rules governing that zone pair before assuming a VLAN is isolated just because it has its own subnet.
Most zone-based firewalls evaluate rules in order and stop at the first match. If a rule permitting everything ("Allow All" within a zone) already exists, a new block rule added after it is completely inert — traffic hits the allow rule first and never reaches your block rule. The fix has two parts:
Scoping the block rule's source specifically (not "any") means traffic in the other direction — your management network reaching into the isolated VLAN for admin access, monitoring, or a reverse proxy — is completely unaffected, since it never matches the block rule's source condition at all.
Fix: scope the block rule's connection-state matching to new connections only (sometimes labeled "New" plus "Invalid," excluding "Established"/"Related"). This blocks the isolated VLAN from initiating anything into your other networks, while leaving already-permitted connections' return traffic completely untouched, regardless of which network technically "owns" the reply packets.
Fix: whenever you add a new specific-purpose allow rule to a zone pair that already has a block rule in it, check its position relative to every existing rule in that pair, not just whether it's individually configured correctly. The general order that works: specific carve-outs first, broad isolation blocks next, broad catch-all allows last.
Lesson: when a specific-purpose rule mysteriously doesn't work despite looking correct in isolation, check whether a broader block elsewhere in the same zone pair now sits above it in evaluation order — especially if that block was added by someone else, or in an earlier session, for a totally unrelated reason. It's easy to test your own new rule in isolation and never notice it's shadowed.
Don't trust ping alone in either direction — on some routers ICMP is deprioritized or filtered independently of your actual rule, which can look like a false failure (or false success) either way. Test with a real connection instead:
# From the network that should still have access:
curl -s -o /dev/null -w '%{http_code}\n' http://<isolated-vlan-host>:<port>/
# From inside the isolated network, toward somewhere that should now be blocked:
timeout 5 bash -c "echo > /dev/tcp/<other-network-host>/<port>" && echo REACHED || echo BLOCKED
Confirm both directions explicitly: the network you isolated can no longer reach elsewhere, and everything that depended on reaching into it (admin access, reverse proxies, monitoring) still works exactly as before.