I went from hAP ac² to RB4011iGS+RM in order to achieve gigabit speed IPv6 routing with stateful firewall, which isn't possible on hAP ac² due to the lack of IPv6 fasttrack.
My workaround for the lack of hardware switching with vlan filtering is to use one of the switch groups with vlan filtering completely disabled and connect it to a bunch of hAP ac²s which serve as combined wifi access point and vlan filtering access switch. You might be able to find similar workarounds for your use case.
And although it is disappointing that the rb4011 cannot do vlan filtering in hardware, its CPU is indeed fast enough to do it in software which is probably fine for most use cases as well.
I thought about using external switch but I don't think it's this simple in my case. Because I have scripted VLAN filtering that is reconfigured dynamically with 20ms switch time in order to detect whether master proxy is up. This script is executed evey 13 seconds:
/ ip arp:本地主要[发现评论=“lb-primary”]:local backup [find comment="lb-backup"] /interface ethernet :local primaryif [find name="ether2-f5"] :local backupif [find name="ether3-opi"] :local uplinkif [find name="ether4-gw-ccr"] /interface ethernet switch vlan :local vlangwlan [find vlan-id=82] :local vlangwwan [find vlan-id=81] :if ([:len [/system script environment find name="lbha#lastfail"]] = 0) do={ :global "lbha#lastfail" :set $"lbha#lastfail" false } :global "lbha#lastfail" :if ([:ping address=192.168.0.9 count=30 interval=400ms interface=br-gw-ccr] = 0) do={ :if ([/interface ethernet switch vlan get $vlangwwan ports] = {"switch1-cpu",[/interface ethernet get $primaryif name]}) do={ :put "woooooooo1" /interface ethernet switch vlan set $vlangwwan ports="switch1-cpu,$backupif" /interface ethernet switch vlan set $vlangwlan ports="$backupif,$uplinkif" /ip arp remove [find interface=br-gw-ccr] :if ($"lbha#lastfail" = false) do={ /log error message="DEFAULT LOAD BALANCER IS DOWN, ENABLING_BACKUP" } } else={ :put "woooooooo2" :if ($"lbha#lastfail" = false) do={ :set $"lbha#lastfail" true /log error message="BOTH LOAD BALANCERS ARE DOWN, WE'RE FUCKED" } #try another /interface ethernet switch vlan set $vlangwwan ports="switch1-cpu,$primaryif" /interface ethernet switch vlan set $vlangwlan ports="$primaryif,$uplinkif" /ip arp remove [find interface=br-gw-ccr] } } else={ :put woooooooo3 :if ($"lbha#lastfail" = true) do={ :set $"lbha#lastfail" false /log warning message="ONE OF LOAD BALANCERS RESPONDED - GIT GUD" } :if ([/interface ethernet switch vlan get $vlangwwan ports] = {"switch1-cpu",[/interface ethernet get $backupif name]}) do={ #super quick probe, should work fine - direct connect /interface ethernet switch vlan set $vlangwwan ports="switch1-cpu,$primaryif" /interface ethernet switch vlan set $vlangwlan ports="$primaryif,$uplinkif" :delay 20ms /ip arp remove [find interface=br-gw-ccr] :delay 20ms /ip arp remove [find interface=br-gw-ccr] :if ([:ping address=192.168.0.9 count=4 interval=50ms interface=br-gw-ccr] = 0) do={ /interface ethernet switch vlan set $vlangwwan ports="switch1-cpu,$backupif" /interface ethernet switch vlan set $vlangwlan ports="$backupif,$uplinkif" /ip arp remove [find interface=br-gw-ccr] } else={ /log warning message="DEFAULT LOAD BALANCER IS UP, DISABLING BACKUP" } } } :log debug "script-exit: lbha2""
If i remember correctly changing VLANs on switch chip is the only way to reliably change traffic path for 20ms. Reconfiguring software VLAN interfaces had significantly higher latency. And monitoring proxy on switch would be quite tricky (this script is actually supposed to switch VLANs when proxy hangs / there's misconfiguration on proxy side. Not only when device is completely down. Proxy also doesn't support VRRP nor any other clustering protocols since It's HA cluster of 2 completely different proxies - F5 and Nginx)