Hi!
I'm a bit lost, I only get half the download speed over wifi of what the AP is getting over LAN.
What I tried so far on OpenWRT:
What I tried so far on OpenWRT:
- Packet Steering setting to:
Enabled: did not helpEnabled (All CPU): did not helpDisabled: did not help
- Channel setting to:
auto: did not help36: did not help
- Channel width setting to:
160 MHz: did not help80MHz: did not help
- Routing/NAT Offloading setting to:
None: did not helpSoftware: did not helpHardware: did not help
On the MacBook:
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport en0 prefs DisableInactivitySleep=YES
Nothing changed the download speed.
My setup is:
MacBook -> AP -> GoCOAX (MoCA 2.5) -> LAN -> OPNsense -> Internet (Fiber 300/300)
The NAS (192.168.40.10) I run iperf3 on is inside LAN. I can see the exact same behaviour on my iPhone 14.
From the AP
speedtest cpp (From AP to Internet)
root@AP-Downstairs:~# speedtest --output text
...
TEST_SERVER_DISTANCE=2
LATENCY=3
JITTER=0
DOWNLOAD_SPEED=299.86
UPLOAD_SPEED=301.47
iPerf3 (From AP to NAS)
root@AP-Downstairs:~# iperf3 -c 192.168.40.10
Connecting to host 192.168.40.10, port 5201
[ 5] local 192.168.40.8 port 41786 connected to 192.168.40.10 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 194 MBytes 1.63 Gbits/sec 0 2.05 MBytes
[ 5] 1.00-2.00 sec 209 MBytes 1.76 Gbits/sec 0 2.05 MBytes
[ 5] 2.00-3.01 sec 187 MBytes 1.56 Gbits/sec 0 2.79 MBytes
[ 5] 3.01-4.01 sec 199 MBytes 1.67 Gbits/sec 0 2.95 MBytes
[ 5] 4.01-5.00 sec 207 MBytes 1.75 Gbits/sec 0 2.95 MBytes
[ 5] 5.00-6.00 sec 210 MBytes 1.76 Gbits/sec 0 2.95 MBytes
[ 5] 6.00-7.00 sec 206 MBytes 1.73 Gbits/sec 0 3.13 MBytes
[ 5] 7.00-8.00 sec 209 MBytes 1.76 Gbits/sec 0 3.13 MBytes
[ 5] 8.00-9.01 sec 195 MBytes 1.62 Gbits/sec 0 3.29 MBytes
[ 5] 9.01-10.00 sec 184 MBytes 1.55 Gbits/sec 0 3.47 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.96 GBytes 1.68 Gbits/sec 0 sender
[ 5] 0.00-10.01 sec 1.96 GBytes 1.68 Gbits/sec receiver
iperf Done.
root@AP-Downstairs:~# iperf3 -c 192.168.40.10 -R
Connecting to host 192.168.40.10, port 5201
Reverse mode, remote host 192.168.40.10 is sending
[ 5] local 192.168.40.8 port 36654 connected to 192.168.40.10 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 90.4 MBytes 757 Mbits/sec
[ 5] 1.00-2.00 sec 95.9 MBytes 804 Mbits/sec
[ 5] 2.00-3.00 sec 94.5 MBytes 793 Mbits/sec
[ 5] 3.00-4.00 sec 99.2 MBytes 832 Mbits/sec
[ 5] 4.00-5.00 sec 96.0 MBytes 806 Mbits/sec
[ 5] 5.00-6.00 sec 94.9 MBytes 796 Mbits/sec
[ 5] 6.00-7.00 sec 92.8 MBytes 778 Mbits/sec
[ 5] 7.00-8.00 sec 98.1 MBytes 823 Mbits/sec
[ 5] 8.00-9.00 sec 97.6 MBytes 819 Mbits/sec
[ 5] 9.00-10.00 sec 98.5 MBytes 826 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.01 sec 962 MBytes 806 Mbits/sec 366 sender
[ 5] 0.00-10.00 sec 958 MBytes 803 Mbits/sec receiver
iperf Done.
From the MacBook
speedtest cpp (From MacBook to Internet)
❯ ./speedtest --output text
…
TEST_SERVER_DISTANCE=2
LATENCY=6
JITTER=1
DOWNLOAD_SPEED=153.99
UPLOAD_SPEED=304.54
iPerf3 (From MacBook to NAS)
❯ iperf3 -c nas
Connecting to host nas, port 5201
[ 7] local 192.168.40.162 port 61833 connected to 192.168.40.10 port 5201
[ ID] Interval Transfer Bitrate
[ 7] 0.00-1.01 sec 94.0 MBytes 785 Mbits/sec
[ 7] 1.01-2.00 sec 93.9 MBytes 790 Mbits/sec
[ 7] 2.00-3.01 sec 94.9 MBytes 793 Mbits/sec
[ 7] 3.01-4.00 sec 90.5 MBytes 763 Mbits/sec
[ 7] 4.00-5.00 sec 88.5 MBytes 740 Mbits/sec
[ 7] 5.00-6.01 sec 85.9 MBytes 719 Mbits/sec
[ 7] 6.01-7.00 sec 85.5 MBytes 719 Mbits/sec
[ 7] 7.00-8.00 sec 93.2 MBytes 783 Mbits/sec
[ 7] 8.00-9.01 sec 94.5 MBytes 790 Mbits/sec
[ 7] 9.01-10.01 sec 93.2 MBytes 782 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 7] 0.00-10.01 sec 914 MBytes 766 Mbits/sec sender
[ 7] 0.00-10.02 sec 912 MBytes 764 Mbits/sec receiver
iperf Done.
❯ iperf3 -c nas -R
Connecting to host nas, port 5201
Reverse mode, remote host nas is sending
[ 7] local 192.168.40.162 port 61859 connected to 192.168.40.10 port 5201
[ ID] Interval Transfer Bitrate
[ 7] 0.00-1.01 sec 51.9 MBytes 433 Mbits/sec
[ 7] 1.01-2.00 sec 48.1 MBytes 405 Mbits/sec
[ 7] 2.00-3.00 sec 52.2 MBytes 439 Mbits/sec
[ 7] 3.00-4.00 sec 52.4 MBytes 438 Mbits/sec
[ 7] 4.00-5.00 sec 49.9 MBytes 420 Mbits/sec
[ 7] 5.00-6.00 sec 55.9 MBytes 468 Mbits/sec
[ 7] 6.00-7.00 sec 53.8 MBytes 450 Mbits/sec
[ 7] 7.00-8.00 sec 53.5 MBytes 449 Mbits/sec
[ 7] 8.00-9.00 sec 53.0 MBytes 445 Mbits/sec
[ 7] 9.00-10.00 sec 50.5 MBytes 423 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 7] 0.00-10.01 sec 525 MBytes 440 Mbits/sec 180 sender
[ 7] 0.00-10.00 sec 521 MBytes 437 Mbits/sec receiver
iperf Done.
uci show
details
root@AP-Downstairs:~# uci show
dhcp.@dnsmasq[0]=dnsmasq
dhcp.@dnsmasq[0].domainneeded='1'
dhcp.@dnsmasq[0].boguspriv='1'
dhcp.@dnsmasq[0].filterwin2k='0'
dhcp.@dnsmasq[0].localise_queries='1'
dhcp.@dnsmasq[0].rebind_protection='1'
dhcp.@dnsmasq[0].rebind_localhost='1'
dhcp.@dnsmasq[0].local='/lan/'
dhcp.@dnsmasq[0].domain='lan'
dhcp.@dnsmasq[0].expandhosts='1'
dhcp.@dnsmasq[0].nonegcache='0'
dhcp.@dnsmasq[0].cachesize='1000'
dhcp.@dnsmasq[0].authoritative='1'
dhcp.@dnsmasq[0].readethers='1'
dhcp.@dnsmasq[0].leasefile='/tmp/dhcp.leases'
dhcp.@dnsmasq[0].resolvfile='/tmp/resolv.conf.d/resolv.conf.auto'
dhcp.@dnsmasq[0].nonwildcard='1'
dhcp.@dnsmasq[0].localservice='1'
dhcp.@dnsmasq[0].ednspacket_max='1232'
dhcp.@dnsmasq[0].filter_aaaa='0'
dhcp.@dnsmasq[0].filter_a='0'
dhcp.wan=dhcp
dhcp.wan.interface='wan'
dhcp.wan.ignore='1'
dhcp.odhcpd=odhcpd
dhcp.odhcpd.maindhcp='0'
dhcp.odhcpd.leasefile='/tmp/hosts/odhcpd'
dhcp.odhcpd.leasetrigger='/usr/sbin/odhcpd-update'
dhcp.odhcpd.loglevel='4'
dhcp.odhcpd.piofolder='/tmp/odhcpd-piofolder'
dhcp.MGMT=dhcp
dhcp.MGMT.interface='MGMT'
dhcp.MGMT.start='100'
dhcp.MGMT.limit='150'
dhcp.MGMT.leasetime='12h'
dhcp.MGMT.ignore='1'
dropbear.main=dropbear
dropbear.main.PasswordAuth='on'
dropbear.main.Port='22'
dropbear.main.Interface='MGMT'
dropbear.main.GatewayPorts='on'
dropbear.@dropbear[1]=dropbear
dropbear.@dropbear[1].Interface='LAN'
dropbear.@dropbear[1].Port='22'
dropbear.@dropbear[1].PasswordAuth='off'
dropbear.@dropbear[1].RootPasswordAuth='off'
firewall.@defaults[0]=defaults
firewall.@defaults[0].input='REJECT'
firewall.@defaults[0].output='ACCEPT'
firewall.@defaults[0].forward='REJECT'
firewall.@defaults[0].synflood_protect='1'
firewall.@defaults[0].flow_offloading='1'
firewall.@zone[0]=zone
firewall.@zone[0].name='mgmt'
firewall.@zone[0].input='ACCEPT'
firewall.@zone[0].output='ACCEPT'
firewall.@zone[0].forward='ACCEPT'
firewall.@zone[0].network='MGMT'
firewall.@zone[1]=zone
firewall.@zone[1].name='lan'
firewall.@zone[1].input='ACCEPT'
firewall.@zone[1].output='ACCEPT'
firewall.@zone[1].forward='REJECT'
firewall.@zone[1].network='LAN'
firewall.@zone[2]=zone
firewall.@zone[2].name='iot'
firewall.@zone[2].input='REJECT'
firewall.@zone[2].output='ACCEPT'
firewall.@zone[2].forward='REJECT'
firewall.@zone[2].network='IOT'
firewall.@zone[3]=zone
firewall.@zone[3].name='work'
firewall.@zone[3].input='REJECT'
firewall.@zone[3].output='ACCEPT'
firewall.@zone[3].forward='REJECT'
firewall.@zone[3].network='WORK'
luci.main=core
luci.main.lang='auto'
luci.main.mediaurlbase='/luci-static/bootstrap'
luci.main.resourcebase='/luci-static/resources'
luci.main.ubuspath='/ubus/'
luci.flash_keep=extern
luci.flash_keep.uci='/etc/config/'
luci.flash_keep.dropbear='/etc/dropbear/'
luci.flash_keep.openvpn='/etc/openvpn/'
luci.flash_keep.passwd='/etc/passwd'
luci.flash_keep.opkg='/etc/opkg.conf'
luci.flash_keep.firewall='/etc/firewall.user'
luci.flash_keep.uploads='/lib/uci/upload/'
luci.languages=internal
luci.sauth=internal
luci.sauth.sessionpath='/tmp/luci-sessions'
luci.sauth.sessiontime='3600'
luci.ccache=internal
luci.ccache.enable='1'
luci.themes=internal
luci.themes.Bootstrap='/luci-static/bootstrap'
luci.themes.BootstrapDark='/luci-static/bootstrap-dark'
luci.themes.BootstrapLight='/luci-static/bootstrap-light'
luci.apply=internal
luci.apply.rollback='90'
luci.apply.holdoff='4'
luci.apply.timeout='5'
luci.apply.display='1.5'
luci.diag=internal
luci.diag.dns='openwrt.org'
luci.diag.ping='openwrt.org'
luci.diag.route='openwrt.org'
network.loopback=interface
network.loopback.device='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.globals.ula_prefix='fd1a:f722:2b84::/48'
network.globals.packet_steering='2'
network.globals.steering_flows='128'
network.MGMT=interface
network.MGMT.proto='static'
network.MGMT.device='MGMT'
network.MGMT.ipaddr='192.168.30.8'
network.MGMT.netmask='255.255.255.0'
network.MGMT.gateway='192.168.30.1'
network.MGMT.defaultroute='0'
network.@device[0]=device
network.@device[0].type='8021q'
network.@device[0].ifname='eth0'
network.@device[0].vid='40'
network.@device[0].name='eth0.40'
network.@device[1]=device
network.@device[1].type='bridge'
network.@device[1].name='LAN'
network.@device[1].ports='eth0.40'
network.@device[1].macaddr='64:dd:68:69:40:f6'
network.LAN=interface
network.LAN.proto='dhcp'
network.LAN.device='LAN'
network.@device[2]=device
network.@device[2].type='bridge'
network.@device[2].name='MGMT'
network.@device[2].ports='eth0'
network.@device[2].macaddr='64:DD:68:69:30:f6'
network.@device[3]=device
network.@device[3].type='8021q'
network.@device[3].ifname='eth0'
network.@device[3].vid='50'
network.@device[3].name='eth0.50'
network.@device[4]=device
network.@device[4].type='8021q'
network.@device[4].ifname='eth0'
network.@device[4].vid='60'
network.@device[4].name='eth0.60'
network.@device[5]=device
network.@device[5].type='bridge'
network.@device[5].name='IoT'
network.@device[5].ports='eth0.50'
network.@device[5].macaddr='64:dd:68:69:50:f6'
network.@device[6]=device
network.@device[6].type='bridge'
network.@device[6].name='Work'
network.@device[6].ports='eth0.60'
network.@device[6].macaddr='64:dd:68:69:60:f6'
network.IOT=interface
network.IOT.proto='dhcp'
network.IOT.device='IoT'
network.IOT.defaultroute='0'
network.WORK=interface
network.WORK.proto='dhcp'
network.WORK.device='Work'
network.WORK.defaultroute='0'
prometheus-node-exporter-lua.main=prometheus-node-exporter-lua
prometheus-node-exporter-lua.main.listen_interface='MGMT'
prometheus-node-exporter-lua.main.listen_port='9100'
radius.@radius[0]=radius
radius.@radius[0].disabled='1'
radius.@radius[0].ca_cert='/etc/radius/ca.pem'
radius.@radius[0].cert='/etc/radius/cert.pem'
radius.@radius[0].key='...'
radius.@radius[0].users='/etc/radius/users'
radius.@radius[0].clients='/etc/radius/clients'
radius.@radius[0].auth_port='1812'
radius.@radius[0].acct_port='1813'
rpcd.@rpcd[0]=rpcd
rpcd.@rpcd[0].socket='/var/run/ubus/ubus.sock'
rpcd.@rpcd[0].timeout='30'
rpcd.@login[0]=login
rpcd.@login[0].username='root'
rpcd.@login[0].password='$p$root'
rpcd.@login[0].read='*'
rpcd.@login[0].write='*'
system.@system[0]=system
system.@system[0].hostname='AP-Downstairs'
system.@system[0].timezone='CET-1CEST,M3.5.0,M10.5.0/3'
system.@system[0].ttylogin='0'
system.@system[0].log_size='128'
system.@system[0].urandom_seed='0'
system.@system[0].zonename='Europe/Berlin'
system.@system[0].log_proto='udp'
system.@system[0].conloglevel='8'
system.@system[0].cronloglevel='7'
system.@system[0].log_ip='192.168.30.10'
system.@system[0].log_port='514'
system.ntp=timeserver
system.ntp.server='0.openwrt.pool.ntp.org' '1.openwrt.pool.ntp.org' '2.openwrt.pool.ntp.org' '3.openwrt.pool.ntp.org'
system.@led[0]=led
system.@led[0].name='Default Off'
system.@led[0].sysfs='green:system'
system.@led[0].trigger='none'
system.@led[0].default='0'
ubihealthd.ubi0=ubi-device
ubihealthd.ubi0.device='/dev/ubi0'
ubihealthd.ubi0.enable='1'
uhttpd.main=uhttpd
uhttpd.main.listen_http='0.0.0.0:80' '[::]:80'
uhttpd.main.listen_https='0.0.0.0:443' '[::]:443'
uhttpd.main.redirect_https='1'
uhttpd.main.home='/www'
uhttpd.main.rfc1918_filter='1'
uhttpd.main.max_requests='3'
uhttpd.main.max_connections='100'
uhttpd.main.cert='/etc/uhttpd.crt'
uhttpd.main.key='...'
uhttpd.main.cgi_prefix='/cgi-bin'
uhttpd.main.lua_prefix='/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua'
uhttpd.main.script_timeout='60'
uhttpd.main.network_timeout='30'
uhttpd.main.http_keepalive='20'
uhttpd.main.tcp_keepalive='1'
uhttpd.main.ubus_prefix='/ubus'
uhttpd.defaults=cert
uhttpd.defaults.days='397'
uhttpd.defaults.key_type='ec'
uhttpd.defaults.bits='2048'
uhttpd.defaults.ec_curve='P-256'
uhttpd.defaults.country='ZZ'
uhttpd.defaults.state='Somewhere'
uhttpd.defaults.location='Unknown'
uhttpd.defaults.commonname='OpenWrt'
wireless.radio0=wifi-device
wireless.radio0.type='mac80211'
wireless.radio0.path='platform/soc/18000000.wifi'
wireless.radio0.band='2g'
wireless.radio0.channel='auto'
wireless.radio0.htmode='HE40'
wireless.radio0.country='DE'
wireless.radio0.cell_density='0'
wireless.radio1=wifi-device
wireless.radio1.type='mac80211'
wireless.radio1.path='platform/soc/18000000.wifi+1'
wireless.radio1.band='5g'
wireless.radio1.channel='auto'
wireless.radio1.htmode='HE80'
wireless.radio1.country='DE'
wireless.radio1.cell_density='0'
wireless.wifinet0=wifi-iface
wireless.wifinet0.device='radio0'
wireless.wifinet0.mode='ap'
wireless.wifinet0.ssid='Stone-LAN'
wireless.wifinet0.encryption='sae-mixed'
wireless.wifinet0.key='...'
wireless.wifinet0.ocv='0'
wireless.wifinet0.network='LAN'
wireless.wifinet0.wps_pushbutton='1'
wireless.wifinet1=wifi-iface
wireless.wifinet1.device='radio1'
wireless.wifinet1.mode='ap'
wireless.wifinet1.ssid='Stone-LAN'
wireless.wifinet1.encryption='sae-mixed'
wireless.wifinet1.key='...'
wireless.wifinet1.ocv='0'
wireless.wifinet1.network='LAN'
wireless.wifinet1.wps_pushbutton='1'
wireless.wifinet2=wifi-iface
wireless.wifinet2.device='radio1'
wireless.wifinet2.mode='ap'
wireless.wifinet2.ssid='Stone-Work'
wireless.wifinet2.encryption='sae-mixed'
wireless.wifinet2.key='...'
wireless.wifinet2.ocv='0'
wireless.wifinet2.network='WORK'
wireless.wifinet2.wps_pushbutton='1'
wireless.wifinet3=wifi-iface
wireless.wifinet3.device='radio0'
wireless.wifinet3.mode='ap'
wireless.wifinet3.ssid='Stone-Work'
wireless.wifinet3.encryption='sae-mixed'
wireless.wifinet3.key='...'
wireless.wifinet3.ocv='0'
wireless.wifinet3.network='WORK'
wireless.wifinet3.wps_pushbutton='1'
wireless.wifinet4=wifi-iface
wireless.wifinet4.device='radio1'
wireless.wifinet4.mode='ap'
wireless.wifinet4.ssid='Stone-MGMT'
wireless.wifinet4.encryption='sae-mixed'
wireless.wifinet4.hidden='1'
wireless.wifinet4.key='...'
wireless.wifinet4.ocv='0'
wireless.wifinet4.network='MGMT'
wireless.wifinet5=wifi-iface
wireless.wifinet5.device='radio0'
wireless.wifinet5.mode='ap'
wireless.wifinet5.ssid='Stone-MGMT'
wireless.wifinet5.encryption='sae-mixed'
wireless.wifinet5.hidden='1'
wireless.wifinet5.key='...'
wireless.wifinet5.ocv='0'
wireless.wifinet5.network='MGMT'
wireless.wifinet6=wifi-iface
wireless.wifinet6.device='radio0'
wireless.wifinet6.mode='ap'
wireless.wifinet6.ssid='Stone-IoT'
wireless.wifinet6.encryption='sae-mixed'
wireless.wifinet6.key='...'
wireless.wifinet6.ocv='0'
wireless.wifinet6.network='IOT'
wireless.wifinet6.wps_pushbutton='1'
wireless.wifinet7=wifi-iface
wireless.wifinet7.device='radio1'
wireless.wifinet7.mode='ap'
wireless.wifinet7.ssid='Stone-IoT'
wireless.wifinet7.encryption='sae-mixed'
wireless.wifinet7.key='...'
wireless.wifinet7.ocv='0'
wireless.wifinet7.network='IOT'
wireless.wifinet7.wps_pushbutton='1'
r