RouterOS 7.24.1, RB5009UPr+S+.
I have a WiFi AP connected to one bridge port, carrying two SSIDs: the main/native network (untagged, VLAN1) and an isolated IoT network (tagged, VLAN20).
With vlan-filtering=no everything works fine. As soon as I set vlan-filtering=yes, any device doing a fresh DHCP negotiation over the untagged VLAN1 side of that port fails to get a lease and self-assigns a 169.254.x.x address. Devices that already had a lease keep renewing fine through the same port — it's specifically new devices (or a forget/rejoin on WiFi) that fail. The client associates to the AP fine and its frames do arrive at the bridge, correctly tagged VID 1 (confirmed via /interface bridge host print). Wired devices on plain single-VLAN ports are unaffected, and the tagged VLAN20 side of the same port works fine for new clients too — it's specifically the untagged VLAN1 side that breaks.
One more thing I'm not sure is related or not: at one point during troubleshooting, my main PC — plugged into a completely different, plain, single-VLAN (non-hybrid) port, nothing tagged on it at all — also ended up with a self-assigned address after the router rebooted, at a point where vlan-filtering may still have been active (hard to say for certain, other things were going on at the same time). If that is actually connected, this might not be limited to the hybrid tagged+untagged port specifically, but could affect any fresh DHCP negotiation while filtering is on, on any port. Not confident about that one, but wanted to mention it in case it's relevant.
/interface vlan
add interface=bridge name=vlan20-iot vlan-id=20
/ip pool
add name=iot-dhcp ranges=192.168.20.10-192.168.20.254
/ip address
add address=192.168.20.1/24 interface=vlan20-iot network=192.168.20.0
/ip dhcp-server
add address-pool=iot-dhcp interface=vlan20-iot name=iot-dhcp-server disabled=no
/ip dhcp-server network
add address=192.168.20.0/24 dns-server=192.168.20.1 gateway=192.168.20.1
/interface bridge vlan
add bridge=bridge vlan-ids=1 tagged=bridge untagged=ether2,ether3,ether7,ether8,ether4
add bridge=bridge vlan-ids=20 tagged=bridge,ether4 untagged=ether5,ether6
/interface bridge port
set \[find interface=ether5\] pvid=20
set \[find interface=ether6\] pvid=20
/interface bridge port print detail where interface=ether4
(pvid=1 frame-types=admit-all ingress-filtering=yes hw=yes)
/interface bridge
set bridge vlan-filtering=yes
(Main/VLAN1 DHCP is the default "defconf" server bound to interface=bridge, 192.168.88.0/24, unmodified from RouterOS's default configuration script.)
Does anyone know what could be wrong here?