Slow upload speed from mesh node to main

Asking a question regarding the mesh speed. Looking for some ideas on the slow upload speed.

I have set up a mesh both running openwrt 23.05. The main router is rt3200 and the mesh node is rbs50. My download speed from rt3200 to rbs50 is strong, at around 500m. but the upload speed is much lower and less stable, fluctuating around 70-110m. I have attached the iperf3 results on both direction below.

My setup is fairly simple, as shown below. I run both mesh and actual wireless on channel 104. The interference is low. The negotiated transfer rate is normal at 1300 both up and down. hardware offloading is enabled on rt3200, my wired connection is good at the rated giga speed. software offloading is enabled on rbs50 node. The two device are about 10ft away with a interior wall between.

Any help is appreciated!

wireless setup, left is the node and right is the main

rbr as client
root@RBS50:~# iperf3 -c 192.168.1.1
Connecting to host 192.168.1.1, port 5201
[  5] local 192.168.1.10 port 59928 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  6.75 MBytes  56.6 Mbits/sec   50   31.1 KBytes       
[  5]   1.00-2.00   sec  3.75 MBytes  31.5 Mbits/sec   50   8.48 KBytes       
[  5]   2.00-3.00   sec  3.62 MBytes  30.4 Mbits/sec   39   18.4 KBytes       
[  5]   3.00-4.00   sec  10.1 MBytes  84.9 Mbits/sec   34   89.1 KBytes       
[  5]   4.00-5.00   sec  13.2 MBytes   111 Mbits/sec   44   36.8 KBytes       
[  5]   5.00-6.00   sec  11.2 MBytes  94.5 Mbits/sec   30   52.3 KBytes       
[  5]   6.00-7.00   sec  12.1 MBytes   102 Mbits/sec   43   62.2 KBytes       
[  5]   7.00-8.00   sec  12.9 MBytes   108 Mbits/sec   52   46.7 KBytes       
[  5]   8.00-9.00   sec  17.0 MBytes   143 Mbits/sec   74   48.1 KBytes       
[  5]   9.00-10.00  sec  15.0 MBytes   126 Mbits/sec   27   62.2 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   106 MBytes  88.7 Mbits/sec  443             sender
[  5]   0.00-10.01  sec   105 MBytes  88.2 Mbits/sec                  receiver

iperf Done.

rt3200 as server 
root@Belkin_RT3200:~# iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.10, port 59924
[  5] local 192.168.1.1 port 5201 connected to 192.168.1.10 port 59928
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  6.38 MBytes  53.4 Mbits/sec                  
[  5]   1.00-2.00   sec  3.75 MBytes  31.5 Mbits/sec                  
[  5]   2.00-3.00   sec  3.50 MBytes  29.4 Mbits/sec                  
[  5]   3.00-4.00   sec  10.2 MBytes  86.0 Mbits/sec                  
[  5]   4.00-5.00   sec  13.1 MBytes   110 Mbits/sec                  
[  5]   5.00-6.00   sec  11.1 MBytes  93.3 Mbits/sec                  
[  5]   6.00-7.00   sec  12.4 MBytes   104 Mbits/sec                  
[  5]   7.00-8.00   sec  12.8 MBytes   107 Mbits/sec                  
[  5]   8.00-9.00   sec  17.0 MBytes   143 Mbits/sec                  
[  5]   9.00-10.00  sec  14.9 MBytes   125 Mbits/sec                  
[  5]  10.00-10.01  sec   128 KBytes   264 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec   105 MBytes  88.2 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)

rbr as server
root@RBS50:~# iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.1, port 45962
[  5] local 192.168.1.10 port 5201 connected to 192.168.1.1 port 45976
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  43.2 MBytes   362 Mbits/sec                  
[  5]   1.00-2.00   sec  51.5 MBytes   432 Mbits/sec                  
[  5]   2.00-3.00   sec  51.9 MBytes   435 Mbits/sec                  
[  5]   3.00-4.00   sec  50.9 MBytes   427 Mbits/sec                  
[  5]   4.00-5.00   sec  50.9 MBytes   427 Mbits/sec                  
[  5]   5.00-6.00   sec  51.0 MBytes   428 Mbits/sec                  
[  5]   6.00-7.00   sec  51.1 MBytes   429 Mbits/sec                  
[  5]   7.00-8.00   sec  51.2 MBytes   430 Mbits/sec                  
[  5]   8.00-9.00   sec  51.4 MBytes   431 Mbits/sec                  
[  5]   9.00-10.00  sec  50.9 MBytes   427 Mbits/sec                  
[  5]  10.00-10.02  sec  1.25 MBytes   440 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.02  sec   505 MBytes   423 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)

rt3200 as client
root@Belkin_RT3200:~# iperf3 -c 192.168.1.10
Connecting to host 192.168.1.10, port 5201
[  5] local 192.168.1.1 port 45976 connected to 192.168.1.10 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  46.2 MBytes   388 Mbits/sec    0   1.96 MBytes       
[  5]   1.00-2.00   sec  51.8 MBytes   434 Mbits/sec    0   1.96 MBytes       
[  5]   2.00-3.00   sec  51.9 MBytes   435 Mbits/sec    0   1.96 MBytes       
[  5]   3.00-4.00   sec  50.1 MBytes   420 Mbits/sec    0   1.96 MBytes       
[  5]   4.00-5.00   sec  51.5 MBytes   432 Mbits/sec    0   1.96 MBytes       
[  5]   5.00-6.00   sec  51.0 MBytes   428 Mbits/sec    0   1.96 MBytes       
[  5]   6.00-7.00   sec  51.2 MBytes   430 Mbits/sec    0   1.96 MBytes       
[  5]   7.00-8.00   sec  49.9 MBytes   418 Mbits/sec    0   1.96 MBytes       
[  5]   8.00-9.00   sec  51.4 MBytes   431 Mbits/sec    0   1.96 MBytes       
[  5]   9.00-10.00  sec  51.6 MBytes   433 Mbits/sec    0   1.96 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   507 MBytes   425 Mbits/sec    0             sender
[  5]   0.00-10.02  sec   505 MBytes   423 Mbits/sec                  receiver

iperf Done.

I have seen similar in 802.11s meshes between Mediatek and Qualcom devices. Qualcom as upstream. I have not bothered to start diving deep. Following.

Bump to help visibility

I'm surprised it works at all: from the Orbi website for the RBS50
Only works with an Orbi Whole Home Mesh WiFi ac Router and Orbi ac WiFi Systems

:spiral_notepad: I get it they are both running OpenWRT but the backhaul chip is still a brat. Please provide these infos for each device.

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

Highlight the pastes and use the greater than and less than icon ( </> )in your reply to post results

Also show the output of mesh11sd status

Thanks! Here are the results.
from main router

root@Belkin_RT3200:~# ubus call system board
{
	"kernel": "5.15.134",
	"hostname": "Belkin_RT3200",
	"system": "ARMv8 Processor rev 4",
	"model": "Linksys E8450 (UBI)",
	"board_name": "linksys,e8450-ubi",
	"rootfs_type": "squashfs",
	"release": {
		"distribution": "OpenWrt",
		"version": "23.05.0",
		"revision": "r23497-6637af95aa",
		"target": "mediatek/mt7622",
		"description": "OpenWrt 23.05.0 r23497-6637af95aa"
	}
}
root@Belkin_RT3200:~# cat /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 'fd39:ecb1:7881::/48'

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

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ip6assign '60'
	list ipaddr '192.168.1.1/24'
	list dns '8.8.8.8'
	list dns '8.8.4.4'

config interface 'wan'
	option device 'wan'
	option proto 'dhcp'
	option peerdns '0'
	list dns '8.8.8.8'
	list dns '208.67.222.222'
	list dns '8.8.4.4'

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

root@Belkin_RT3200:~# 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 '10000'
	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 logqueries '1'
	option serversfile '/var/run/adblock-fast/dnsmasq.servers'

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 'RPi4'
	option dns '1'
	option mac 'DC:A6:32:A4:8D:4A'
	option ip '192.168.1.2'

config host
	option name 'RPi4Wireless'
	option dns '1'
	option mac '3E:88:36:90:0C:B3'
	option ip '192.168.1.3'

config host
	option name 'myNAS'
	option dns '1'
	option mac '24:5E:BE:1D:C6:E1'
	option ip '192.168.1.5'

config host
	option name 'AlienwareEthernet'
	option dns '1'
	option mac '2C:F0:5D:A1:C4:47'
	option ip '192.168.1.7'

config host
	option name 'AlienwareWireless'
	option dns '1'
	option mac '34:C9:3D:AF:39:A8'
	option ip '192.168.1.8'

config host
	option name 'RBR50'
	option dns '1'
	option mac '78:D2:94:C3:52:EC'
	option ip '192.168.1.9'

config host
	option name 'RBS50'
	option dns '1'
	option mac '78:D2:94:BF:EA:88'
	option ip '192.168.1.10'

root@Belkin_RT3200:~# cat /etc/config/firewall

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

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

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

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 redirect
	option dest 'lan'
	option target 'DNAT'
	option name 'NAS 4443'
	option src 'wan'
	option src_dport '4443'
	option dest_ip '192.168.1.5'
	option dest_port '4443'

config redirect
	option dest 'lan'
	option target 'DNAT'
	option name 'SSR 9978'
	option src 'wan'
	option src_dport '9978'
	option dest_ip '192.168.1.2'
	option dest_port '9978'

from node

root@RBS50:~# ubus call system board
{
	"kernel": "5.15.137",
	"hostname": "RBS50",
	"system": "ARMv7 Processor rev 5 (v7l)",
	"model": "NETGEAR RBR50",
	"board_name": "netgear,rbr50",
	"rootfs_type": "squashfs",
	"release": {
		"distribution": "OpenWrt",
		"version": "23.05.2",
		"revision": "r23630-842932a63d",
		"target": "ipq40xx/generic",
		"description": "OpenWrt 23.05.2 r23630-842932a63d"
	}
}
root@RBS50:~# cat /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 'fdc2:1371:5e6a::/48'

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

config interface 'lan'
	option device 'br-lan'
	option proto 'dhcp'

config device
	option name 'wan'
	option macaddr '78:d2:94:bf:ea:89'

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

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

root@RBS50:~# cat /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 '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 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'

root@RBS50:~# cat /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'
	list network 'lan'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'ACCEPT'

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

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'

I assume this relates to Mesh11sd - Setting Parameters and Options. However, every time that I execute this part, the mesh fails. So to make it work, I skipped this step and the mesh has been working. So there is no response from this command.

I guess, may be if the main openwrt router can join the oem orbi mesh will be easier? Is this possible?

This way, the ORBIs will run the OEM and have their mesh, I somehow can find the mesh setting and reuse that in my openwrt routers.

Can you also show the wireless config?

No. Theirs is a proprietary "mesh" and incompatible with OpenWrt.

sure

main router


root@Belkin_RT3200:~# cat /etc/config/wireless

config wifi-device 'radio0'

option type 'mac80211'

option path 'platform/18000000.wmac'

option channel '6'

option band '2g'

option htmode 'HT40'

option cell_density '0'

option country 'US'

config wifi-iface 'default_radio0'

option device 'radio0'

option network 'lan'

option mode 'ap'

option ssid 'OpenWrt 2.4'

option encryption 'psk2'

option key 'password'

config wifi-device 'radio1'

option type 'mac80211'

option path '1a143000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'

option channel '104'

option band '5g'

option htmode 'VHT80'

option cell_density '0'

option country 'US'

config wifi-iface 'default_radio1'

option device 'radio1'

option network 'lan'

option mode 'ap'

option ssid 'ORBI13-2'

option encryption 'psk2'

option key 'password'

option ieee80211r '1'

option ft_over_ds '0'

option ft_psk_generate_local '1'

option ieee80211k '1'

config wifi-iface 'mesh'

option network 'lan'

option device 'radio1'

option mode 'mesh'

option ifname 'mesh0'

option mesh_id 'home_mesh'

option encryption 'sae'

option key 'password'

option mesh_fwding '1'

option mesh_rssi_threshold '0'

option time_zone 'PST8PDT,M3.2.0,M11.1.0'

node


root@RBS50:~# cat /etc/config/wireless

config wifi-device 'radio0'

option type 'mac80211'

option path 'soc/40000000.pci/pci0000:00/0000:00:00.0/0000:01:00.0'

option channel '104'

option band '5g'

option htmode 'VHT80'

option cell_density '0'

option country 'US'

config wifi-iface 'default_radio0'

option device 'radio0'

option network 'lan'

option mode 'ap'

option ssid 'ORBI13-2'

option encryption 'psk2'

option key 'password'

option ieee80211r '1'

option ft_over_ds '0'

option ft_psk_generate_local '1'

option ieee80211k '1'

config wifi-device 'radio1'

option type 'mac80211'

option path 'platform/soc/a000000.wifi'

option channel '1'

option band '2g'

option htmode 'HT20'

option cell_density '0'

config wifi-iface 'default_radio1'

option device 'radio1'

option network 'lan'

option mode 'ap'

option ssid 'RBS50_2.4G'

option encryption 'psk2'

option key 'password'

config wifi-device 'radio2'

option type 'mac80211'

option path 'platform/soc/a800000.wifi'

option channel '36'

option band '5g'

option htmode 'VHT80'

option cell_density '0'

option txpower '23'

config wifi-iface 'default_radio2'

option device 'radio2'

option network 'lan'

option mode 'ap'

option ssid 'RBS50_5G'

option encryption 'psk2'

option key 'password'

config wifi-iface 'mesh'

option device 'radio0'

option mode 'mesh'

option encryption 'sae'

option mesh_id 'home_mesh'

option mesh_fwding '1'

option mesh_rssi_threshold '0'

option ifname 'mesh0'

option key 'password'

option time_zone 'PST8PDT,M3.2.0,M11.1.0'

option network 'lan'

Typically, a config like this, without mesh11sd, will result in slow or intermittent connectivity between the two mesh nodes (see your title).

Did you follow the mesh11sd documentation?

Did you upgrade the wpad package to the mesh or full version?

Just posting to present my usual suggestion responsive to posts about problems with 'mesh' configurations to try out 'WDS'. I have x3 RT3200's connected via WDS with 27/28dBm maximum transmit power and see circa 650-750MBit/s therebetween when measuring using iperf3. Roaming works just fine and range covers large house, surrounding garden and some of the surrounding woods.

Indeed, particularly when there are just a small number of point to point connections it can be advantageous to use WDS.