WiFi Problems with VLAN filtering enabled

I am replacing my home flat network with 3 openwrt model one routers with each attached to a managed switch. All routers are at firmware 25.12. The learning curve is steep, but I’m slowly making progress. It all works well with VLAN filtering disabled, but if I turn on VLAN filtering, I cannot connect to the network via WiFi. WiFi association succeeds with bridge VLAN filtering enabled. The device completes the full association handshake (probe, authentication, association, 4-way WPA2 handshake). It also shows as associated in iwinfo with a valid signal level and bit rate. However, the subsequent DHCP discovery broadcast gets no response from dnsmasq. I’ve checked the following items:

  1. DHCP request visible on br-lan via tcpdump.
  2. Dnsmasq listening on 0,0,0,0:67 confirmed via netstat.
  3. Vlan_default_pvid=1 confirmed via ip –d link show br-lan.
  4. Localservice=0 makes no difference.
    What’s going wrong? Is there an additional step needed to register dynamically added WiFi interfaces in the bridge VLAN table after hostapd adds them to the bridge?

Let's see the config of the main router and the managed switch (screen grabs are fine for the switch, unless it happens to be running OpenWrt in which case text configs are better). Please indicate which ports are used for each connection on the managed switch.

Please connect to your OpenWrt device using ssh and copy the output of the following commands and post it here using the "Preformatted text </> " button (red circle; this works best in the 'Markdown' composer view in the blue oval):

Screenshot 2025-10-20 at 8.14.14 PM

Remember to redact passwords, VPN keys, MAC addresses and any public IP addresses you may have:

ubus call system board
cat /etc/config/network
cat /etc/config/wireless
cat /etc/config/dhcp
cat /etc/config/firewall

ubus call system output:

Here is the information you requested.  I really appreciate any help you can give me to get my VLAN system up and running.

ubus call system board
{
        "kernel": "6.12.87",
        "hostname": "openwrt-one",
        "system": "ARMv8 Processor rev 4",
        "model": "OpenWrt One",
        "board_name": "openwrt,one",
        "rootfs_type": "squashfs",
        "release": {
                "distribution": "OpenWrt",
                "version": "25.12.4",
                "firmware_url": "https://downloads.openwrt.org/",
                "revision": "r32933-4ccb782af7",
                "target": "mediatek/filogic",
                "description": "OpenWrt 25.12.4 r32933-4ccb782af7",
                "builddate": "1778712129"
        }

main router: /etc/config/network

config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd62:8fe7:af7e::/48'
	option packet_steering '1'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth1'
	option bridge_vlan_filtering '1'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.50.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config interface 'wan'
	option device 'eth0'
	option proto 'dhcp'

config interface 'wan6'
	option device 'eth0'
	option proto 'dhcpv6'

config interface 'management'
	option proto 'static'
	option device 'br-lan.60'
	option ipaddr '192.168.60.1'
	option netmask '255.255.255.0'

config interface 'guest'
	option proto 'static'
	option device 'br-lan.70'
	option ipaddr '192.168.70.1'
	option netmask '255.255.255.0'

config interface 'iot'
	option proto 'static'
	option device 'br-lan.80'
	option ipaddr '192.168.80.1'
	option netmask '255.255.255.0'

config bridge-vlan
	option device 'br-lan'
	option vlan '1'
	list ports 'eth1:u*'

config bridge-vlan
	option device 'br-lan'
	option vlan '60'
	list ports 'eth1:t'

config bridge-vlan
	option device 'br-lan'
	option vlan '70'
	list ports 'eth1:t'

config bridge-vlan
	option device 'br-lan'
	option vlan '80'
	list ports 'eth1:t'

Main router /etc/config/wireless:

config wifi-device 'radio0'
        option type 'mac80211'
        option path 'platform/soc/18000000.wifi'
        option band '2g'
        option channel '1'
        option htmode 'HE20'
        option num_global_macaddr '7'
        option country 'US'
        option cell_density '0'

config wifi-device 'radio1'
        option type 'mac80211'
        option path 'platform/soc/18000000.wifi+1'
        option band '5g'
        option channel '36'
        option htmode 'HE80'
        option num_global_macaddr '7'
        option cell_density '0'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'OpenWrt'
        option encryption 'none'
        option disabled '1'

config wifi-iface 'default_radio1'
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option ssid 'OpenWrt'
        option encryption 'none'
        option disabled '1'

config wifi-iface 'wifinet2'
        option device 'radio0'
        option mode 'ap'
        option ssid 'Redacted'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'lan'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

config wifi-iface 'wifinet3'
        option device 'radio1'
        option mode 'ap'
        option ssid 'Redacted'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'lan'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

config wifi-iface 'wifinet4'
        option device 'radio0'
        option mode 'ap'
        option ssid 'Guest'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'guest'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

config wifi-iface 'wifinet5'
        option device 'radio0'
        option mode 'ap'
        option ssid 'Management'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'management'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

config wifi-iface 'wifinet6'
        option device 'radio0'
        option mode 'ap'
        option ssid 'IoT'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'iot'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

config wifi-iface 'wifinet7'
        option device 'radio1'
        option mode 'ap'
        option ssid 'Guest'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'guest'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

config wifi-iface 'wifinet8'
        option device 'radio1'
        option mode 'ap'
        option ssid 'Management'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'management'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

config wifi-iface 'wifinet9'
        option device 'radio1'
        option mode 'ap'
        option ssid 'IoT'
        option encryption 'psk2'
        option key 'Redacted'
        option network 'iot'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'

Main router /etc/config/firewall

config defaults
        option syn_flood '1'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'

config zone
        option name 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        list network 'lan'

config zone
        option name 'wan'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        option mtu_fix '1'
        list network 'wan'
        list network 'wan6'

config forwarding
        option src 'lan'
        option dest 'wan'

config rule
        option name 'Allow-DHCP-Renew'
        option src 'wan'
        option proto 'udp'
        option dest_port '68'
        option target 'ACCEPT'
        option family 'ipv4'

config rule
        option name 'Allow-Ping'
        option src 'wan'
        option proto 'icmp'
        option icmp_type 'echo-request'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-IGMP'
        option src 'wan'
        option proto 'igmp'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-DHCPv6'
        option src 'wan'
        option proto 'udp'
        option dest_port '546'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-MLD'
        option src 'wan'
        option proto 'icmp'
        option src_ip 'fe80::/10'
        list icmp_type '130/0'
        list icmp_type '131/0'
        list icmp_type '132/0'
        list icmp_type '143/0'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Input'
        option src 'wan'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        list icmp_type 'router-solicitation'
        list icmp_type 'neighbour-solicitation'
        list icmp_type 'router-advertisement'
        list icmp_type 'neighbour-advertisement'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Forward'
        option src 'wan'
        option dest '*'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-IPSec-ESP'
        option src 'wan'
        option dest 'lan'
        option proto 'esp'
        option target 'ACCEPT'

config rule
        option name 'Allow-ISAKMP'
        option src 'wan'
        option dest 'lan'
        option dest_port '500'
        option proto 'udp'
        option target 'ACCEPT'

config zone
        option name 'guest'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        list network 'guest'

config forwarding
        option src 'guest'
        option dest 'wan'

config rule
        option name 'Guest to Internet'
        option src 'guest'
        option dest 'wan'
        option target 'ACCEPT'

config rule
        option name 'Guest to printer'
        option src 'guest'
        option dest 'lan'
        list dest_ip '192.168.50.18'
        option dest_port '631'
        option target 'ACCEPT'

config zone
        option name 'iot'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        list network 'iot'

config zone
        option name 'management'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option masq '1'
        list network 'management'

config forwarding
        option src 'management'
        option dest 'wan'

config rule
        option name 'Management to Internet'
        option src 'management'
        option dest 'wan'
        option target 'ACCEPT'

config rule
        option name 'Management to Main LAN'
        option src 'management'
        option dest 'lan'
        option target 'ACCEPT'

config rule
        option name 'Management to IoT'
        option src 'management'
        option dest 'iot'
        option target 'ACCEPT'

config rule
        option name 'Block Management to Guest'
        option src 'management'
        option dest 'guest'
        option target 'REJECT'

config rule
        option name 'Main LAN to Management'
        option src 'lan'
        option dest 'management'
        option target 'ACCEPT'

config rule
        option name 'LAN to NAS'
        option src 'lan'
        option dest 'management'
        option dest_port '22'
        option target 'ACCEPT'

Main router /etc/config/dhcp:

config dnsmasq
	option domainneeded '1'
	option boguspriv '1'
	option filterwin2k '0'
	option localise_queries '1'
	option rebind_protection '1'
	option rebind_localhost '1'
	option local '/lan/'
	option domain 'lan'
	option expandhosts '1'
	option nonegcache '0'
	option cachesize '1000'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
	option nonwildcard '1'
	option localservice '1'
	option ednspacket_max '1232'
	option filter_aaaa '0'
	option filter_a '0'

config dhcp 'lan'
	option interface 'lan'
	option start '10'
	option limit '220'
	option leasetime '12h'
	option dhcpv4 'server'
	option dhcpv6 'server'
	option ra 'server'
	list ra_flags 'managed-config'
	list ra_flags 'other-config'

config odhcpd 'odhcpd'
	option maindhcp '0'
	option leasefile '/tmp/hosts/odhcpd'
	option leasetrigger '/usr/sbin/odhcpd-update'
	option loglevel '4'

config dhcp 'management'
	option interface 'management'
	option start '100'
	option limit '150'
	option leasetime '12h'

config dhcp 'guest'
	option interface 'guest'
	option start '100'
	option limit '150'
	option leasetime '12h'

config dhcp 'iot'
	option interface 'iot'
	option start '100'
	option limit '150'
	option leasetime '24h'
	list dhcp_option '6,192.168.80.1'

ap1 /etc/config/network:

config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd62:8fe7:af7e::/48'
	option packet_steering '1'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth1'
	option bridge_vlan_filtering '0'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.50.3'
	option netmask '255.255.255.0'
	option delegate '0'

config interface 'management'
	option proto 'static'
	option device 'br-lan.60'
	option ipaddr '192.168.60.3'
	option netmask '255.255.255.0'
	option delegate '0'

config interface 'guest'
	option proto 'static'
	option device 'br-lan.70'
	option ipaddr '192.168.70.3'
	option netmask '255.255.255.0'
	option delegate '0'

config interface 'iot'
	option proto 'static'
	option device 'br-lan.80'
	option ipaddr '192.168.80.3'
	option netmask '255.255.255.0'
	option delegate '0'

ap2 /etc/config/network:

config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd62:8fe7:af7e::/48'
	option packet_steering '1'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth0'
	list ports 'eth1'
	option bridge_vlan_filtering '0'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.50.4'
	option netmask '255.255.255.0'
	option delegate '0'

config interface 'management'
	option proto 'static'
	option device 'br-lan.60'
	option ipaddr '192.168.60.4'
	option netmask '255.255.255.0'
	option delegate '0'

config interface 'guest'
	option proto 'static'
	option device 'br-lan.70'
	option ipaddr '192.168.70.4'
	option netmask '255.255.255.0'
	option delegate '0'

config interface 'iot'
	option proto 'static'
	option device 'br-lan.80'
	option ipaddr '192.168.80.4'
	option netmask '255.255.255.0'
	option delegate '0'

TPLink TL-SG108E Managed Switch:

TPLink TL-SG108E Managed Switch

802.1Q VLAN Configuration:		 Enabled

VLAN ID     VLAN Name    Member Ports   Tagged Ports   Untagged Ports

   1         Default          1-8           1-4             5-8

  60                          1-4           1-4              -

  70                          1-4           1-4              -

  80                          1-4           1-4              -

Let's start with the main router...

The lan interface above is not configured to use a bridge-vlan. As a result, it's effectively disconnected from wifi and ethernet. To fix this, simply change the device to br-lan.1.

Next, I highly recommend that you remove all 802.11r related items from this (last 3 lines) and from every SSID on every AP. It can actually cause more harm than good with respect to roaming performance and should only be used if there is an actual demonstrated need for it after otherwise optimizing the wifi performance.

Remove masquerading from the guest zone:

Delete this rule -- you already have a forwarding statement that allows this same thing.

Remove masquerading from management:

Delete this:

Replace these:

with this:

config forwarding
        option src 'management'
        option dest 'lan'

config forwarding
        option src 'management'
        option dest 'iot'

Delete this (it's not needed):

Replace this:

with this:

config forwarding
        option src 'lan'
        option dest 'management'

And delete this, it's not necessary:

In the case of both your guest and iot networks, they do not allow input, so you need two rules (each) to allow DHCP and DNS:

config rule
        option name 'Guest DHCP'
        option src 'guest'
        option proto 'udp'
        option dest_port '67'
        option target 'ACCEPT'

config rule
        option name 'Guest DNS'
        option src 'guest'
        option dest_port '53'
        option target 'ACCEPT'

config rule
        option name 'IoT DHCP'
        option src 'iot'
        option proto 'udp'
        option dest_port '67'
        option target 'ACCEPT'

config rule
        option name 'IoT DNS'
        option src 'iot'
        option dest_port '53'
        option target 'ACCEPT'

Now we can move on and look at AP1:

Here, you're missing your bridge-VLANs entirely....
Add:

config bridge-vlan
	option device 'br-lan'
	option vlan '1'
	list ports 'eth1:u*'

config bridge-vlan
	option device 'br-lan'
	option vlan '60'
	list ports 'eth1:t'

config bridge-vlan
	option device 'br-lan'
	option vlan '70'
	list ports 'eth1:t'

config bridge-vlan
	option device 'br-lan'
	option vlan '80'
	list ports 'eth1:t'

Next, modify the lan to use br-lan.1 and make it unmanaged (I'm assuming you'll manage the devices using the management network:

config interface 'lan'
	option device 'br-lan.1'
	option proto 'none'

The guest and iot networks should also be unmanaged:

config interface 'guest'
	option proto 'none'
	option device 'br-lan.70'

config interface 'iot'
	option proto 'none'
	option device 'br-lan.80'

Now onto AP2...

The same things apply -- add the bridge-VLANs (although it's not clear which port -- eth1 or eth2 -- is in use on this device).

Make the lan, iot, and guest networks unmanaged and don't forget to use br-lan.1 for the lan device.


The managed switch has VLAN 1 tagged on ports 1-4. If that's the case, you'll actually change the bridge-VLANs for VLAN 1 on each of your devices to look like this, instead:

config bridge-vlan
	option device 'br-lan'
	option vlan '1'
	list ports 'eth1:t'

Or, you can make VLAN 1 untagged + PVID on all ports of the switch.


You didn't post the wifi, dhcp, and firewall files from the APs... we can review those if you continue to have issues. Otherwise, these things should hopefully resolve the problems you were experiencing.

Your thorough edits of my configurations did the trick. I now finally have a vlan system to work with. I tried to learn networking and the openwrt system on my own using several books, web based materials and filling in the gaps with Claude. In hindsight, I now realize that my configuration was standard enough that i should have come to the openwrt forum after learning a bit about networking. Finding a template and working with that.

I appreciate your help with these configurations so much. Thank you for taking the time to find my numerous errors. I have a newfound respect for network adminitrators now.

Glad that everything is working properly now!

Yes, in the future, come here for your OpenWrt related questions. And do not rely on any AI for this -- to date, we've never seen it get the configs right, and it usually creates more headaches than it solves.

If your problem is solved, please consider marking this topic as [Solved]. See How to mark a topic as [Solved] for a short how-to.
Thanks! :slight_smile: