Instead of messing with VLANs, I just segregated ports since I have many open ones. Below are the configs based on the topology flow. Can anyone spot why IoT devices are hopping on WiFi and getting a 192.168.30.x IP on ether2 bridge port?
RB5009>CRS312>CRS328>cAPax 1, 2, and 3.
RB5009
interface bridge
add admin-mac=redacted auto-mac=no comment=LAN.Bridge name=LAN.Bridge
/interface wireguard
add listen-port=13231 mtu=1420 name=wireguard-vpn
/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
add name=Management
/ip pool
add name=LAN.Pool ranges=192.168.20.10-192.168.20.254
add name=Flint2.Pool ranges=192.168.90.10-192.168.90.254
add name=IoT.Pool ranges=192.168.30.10-192.168.30.254
/ip dhcp-server
add address-pool=LAN.Pool interface=LAN.Bridge lease-time=1d name=LAN.DHCP
# Interface not running
add address-pool=Flint2.Pool interface=ether7 name=Flint.DHCP
add address-pool=IoT.Pool interface=ether6 lease-time=1d name=IoT.DHCP
/system logging action
add email-to=redacted name=EmailAction target=email
/disk settings
set auto-media-interface=LAN.Bridge auto-media-sharing=yes auto-smb-sharing=yes
/interface bridge port
add bridge=LAN.Bridge comment=Downlink.CRS312.Ether1 interface=ether2
add bridge=LAN.Bridge comment=defconf interface=ether3
add bridge=LAN.Bridge comment=PP-Ether1.PiHole interface=ether4
add bridge=LAN.Bridge comment=PP.Ether2.HomeAssistant interface=ether5
add bridge=LAN.Bridge comment=PP.Ether18.LaptopDock interface=ether8
add bridge=LAN.Bridge comment=defconf interface=sfp-sfpplus1
/ip neighbor discovery-settings
set discover-interface-list=LAN
/interface list member
add comment=defconf interface=LAN.Bridge list=LAN
add comment=defconf interface=ether1 list=WAN
add interface=ether7 list=LAN
add interface=ether8 list=Management
add interface=wireguard-vpn list=LAN
add interface=ether6 list=LAN
/interface wireguard peers
add allowed-address=redacted client-allowed-address=::/0 comment= interface=wireguard-vpn name=peer1 public-key="redacted"
add allowed-address=redacted client-allowed-address=::/0 comment= interface=wireguard-vpn name=peer6 public-key="redacted"
/ip address
add address=192.168.20.1/24 comment=LAN.Addresses interface=LAN.Bridge network=192.168.20.0
add address=192.168.90.1/24 comment=Flint.2.Addresses interface=ether7 network=192.168.90.0
add address=10.0.0.1/24 interface=wireguard-vpn network=10.0.0.0
add address=192.168.30.1/24 comment=IoT.Addresses interface=ether6 network=192.168.30.0
/ip cloud
set ddns-enabled=yes
/ip dhcp-client
add comment=ATT.WAN default-route-tables=main interface=ether1
/ip dhcp-server lease
/ip dhcp-server network
add address=192.168.20.0/24 comment=LAN.Network dns-server=192.168.20.12 gateway=192.168.20.1
add address=192.168.30.0/24 comment=IoT.Network dns-server=1.1.1.1,8.8.8.8 gateway=192.168.30.1
add address=192.168.90.0/24 comment=Flint2.Network dns-server=1.1.1.1,8.8.8.8 gateway=192.168.90.1
/ip dns
set allow-remote-requests=yes
/ip dns static
add address=192.168.88.1 comment=defconf name=router.lan type=A
/ip firewall filter
add action=accept chain=input comment="Allow WireGuard Handshake" dst-port=13231 protocol=udp
add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
add action=accept chain=input comment="defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1
add action=drop chain=input comment="defconf: drop all not coming from LAN" in-interface-list=!LAN
add action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related
add action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untracked
add action=accept chain=forward comment="Allow WireGuard VPN to Route" in-interface=wireguard-vpn
add action=accept chain=forward comment="Allow Home Assistant to IoT Subnet" out-interface=ether7 src-address=192.168.20.11
add action=accept chain=forward comment="Allow IoT .30 Subnet to Internet" out-interface-list=WAN src-address=192.168.30.0/24
add action=drop chain=forward comment="Block Flint2 from initiating talk to Main LAN" in-interface=ether7 out-interface=LAN.Bridge
add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid
add action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat in-interface-list=WAN
/ip firewall nat
add action=masquerade chain=srcnat comment="IoT .30 Internet Access" out-interface-list=WAN src-address=192.168.30.0/24
add action=masquerade chain=srcnat comment="defconf: masquerade" ipsec-policy=out,none out-interface-list=WAN
add action=masquerade chain=srcnat src-address=192.168.90.0/24
add action=masquerade chain=srcnat comment="Flint 2 Internet Access" src-address=192.168.90.0/24
add action=masquerade chain=srcnat comment="Masquerade WireGuard VPN" src-address=10.0.0.0/24
/ip service
set ftp disabled=yes
set ssh disabled=yes
set telnet disabled=yes
set www disabled=yes
set winbox address=192.168.20.0/24,10.0.0.0/24
set api disabled=yes
set api-ssl disabled=yes
/ipv6 firewall address-list
add address=::/128 comment="defconf: unspecified address" list=bad_ipv6
add address=::1/128 comment="defconf: lo" list=bad_ipv6
add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6
add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6
add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6
add address=100::/64 comment="defconf: discard only " list=bad_ipv6
add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6
add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6
add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6
/ipv6 firewall filter
add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid
add action=accept chain=input comment="defconf: accept ICMPv6" protocol=icmpv6
add action=accept chain=input comment="defconf: accept UDP traceroute" dst-port=33434-33534 protocol=udp
add action=accept chain=input comment="defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=udp src-address=fe80::/10
add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 protocol=udp
add action=accept chain=input comment="defconf: accept ipsec AH" protocol=ipsec-ah
add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=ipsec-esp
add action=accept chain=input comment="defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec
add action=drop chain=input comment="defconf: drop everything else not coming from LAN" in-interface-list=!LAN
add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" connection-state=established,related
add action=accept chain=forward comment="defconf: accept established,related,untracked" connection-state=established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid
add action=drop chain=forward comment="defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6
add action=drop chain=forward comment="defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6
add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" hop-limit=equal:1 protocol=icmpv6
add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=icmpv6
add action=accept chain=forward comment="defconf: accept HIP" protocol=139
add action=accept chain=forward comment="defconf: accept IKE" dst-port=500,4500 protocol=udp
add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=ipsec-ah
add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=ipsec-esp
add action=accept chain=forward comment="defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec
add action=drop chain=forward comment="defconf: drop everything else not coming from LAN" in-interface-list=!LAN
/system clock
set time-zone-name=America/Chicago
/system identity
set name=RB5009.CoreRouter
/system logging
add action=EmailAction topics=critical
/system scheduler
add name=RunRebootScript on-event=EmailOnReboot policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
/system script
add dont-require-permissions=no name=EmailOnReboot owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":local count 0;\
\n:while ([/ping 1.1.1.1 count=1] = 0 && \$count < 30) do={\
\n :set count (\$count + 1);\
\n :delay 5s;\
\n}\
\n/tool e-mail send to=\"redacted\" subject=\"[Alert] RB5009 Power Restored\" body=\"The core router has successfully booted up and internet connectivity is restored.\""
/tool e-mail
set certificate-verification=no from=redacted port=587 server=smtp.protonmail.ch tls=starttls user=redacted
/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN
/tool netwatch
add disabled=no down-script=":log error \"WAN Gateway down!\"" host=1.1.1.1 http-codes="" interval=30s test-script="" type=simple up-script=\
"/tool e-mail send to=\"redacted" subject=\"[Alert] WAN Link Restored\" body=\"The primary ISP gateway is back online and passing traffic cleanly.\""
CRS312
/interface bridge
add admin-mac=redacted auto-mac=no comment=defconf name=LAN.Bridge
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/interface bridge port
add bridge=LAN.Bridge comment=defconf interface=combo1
add bridge=LAN.Bridge comment=defconf interface=combo2
add bridge=LAN.Bridge comment=defconf interface=combo3
add bridge=LAN.Bridge comment=defconf interface=combo4
add bridge=LAN.Bridge comment=Uplink.RB5009.Ether2 interface=ether1
add bridge=LAN.Bridge comment=Downlink.CRS328.Ether1 interface=ether2
add bridge=LAN.Bridge comment=defconf interface=ether3
add bridge=LAN.Bridge comment=defconf interface=ether4
add bridge=LAN.Bridge comment=PP.Ether6.NVR interface=ether5
add bridge=LAN.Bridge comment=PP.Ether4.BrotherPrinter interface=ether6
add bridge=LAN.Bridge comment=PP.Ether7.NAS interface=ether7
add bridge=LAN.Bridge comment=defconf interface=ether8
add bridge=LAN.Bridge comment=defconf interface=ether9
/ip address
add address=192.168.88.1/24 comment=defconf disabled=yes interface=LAN.Bridge \
network=192.168.88.0
/ip dhcp-client
add interface=LAN.Bridge
/ip service
set ftp disabled=yes
set ssh disabled=yes
set telnet disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes
/system clock
set time-zone-name=America/Chicago
/system identity
set name=CRS312.10GCoreSwitch
/system routerboard settings
set enter-setup-on=delete-key
/tool romon
set enabled=yes
CRS328
/interface bridge
add admin-mac=redacted auto-mac=no name=LAN.Bridge
/interface bridge port
add bridge=LAN.Bridge comment=defconf interface=ether1
add bridge=LAN.Bridge comment=defconf hw=no interface=ether2
add bridge=LAN.Bridge comment=defconf interface=ether3
add bridge=LAN.Bridge comment=PP5.cAPax.1.ether1 interface=ether4
add bridge=LAN.Bridge comment=defconf interface=ether5
add bridge=LAN.Bridge comment=defconf interface=ether6
add bridge=LAN.Bridge comment=defconf interface=ether7
add bridge=LAN.Bridge comment=defconf interface=ether8
add bridge=LAN.Bridge comment=defconf interface=ether9
add bridge=LAN.Bridge comment=defconf interface=ether10
add bridge=LAN.Bridge comment=defconf interface=ether11
add bridge=LAN.Bridge comment=defconf interface=ether12
add bridge=LAN.Bridge comment=defconf interface=ether13
add bridge=LAN.Bridge comment=defconf interface=ether14
add bridge=LAN.Bridge comment=defconf interface=ether15
add bridge=LAN.Bridge comment=defconf interface=ether16
add bridge=LAN.Bridge comment=defconf interface=ether17
add bridge=LAN.Bridge comment=defconf interface=ether18
add bridge=LAN.Bridge comment=defconf interface=ether20
add bridge=LAN.Bridge comment=defconf interface=ether22
add bridge=LAN.Bridge comment=defconf interface=sfp-sfpplus1
add bridge=LAN.Bridge comment=defconf interface=sfp-sfpplus2
add bridge=LAN.Bridge comment=defconf interface=sfp-sfpplus3
add bridge=LAN.Bridge comment=defconf interface=sfp-sfpplus4
add bridge=LAN.Bridge comment="cAP 1 IoT" horizon=10 interface=ether19
add bridge=LAN.Bridge comment="cAP 2 IoT" horizon=10 interface=ether21
add bridge=LAN.Bridge comment="cAP 3 IoT" horizon=10 interface=ether23
add bridge=LAN.Bridge comment="Uplink to RB5009 Ether6" horizon=10 interface=\
ether24
/ip address
add address=192.168.88.1/24 comment=defconf disabled=yes interface=LAN.Bridge \
network=192.168.88.0
/ip dhcp-client
add interface=LAN.Bridge
/ip service
set ftp disabled=yes
set ssh disabled=yes
set telnet disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes
/system clock
set time-zone-name=America/Chicago
/system identity
set name=CRS328.MainPoESwitch
/system routerboard settings
set enter-setup-on=delete-key
/tool romon
set enabled=yes
cAP ax 1 2 and 3 are all the same
/interface bridge
add name=IoT.Bridge
add admin-mac=redacted auto-mac=no comment=defconf name=bridgeLocal
/interface wifi channel
add band=2ghz-ax frequency=2412 name=ch-2g-ap1 width=20mhz
add band=5ghz-ax frequency=5180 name=ch-5g-ap1 width=20/40mhz
/interface wifi datapath
add bridge=bridgeLocal comment=defconf disabled=no name=capdp
/interface wifi security
add authentication-types=wpa2-psk,wpa3-psk disabled=no ft=yes ft-over-ds=yes \
name=Sec_Profile
add authentication-types=wpa2-psk,wpa3-psk disabled=no name=Sec-IoT
/interface wifi configuration
add country="United States" name=Main_Config security=Sec_Profile ssid=\
redacted
/interface wifi
set [ find default-name=wifi1 ] channel=ch-5g-ap1 configuration=Main_Config \
configuration.antenna-gain=9 .mode=ap datapath.bridge=bridgeLocal \
disabled=no
set [ find default-name=wifi2 ] channel=ch-2g-ap1 configuration=Main_Config \
configuration.antenna-gain=15 .mode=ap datapath.bridge=bridgeLocal \
disabled=no
add configuration.hide-ssid=no .mode=ap .ssid=redacted datapath.bridge=\
IoT.Bridge disabled=no mac-address=redacted master-interface=\
wifi2 name=IoT.WiFi.2g security=Sec-IoT
add configuration.mode=ap .ssid=redacted datapath.bridge=IoT.Bridge disabled=no \
mac-address=redacted master-interface=wifi1 name=IoT.WiFi.5g \
security=Sec-IoT
/interface bridge port
add bridge=bridgeLocal comment=defconf interface=ether1
add bridge=IoT.Bridge comment=defconf hw=no interface=ether2
add bridge=bridgeLocal comment="5GHz WiFi" interface=wifi1
add bridge=bridgeLocal comment="2.4GHz WiFi" interface=wifi2
/interface wifi cap
set discovery-interfaces=none slaves-datapath=capdp
/ip dhcp-client
add comment=defconf interface=bridgeLocal
/ip service
set ftp disabled=yes
set ssh disabled=yes
set telnet disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes
/system clock
set time-zone-name=America/Chicago
/system identity
set name=cAPax.1
/tool romon
set enabled=yes