Downgrade to 23.05 (WAX202 or Raspberry Pi)

Hey folks.

I want to downgrade my devices (1 Rpi4 router and 2 WAX202 APs) to 23.05.

The entire network seemed to perform better before, including the router (which had OpenVPN client + AGH before vs WireGuard client & no AGH now, so it should be way lighter) and APs. I seem to have a drastic performance drop with each additional point.

Now, has anyone ever done a downgrade on a WAX202 or similar? (WAX206 or what have you)
Is it a smooth transition like an upgrade?
Edit: same goes for the RPi, actually. Can I just do a "SYSUPGRADE" to a lower version?

The wiki has a page on going back to stock firmware, but I haven't found anything on downgrading OpenWRT versions.

Raspberry side is trivial - new sd vard, old operating system,

Yes I have. It should just work. If not, just restore a backup from 23.05.x.

To answer your main question, this shouldn't be hard. However, it also shouldn't be necessary. Both of those devices should run well with 24.10. I think it would make sense to review the configs on each device to make sure that nothing is out of place. Further, it would be good to get an idea of the current performance of the system and the test method(s) you are using.

That said, I agree with @brada4 the you can simply use another SD card and simply swap it out. In general, the config for the Pi should be compatible for 24.10 > 23.05.

Yes, you can downgrade this device using the sysupgrade method. I would recommend making a backup first just in case you end up in any odd situations that could require a reset to defaults.

Meanwhile, I want to reiterate that before you downgrade, let's look at your configs. If for no other reason than the fact that 23.05 will go EOL at some point, and you'll want to be able to stay current, so debugging the current config will be valuable.

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:
grafik
Remember to redact passwords, 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

(also, if there are any non-standard/default packages that you have installed, please tell us what you've added; the only one you've specifically mentioned thus far is WG)

1 Like

Thanks for all the answers.

I think RPi4 is ok, and will definitely leave it for last.

This is what I have today:
ISP modem -> RPi4B openwrt router -> TPLink SG105E -> WAX202 openwrt AP1 -> WDS -> WAX202 openwrt AP2

I get ~380mbps speedtest DLs connecting a computer directly to the router
~160 speedtest-cli in the router (which is already bad, RPi4B should be able to hold 380 with a WG client)
~60 speedtest-cli on the AP 1
~50 speedtest-cli on the AP 2

Pings are in the 200~300ms range
iperf3 between router and AP1 gives me ~800mbps

Even though the absolute numbers aren't that bad, user experience is awful - things take forever to load. And it didn't use to be like this before I upgraded everything to 24.10.

Only major difference in the new config is the VPN client, I had OpenVPN on 23.05 and manage to get WG to work now.

I'll post the configs on separate posts for easiness of reading

This is the router:

ubus call system board

{
	"kernel": "6.6.73",
	"hostname": "OpenWrt",
	"system": "ARMv8 Processor rev 3",
	"model": "Raspberry Pi 4 Model B Rev 1.1",
	"board_name": "raspberrypi,4-model-b",
	"rootfs_type": "ext4",
	"release": {
		"distribution": "OpenWrt",
		"version": "24.10.0",
		"revision": "r28427-6df0e3d02a",
		"target": "bcm27xx/bcm2711",
		"description": "OpenWrt 24.10.0 r28427-6df0e3d02a",
		"builddate": "1738624177"

/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 packet_steering '1'

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

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.10.1'
	option netmask '255.255.255.0'
	option ip6assign '60'
	option ipv6 '0'
	option delegate '0'
	list dns '10.2.0.1'

config interface 'WAN'
	option proto 'dhcp'
	option device 'eth1'
	option peerdns '0'
	list dns '10.64.0.1'
	option ipv6 '0'

config interface 'wg0'
	option proto 'wireguard'
	option private_key '****'
	list addresses '**/32'
	list dns '***'
	option auto '0'

config wireguard_wg0
	option description 'Imported peer configuration'
	option public_key '***'
	list allowed_ips '0.0.0.0/0'
	option endpoint_host '***'
	option endpoint_port '51820'
	option route_allowed_ips '1'

config interface 'wg1'
	option proto 'wireguard'
	option private_key '***'
	list addresses ''***'/32'
	list dns ''***''
	option mtu '1400'

config wireguard_wg1
	option description 'Imported peer configuration'
	option public_key ''***''
	list allowed_ips '0.0.0.0/0'
	option endpoint_host ''***''
	option endpoint_port '51820'
	option route_allowed_ips '1'

config interface 'wg2'
	option proto 'wireguard'
	option private_key ''***''
	list addresses ''***'/32'
	list dns ''***''
	option disabled '1'
	option auto '0'

config wireguard_wg2
	option description 'Imported peer configuration'
	option public_key ''***''
	list allowed_ips '0.0.0.0/0'
	option endpoint_host ''***''
	option endpoint_port '51820'
	option route_allowed_ips '1'

config interface 'wg3'
	option proto 'wireguard'
	option private_key ''***''
	list addresses ''***'/32'
	list dns ''***''
	option delegate '0'

config wireguard_wg3
	option description 'Imported peer configuration'
	option public_key ''***''
	list allowed_ips '0.0.0.0/0'
	option endpoint_host ''***''
	option endpoint_port '51820'

config route
	option interface 'WAN'
	option target '***'
	option netmask '255.255.255.255'

config route
	option interface 'WAN'
	option target '***'
	option netmask '255.255.255.255'

config route
	option interface 'WAN'
	option target '***/32'

(side question: I didn't create all these routes, did the system create them?

/etc/config/wireless

config wifi-device 'radio0'
	option type 'mac80211'
	option path 'platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'
	option band '5g'
	option channel 'auto'
	option htmode 'VHT80'
	option cell_density '0'
	option disabled '1'

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid 'asdf_nomap'
	option encryption 'psk2'
	option hidden '1'
	option key 'asdfasdf'
	option disabled '1'

config wifi-iface 'wifinet1'
	option device 'radio0'
	option mode 'sta'
	option ssid 'Wl-pxtk'
	option encryption 'psk2'
	option key 'asdfasdf'
	option disabled '1'

cat /etc/config/dhcp

config dnsmasq
	option domainneeded '1'
	option localise_queries '1'
	option rebind_protection '1'
	option rebind_localhost '1'
	option local '/lan/'
	option domain 'lan'
	option expandhosts '1'
	option cachesize '1000'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
	option localservice '1'
	option ednspacket_max '1232'
	option logfacility '/tmp/dnsmasq.log'
	option quietdhcp '1'

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

config dhcp 'wan'
	option interface 'wan'
	option ignore '1'

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

config host
	option name 'switch'
	list mac '***'
	option ip '192.168.10.9'
	option leasetime 'infinite'
	list match_tag 'known'

/etc/config/firewall

config defaults
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option synflood_protect '1'
	option flow_offloading '1'

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

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'
	list network '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 'vpn'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option masq '1'
	option mtu_fix '1'
	list network 'wg0'
	list network 'wg1'
	list network 'wg2'
	list network 'wg3'

config forwarding
	option src 'lan'
	option dest 'vpn'

config zone
	option name 'lan2'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'ACCEPT'

config forwarding
	option src 'lan2'
	option dest 'wan'

config rule
	option name 'TPLink-Switch-to-VPN'
	option src 'lan'
	list src_ip '192.168.10.206'
	list src_ip '192.168.10.9'
	option dest 'vpn'
	option target 'REJECT'

config rule
	option name 'TPLink-Switch-to-WAN'
	option src 'lan'
	list src_ip '192.168.10.206'
	list src_ip '192.168.10.9'
	option dest 'wan'
	option target 'REJECT'

This is AP 1

ubus call system board

{
	"kernel": "6.6.73",
	"hostname": "OpenWrtAP1",
	"system": "MediaTek MT7621 ver:1 eco:3",
	"model": "Netgear WAX202",
	"board_name": "netgear,wax202",
	"rootfs_type": "squashfs",
	"release": {
		"distribution": "OpenWrt",
		"version": "24.10.0",
		"revision": "r28427-6df0e3d02a",
		"target": "ramips/mt7621",
		"description": "OpenWrt 24.10.0 r28427-6df0e3d02a",
		"builddate": "1738624177"
	}
}

/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 '***'
	option packet_steering '1'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'lan1'
	list ports 'lan2'
	list ports 'lan3'

config device
	option name 'lan1'
	option macaddr '***'

config device
	option name 'lan2'
	option macaddr '***'

config device
	option name 'lan3'
	option macaddr '***'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.10.3'
	option netmask '255.255.255.0'
	option ip6assign '60'
	option gateway '192.168.10.1'
	list dns '192.168.10.1'

config device
	option name 'wan'
	option macaddr '***'

config device
	option type 'bridge'
	option name 'br-guest'
	option bridge_empty '1'
	option ipv6 '0'

config interface 'guest'
	option proto 'static'
	option device 'br-guest'
	option ipaddr '192.168.100.1'

/etc/config/wireless

config wifi-device 'radio0'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
	option band '2g'
	option channel 'auto'
	option htmode 'HT20'
	option country 'BR'
	option cell_density '0'
	option beacon_int '1500'
	option txpower '22'

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid '***'
	option encryption 'psk2'
	option key '***'
	option wds '1'
	option isolate '1'

config wifi-device 'radio1'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0+1'
	option band '5g'
	option channel 'auto'
	option htmode 'HT20'
	option country 'BR'
	option cell_density '0'
	option txpower '15'
	option disabled '1'

config wifi-iface 'default_radio1'
	option device 'radio1'
	option network 'lan'
	option mode 'ap'
	option ssid '***'
	option encryption 'psk2'
	option wds '1'
	option key '***'
	option disabled '1'

config wifi-iface 'wifinet2'
	option device 'radio0'
	option mode 'ap'
	option ssid '***'
	option encryption 'psk2'
	option key '***'
	option network 'guest'
	option isolate '1'

config wifi-iface '***'
	option device 'radio1'
	option mode 'ap'
	option ssid '***'
	option encryption 'psk2'
	option key '***'
	option network 'guest'
	option disabled '1'

/etc/config/dhcp

config dnsmasq
	option domainneeded '1'
	option localise_queries '1'
	option rebind_protection '1'
	option rebind_localhost '1'
	option local '/lan/'
	option domain 'lan'
	option expandhosts '1'
	option cachesize '1000'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
	option localservice '1'
	option ednspacket_max '1232'
	list server '192.168.10.1'

config dhcp 'lan'
	option interface 'lan'
	option start '100'
	option limit '150'
	option leasetime '12h'
	option dhcpv4 'server'
	option dhcpv6 'server'
	option ra 'server'
	list ra_flags 'managed-config'
	list ra_flags 'other-config'
	option ignore '1'

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

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

/etc/config/firewall

config defaults
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option synflood_protect '1'
	option flow_offloading '1'
	option flow_offloading_hw '1'

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

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

config forwarding
	option src 'guest'
	option dest 'lan'

config rule
	option name 'Guest_DHCP'
	list proto 'udp'
	option src 'guest'
	option dest_port '67-68'
	option target 'ACCEPT'

config rule
	option name 'Guest_DNS'
	option src 'guest'
	option dest_port '53'
	option target 'ACCEPT'

config rule
	option name 'Block_Guest_from_Lan'
	option src 'guest'
	option dest 'lan'
	list dest_ip '192.168.10.0/24'
	option target 'REJECT'
	list proto 'all'

AP 2

ubus call system board

{
	"kernel": "6.6.73",
	"hostname": "OpenWrtAP2",
	"system": "MediaTek MT7621 ver:1 eco:3",
	"model": "Netgear WAX202",
	"board_name": "netgear,wax202",
	"rootfs_type": "squashfs",
	"release": {
		"distribution": "OpenWrt",
		"version": "24.10.0",
		"revision": "r28427-6df0e3d02a",
		"target": "ramips/mt7621",
		"description": "OpenWrt 24.10.0 r28427-6df0e3d02a",
		"builddate": "1738624177"
	}
}

/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 packet_steering '1'
	option ula_prefix '***'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'lan1'
	list ports 'lan2'
	list ports 'lan3'
	option stp '1'

config device
	option name 'lan1'
	option macaddr '***'

config device
	option name 'lan2'
	option macaddr '***'

config device
	option name 'lan3'
	option macaddr '***'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option netmask '255.255.255.0'
	option ip6assign '60'
	option gateway '192.168.10.1'
	option ipaddr '192.168.10.4'
	list dns '192.168.10.1'

config device
	option name 'wan'
	option macaddr '***'

config device
	option type 'bridge'
	option name 'br-guest'
	option bridge_empty '1'

config interface 'guest'
	option proto 'static'
	option device 'br-guest'
	option ipaddr '192.168.101.1'
	option netmask '255.255.255.0'

/etc/config/wireless

config wifi-device 'radio0'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
	option channel 'auto'
	option band '2g'
	option htmode 'HT20'
	option country 'BR'
	option cell_density '0'
	option distance '10'
	option beacon_int '1500'

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid '***'
	option encryption 'psk2'
	option key 'caconde10'

config wifi-device 'radio1'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0+1'
	option channel '36'
	option band '5g'
	option htmode 'HE80'
	option disabled '1'

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

config wifi-iface 'wifinet2'
	option device 'radio0'
	option mode 'sta'
	option network 'lan'
	option ssid '***'
	option encryption 'psk2'
	option key '***'
	option wds '1'

config wifi-iface 'wifinet3'
	option device 'radio0'
	option mode 'ap'
	option ssid '***'
	option encryption 'psk2'
	option isolate '1'
	option key '***'
	option network 'guest'

/etc/config/dhcp

config dnsmasq
	option domainneeded '1'
	option localise_queries '1'
	option rebind_protection '1'
	option rebind_localhost '1'
	option local '/lan/'
	option domain 'lan'
	option expandhosts '1'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
	option localservice '1'
	option ednspacket_max '1232'
	list server '192.168.10.1'

config dhcp 'lan'
	option interface 'lan'
	option start '100'
	option limit '150'
	option leasetime '12h'
	option dhcpv4 'server'
	option dhcpv6 'server'
	option ra 'server'
	list ra_flags 'managed-config'
	list ra_flags 'other-config'
	option ignore '1'

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

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

/etc/config/firewall

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

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

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

config forwarding
	option src 'guest'
	option dest 'lan'

config rule
	option name 'Guest_DHCP'
	list proto 'udp'
	option src 'guest'
	option dest_port '67-68'
	option target 'ACCEPT'

config rule
	option name 'Guest_DNS'
	option src 'guest'
	option dest_port '53'
	option target 'ACCEPT'

config rule
	option name 'Block_Guest_from_Lan'
	list proto 'all'
	option src 'guest'
	option dest 'lan'
	list dest_ip '192.168.10.0/24'
	option target 'REJECT'

There are a bunch of things I'd recommend...

Starting with the main router

One thing I noticed is that you have a guest network defined on one of the APs but not on the main router. This means the AP is actually also routing. Why not have it on the main router as a VLAN?

Also, have you tested with wireguard disabled? There are two factors -- one is CPU (which should not be big problem), but the other is latency and bandwidth impacts relative to just using your regular wan.

Where is this DNS server (10.64.0.1)? Is that via the VPN?

Remove all these routes:

Big one: Remove the logging. This will slow things down and will not be very useful anyway.

Now on the APs:

I asked earlier, but why is the guest network here and not on the main router?

Why are you using WDS? is one of your APs using a wireless backhaul? Can you make it wired?

WDS will cause a reduction in bandwidth by its nature.

Again, turn off logging:

On AP2:

Remove the STP line:

Why do you have a second guest subnet defined here? This doesn't belong here -- you should be using one guest network and it should be defined on the main router:

Remove all the IPv6/ra related lines:

Reboot everything and test again.

First of all, thanks for the detailed answer!

As a matter of fact, I have. No visible difference, at least in testing speeds.

That's the goal, but I haven't learned how to set up a router + external switch yet.
If/when I get that working the plan is to upgrade the SG105E to a decent openwrt-compatible one.

Edit: I remember now. These routes are for the NTP servers to bypass the VPN

Nice catch! It's been on for the last couple of days, as I was debugging the RPi4 vs Debian DNS error. I turned off the DNS logging but this one was going to stay on forever!
On the other side, it's been on for 3 days and hasn't logged a single REJECT.

Again, the answer is lack of skill.... lol

Impossible right now, but definitely in the plans.

I know, but without VLANs that's what I managed to do to get a guest network to the whole coverage area.

Now for the results.
pings all around 250
DL in router at 180 (I get 150~200, but this is on the good side)
DL in AP1 ~60 (good, but still don't get the downgrade vs router)
DL in client on AP1 ~30 (on the bad side, usually 45~50)

But, on the other hand, loading webpages does seem a little faster!

I'm also noticing that you're only using the 2.4G band currently. So 60Mbps on the first AP makes sense.

Enable the 5G band and it should be better. Keep in mind that the 2nd AP (with the wireless backhaul) might only end up at ~1/2 the speed of its uplink due to WDS and the fact that the radio needs to simultaneously work as an AP and an STA mode device.

Thanks. I'll consider enabling 5G. It's currently off because the coverage area is big and some clients have issues hopping automatically between 2.4/5G and between APs.

But the 60Mbps I got in the AP was measured in the AP itself, running speedtest-cli via SSH. Wireless speed shouldn't matter, right?

Actually, if you're running speed tests on the router/AP devices themselves, that is not necessarily a good measure of performance. Many purpose built network devices in the consumer market have relatively low general CPU performance, even if they can move data through them (routing and/or switching/wifi) really fast. Their CPUs are not designed to generate/terminate large volumes of network traffic; they are instead designed to control the specialized routing/switching/wifi hardware that move data through the device. Thus, you should be testing on a general purpose computer (i.e. a desktop/laptop computer, maybe a phone or a tablet).

The Pi's processor is fine, though -- so you can still use that as one end of the equation.

Ohh I see what you mean.

With that in mind I ran speedtest in my notebook via a just-enabled 5G on AP1, and standing right next to it.
It is better @ 70~90Mbps, but still a good downgrade from the router's.

But with 2.4G radios, you're inherently limited.

5G radios are much much faster.

That was with 5G on AX mode

Network runs a lot better with the VLAN set up you helped me with in the other post! Even though the speedtest numbers don't show much difference.

But there are still some issues with the WAX.
Something is off today so I ran the tests again.
I am getting ~55Mbps DL / 45Mbps UL on the AP1 (via SSH), but only 5/3 Mbps on a computer connected to AP1 via WiFi.

In the System log there were a lot of entries throughout the day such as:

Sun May 11 17:03:48 2025 daemon.notice hostapd: phy0-ap1: AP-STA-POSSIBLE-PSK-MISMATCH {mac address A}

Sun May 11 17:20:34 2025 daemon.warn odhcpd[1781]: No default route present, overriding ra_lifetime to 0!

and some:

Sun May 11 18:03:15 2025 daemon.notice hostapd: phy0-ap0: AP-STA-DISCONNECTED {mac address B}
Sun May 11 18:03:15 2025 daemon.info hostapd: phy0-ap0: STA {mac address B} 802.11: disassociated
Sun May 11 18:03:17 2025 daemon.info hostapd: phy0-ap0: STA {mac address B} IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)

I don't know if these are related to the WiFI performance issue, but there they were.

Could something in my network be triggering this situation?
I know openwrt version is a less-likely cause, but I don't remember ever having this problem with 23.05.