GL.iNet GL-AR150 Ethernet-to-WiFi Adapter Configuration Problems?

I'm attempting to configure OpenWRT on a GL.iNet GL-AR150 to make the device act as an ethernet-to-WiFi adapter, and having difficulty.

Intended network layout:
Modem =Ethernet=> PFSense Router WAN
PFSense Router LAN =Ethernet=> Switch
Switch =Ethernet=> Windows 10 computer
Switch =Ethernet=> Ubiquiti UAP-AC-HD Unifi Access Point (WiFi AP)
Ubiquiti UAP-AC-HD Unifi Access Point =WiFi=> GL-AR150
GL-AR150 LAN =Ethernet=> Okidata B411 printer

A network printer will be located somewhere where there is no ethernet connectivity.
WiFi is available.
The printer doesn't have WiFi, but does have ethernet.
A GL-AR150 will be configured to act as an ethernet-to-WiFi adapter, allowing the printer to connect to the network without running a cable from the printer to the switch.
The printer doesn't support IPv6.

I attempted to configure the GL-AR150 to act as an ethernet-to-WiFi bridge with relayd, following instructions at https://openwrt.org/docs/guide-user/network/wifi/relay_configuration. On completion, the GL-AR150 appears to behave as a bridge in one direction, but something seems to be blocking traffic going the other direction.

GL-AR150 can communicate with systems on the internet and ping devices and computers on the main network.
A computer plugged into the LAN port on the GL-AR150 can use the main router's DHCP service to obtain an IP address. It can can ping devices and computers on the main network. And it can use SMB to access shared folders on computers connected to the main network. It can not, however, communicate with systems on the internet. (This isn't a problem.)
A computer plugged into the switch can ping the GL-AR150. It can not, however, ping or otherwise communicate with a computer connected to the LAN port on the GL-AR150.

I replaced the OEM firmware on the GL-AR150 with a non-custom firmware downloaded from OpenWRT's FTP server after my first few attempts at configuring the device failed to produce the expected results. This didn't solve the problem.

I've also tried resetting the device to factory defaults and using it as a router, just to see if I could make that work. Should be easy, right? This is the default configuration, isn't it? It didn't work though. A device connected to the LAN port was unable to communicate with stuff on the network connected to the WAN port, at all. I could get some communications by bridging WAN to LAN, but I ended up with the same problem as when configured to bridge WiFi to LAN: stuff on the LAN port could see stuff on the WAN port, but not the internet, and stuff on the WAN port couldn't see stuff on the LAN port.

What am I missing or doing wrong?

GL.iNet GL-AR150
Atheros AR9330 rev 1
Firmware binary: openwrt-19.07.4-ath79-generic-glinet_gl-ar150-squashfs-sysupgrade.bin
OpenWrt 19.07.4 r11208-ce6496d796 / LuCI openwrt-19.07 branch git-20.247.75781-0d0ab01
Linux version 4.14.195 (builder@buildhost) (gcc version 7.5.0 (OpenWrt GCC 7.5.0 r11208-ce6496d796)) #0 Sun Sep 6 16:19:39 2020


root@OpenWrt:/etc/config# cat network
config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fde2:60eb:1295::/48'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '10.10.1.1'
        list dns '10.10.0.1'
        option gateway '10.10.0.1'

config interface 'wan'
        option ifname 'eth1'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth1'
        option proto 'dhcpv6'

config interface 'wwan'
        option proto 'dhcp'

config interface 'eth2wifi'
        option proto 'relay'
        option ipaddr '10.10.0.142'
        list network 'lan'
        list network 'wwan'

root@OpenWrt:/etc/config# cat wireless

config wifi-device 'radio0'
        option type 'mac80211'
        option channel '11'
        option hwmode '11g'
        option path 'platform/ahb/18100000.wmac'
        option htmode 'HT20'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid 'OpenWrt'
        option encryption 'none'
        option disabled '1'

config wifi-iface 'wifinet1'
        option ssid 'MyWiFiSSID'
        option device 'radio0'
        option mode 'sta'
        option key 'REDACTED'
        option network 'wwan'
        option encryption 'psk2+ccmp'

root@OpenWrt:/etc/config# cat firewall

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

config zone
        option name 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option network 'lan wwan eth2wifi'

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

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 src_ip 'fc00::/6'
        option dest_ip 'fc00::/6'
        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 include
        option path '/etc/firewall.user'

config forwarding
        option dest 'lan'
        option src 'wan'

root@OpenWrt:/etc/config# cat 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 authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.auto'
        option nonwildcard '1'
        option localservice '1'

config dhcp 'lan'
        option interface 'lan'
        option ignore '1'
        option ra 'relay'
        option ndp 'relay'
        option dhcpv6 'relay'

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@OpenWrt:/# 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].authoritative='1'
dhcp.@dnsmasq[0].readethers='1'
dhcp.@dnsmasq[0].leasefile='/tmp/dhcp.leases'
dhcp.@dnsmasq[0].resolvfile='/tmp/resolv.conf.auto'
dhcp.@dnsmasq[0].nonwildcard='1'
dhcp.@dnsmasq[0].localservice='1'
dhcp.lan=dhcp
dhcp.lan.interface='lan'
dhcp.lan.ignore='1'
dhcp.lan.ra='relay'
dhcp.lan.ndp='relay'
dhcp.lan.dhcpv6='relay'
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'
dropbear.@dropbear[0]=dropbear
dropbear.@dropbear[0].PasswordAuth='on'
dropbear.@dropbear[0].Port='22'
firewall.@defaults[0]=defaults
firewall.@defaults[0].input='ACCEPT'
firewall.@defaults[0].output='ACCEPT'
firewall.@defaults[0].forward='ACCEPT'
firewall.@defaults[0].synflood_protect='1'
firewall.@zone[0]=zone
firewall.@zone[0].name='lan'
firewall.@zone[0].input='ACCEPT'
firewall.@zone[0].output='ACCEPT'
firewall.@zone[0].forward='ACCEPT'
firewall.@zone[0].network='lan wwan eth2wifi'
firewall.@zone[1]=zone
firewall.@zone[1].name='wan'
firewall.@zone[1].output='ACCEPT'
firewall.@zone[1].masq='1'
firewall.@zone[1].mtu_fix='1'
firewall.@zone[1].network='wan wan6'
firewall.@zone[1].input='ACCEPT'
firewall.@zone[1].forward='ACCEPT'
firewall.@forwarding[0]=forwarding
firewall.@forwarding[0].src='lan'
firewall.@forwarding[0].dest='wan'
firewall.@rule[0]=rule
firewall.@rule[0].name='Allow-DHCP-Renew'
firewall.@rule[0].src='wan'
firewall.@rule[0].proto='udp'
firewall.@rule[0].dest_port='68'
firewall.@rule[0].target='ACCEPT'
firewall.@rule[0].family='ipv4'
firewall.@rule[1]=rule
firewall.@rule[1].name='Allow-Ping'
firewall.@rule[1].src='wan'
firewall.@rule[1].proto='icmp'
firewall.@rule[1].icmp_type='echo-request'
firewall.@rule[1].family='ipv4'
firewall.@rule[1].target='ACCEPT'
firewall.@rule[2]=rule
firewall.@rule[2].name='Allow-IGMP'
firewall.@rule[2].src='wan'
firewall.@rule[2].proto='igmp'
firewall.@rule[2].family='ipv4'
firewall.@rule[2].target='ACCEPT'
firewall.@rule[3]=rule
firewall.@rule[3].name='Allow-DHCPv6'
firewall.@rule[3].src='wan'
firewall.@rule[3].proto='udp'
firewall.@rule[3].src_ip='fc00::/6'
firewall.@rule[3].dest_ip='fc00::/6'
firewall.@rule[3].dest_port='546'
firewall.@rule[3].family='ipv6'
firewall.@rule[3].target='ACCEPT'
firewall.@rule[4]=rule
firewall.@rule[4].name='Allow-MLD'
firewall.@rule[4].src='wan'
firewall.@rule[4].proto='icmp'
firewall.@rule[4].src_ip='fe80::/10'
firewall.@rule[4].icmp_type='130/0' '131/0' '132/0' '143/0'
firewall.@rule[4].family='ipv6'
firewall.@rule[4].target='ACCEPT'
firewall.@rule[5]=rule
firewall.@rule[5].name='Allow-ICMPv6-Input'
firewall.@rule[5].src='wan'
firewall.@rule[5].proto='icmp'
firewall.@rule[5].icmp_type='echo-request' 'echo-reply' 'destination-unreachable' 'packet-too-big' 'time-exceeded' 'bad-header' 'unknown-header-type' 'router-solicitation' 'neighbour-solicitation' 'router-advertisement' 'neighbour-advertisement'
firewall.@rule[5].limit='1000/sec'
firewall.@rule[5].family='ipv6'
firewall.@rule[5].target='ACCEPT'
firewall.@rule[6]=rule
firewall.@rule[6].name='Allow-ICMPv6-Forward'
firewall.@rule[6].src='wan'
firewall.@rule[6].dest='*'
firewall.@rule[6].proto='icmp'
firewall.@rule[6].icmp_type='echo-request' 'echo-reply' 'destination-unreachable' 'packet-too-big' 'time-exceeded' 'bad-header' 'unknown-header-type'
firewall.@rule[6].limit='1000/sec'
firewall.@rule[6].family='ipv6'
firewall.@rule[6].target='ACCEPT'
firewall.@rule[7]=rule
firewall.@rule[7].name='Allow-IPSec-ESP'
firewall.@rule[7].src='wan'
firewall.@rule[7].dest='lan'
firewall.@rule[7].proto='esp'
firewall.@rule[7].target='ACCEPT'
firewall.@rule[8]=rule
firewall.@rule[8].name='Allow-ISAKMP'
firewall.@rule[8].src='wan'
firewall.@rule[8].dest='lan'
firewall.@rule[8].dest_port='500'
firewall.@rule[8].proto='udp'
firewall.@rule[8].target='ACCEPT'
firewall.@include[0]=include
firewall.@include[0].path='/etc/firewall.user'
firewall.@forwarding[1]=forwarding
firewall.@forwarding[1].dest='lan'
firewall.@forwarding[1].src='wan'
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.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.ifname='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='fde2:60eb:1295::/48'
network.lan=interface
network.lan.type='bridge'
network.lan.ifname='eth0'
network.lan.proto='static'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
network.lan.ipaddr='10.10.1.1'
network.lan.dns='10.10.0.1'
network.lan.gateway='10.10.0.1'
network.wan=interface
network.wan.ifname='eth1'
network.wan.proto='dhcp'
network.wan6=interface
network.wan6.ifname='eth1'
network.wan6.proto='dhcpv6'
network.wwan=interface
network.wwan.proto='dhcp'
network.eth2wifi=interface
network.eth2wifi.proto='relay'
network.eth2wifi.ipaddr='10.10.0.142'
network.eth2wifi.network='lan' 'wwan'
rpcd.@rpcd[0]=rpcd
rpcd.@rpcd[0].socket='/var/run/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='OpenWrt'
system.@system[0].timezone='UTC'
system.@system[0].ttylogin='0'
system.@system[0].log_size='64'
system.@system[0].urandom_seed='0'
system.ntp=timeserver
system.ntp.enabled='1'
system.ntp.enable_server='0'
system.ntp.server='0.openwrt.pool.ntp.org' '1.openwrt.pool.ntp.org' '2.openwrt.pool.ntp.org' '3.openwrt.pool.ntp.org'
ubootenv.@ubootenv[0]=ubootenv
ubootenv.@ubootenv[0].dev='/dev/mtd1'
ubootenv.@ubootenv[0].offset='0x0'
ubootenv.@ubootenv[0].envsize='0x8000'
ubootenv.@ubootenv[0].secsize='0x10000'
ucitrack.@network[0]=network
ucitrack.@network[0].init='network'
ucitrack.@network[0].affects='dhcp' 'radvd'
ucitrack.@wireless[0]=wireless
ucitrack.@wireless[0].affects='network'
ucitrack.@firewall[0]=firewall
ucitrack.@firewall[0].init='firewall'
ucitrack.@firewall[0].affects='luci-splash' 'qos' 'miniupnpd'
ucitrack.@olsr[0]=olsr
ucitrack.@olsr[0].init='olsrd'
ucitrack.@dhcp[0]=dhcp
ucitrack.@dhcp[0].init='dnsmasq'
ucitrack.@dhcp[0].affects='odhcpd'
ucitrack.@odhcpd[0]=odhcpd
ucitrack.@odhcpd[0].init='odhcpd'
ucitrack.@dropbear[0]=dropbear
ucitrack.@dropbear[0].init='dropbear'
ucitrack.@httpd[0]=httpd
ucitrack.@httpd[0].init='httpd'
ucitrack.@fstab[0]=fstab
ucitrack.@fstab[0].exec='/sbin/block mount'
ucitrack.@qos[0]=qos
ucitrack.@qos[0].init='qos'
ucitrack.@system[0]=system
ucitrack.@system[0].init='led'
ucitrack.@system[0].exec='/etc/init.d/log reload'
ucitrack.@system[0].affects='luci_statistics' 'dhcp'
ucitrack.@luci_splash[0]=luci_splash
ucitrack.@luci_splash[0].init='luci_splash'
ucitrack.@upnpd[0]=upnpd
ucitrack.@upnpd[0].init='miniupnpd'
ucitrack.@ntpclient[0]=ntpclient
ucitrack.@ntpclient[0].init='ntpclient'
ucitrack.@samba[0]=samba
ucitrack.@samba[0].init='samba'
ucitrack.@tinyproxy[0]=tinyproxy
ucitrack.@tinyproxy[0].init='tinyproxy'
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='/etc/uhttpd.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.defaults=cert
uhttpd.defaults.days='730'
uhttpd.defaults.key_type='rsa'
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.channel='11'
wireless.radio0.hwmode='11g'
wireless.radio0.path='platform/ahb/18100000.wmac'
wireless.radio0.htmode='HT20'
wireless.default_radio0=wifi-iface
wireless.default_radio0.device='radio0'
wireless.default_radio0.network='lan'
wireless.default_radio0.mode='ap'
wireless.default_radio0.ssid='OpenWrt'
wireless.default_radio0.encryption='none'
wireless.default_radio0.disabled='1'
wireless.wifinet1=wifi-iface
wireless.wifinet1.ssid='MyWiFiSSID'
wireless.wifinet1.device='radio0'
wireless.wifinet1.mode='sta'
wireless.wifinet1.key='REDACTED'
wireless.wifinet1.network='wwan'
wireless.wifinet1.encryption='psk2+ccmp'

root@OpenWrt:/usr/bin# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.0.1       0.0.0.0         UG        0 0          0 wlan0
10.10.0.0       0.0.0.0         255.255.255.0   U         0 0          0 wlan0
10.10.1.0       0.0.0.0         255.255.255.0   U         0 0          0 br-lan

root@OpenWrt:/usr/bin# dmesg
[    0.000000] Linux version 4.14.195 (builder@buildhost) (gcc version 7.5.0 (OpenWrt GCC 7.5.0 r11208-ce6496d796)) #0 Sun Sep 6 16:19:39 2020
[    0.000000] bootconsole [early0] enabled
[    0.000000] CPU0 revision is: 00019374 (MIPS 24Kc)
[    0.000000] MIPS: machine is GL.iNet GL-AR150
[    0.000000] SoC: Atheros AR9330 rev 1
[    0.000000] Determined physical RAM map:
[    0.000000]  memory: 04000000 @ 00000000 (usable)
[    0.000000] Initrd not found or empty - disabling initrd
[    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[    0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] On node 0 totalpages: 16384
[    0.000000] free_area_init_node: node 0, pgdat 804fbf70, node_mem_map 81006420
[    0.000000]   Normal zone: 128 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 16384 pages, LIFO batch:3
[    0.000000] random: get_random_bytes called from 0x804ff740 with crng_init=0
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 16256
[    0.000000] Kernel command line: console=ttyATH0,115200 rootfstype=squashfs,jffs2
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Writing ErrCtl register=00000000
[    0.000000] Readback ErrCtl register=00000000
[    0.000000] Memory: 58336K/65536K available (4031K kernel code, 160K rwdata, 532K rodata, 1220K init, 212K bss, 7200K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 51
[    0.000000] CPU clock: 400.000 MHz
[    0.000000] clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 9556302233 ns
[    0.000014] sched_clock: 32 bits at 200MHz, resolution 5ns, wraps every 10737418237ns
[    0.007594] Calibrating delay loop... 265.42 BogoMIPS (lpj=1327104)
[    0.092199] pid_max: default: 32768 minimum: 301
[    0.096917] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.102977] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.115468] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.123569] futex hash table entries: 256 (order: -1, 3072 bytes)
[    0.129441] pinctrl core: initialized pinctrl subsystem
[    0.137705] NET: Registered protocol family 16
[    0.170699] clocksource: Switched to clocksource MIPS
[    0.175723] NET: Registered protocol family 2
[    0.179814] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[    0.185252] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[    0.191315] TCP: Hash tables configured (established 1024 bind 1024)
[    0.197544] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.202995] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.209221] NET: Registered protocol family 1
[    0.213149] PCI: CLS 0 bytes, default 32
[    0.218572] Crashlog allocated RAM at address 0x3f00000
[    0.224131] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[    0.236849] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.241121] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.263918] io scheduler noop registered
[    0.266289] io scheduler deadline registered (default)
[    0.271809] ar7200-usb-phy usb-phy: phy reset is missing
[    0.276881] pinctrl-single 18040028.pinmux: 64 pins at pa b8040028 size 8
[    0.284184] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
[    0.292604] 18020000.uart: ttyATH0 at MMIO 0x18020000 (irq = 9, base_baud = 1562500) is a AR933X UART
[    0.300500] console [ttyATH0] enabled
[    0.307396] bootconsole [early0] disabled
[    0.336182] m25p80 spi0.0: w25q128 (16384 Kbytes)
[    0.339500] 4 fixed-partitions partitions found on MTD device spi0.0
[    0.345813] Creating 4 MTD partitions on "spi0.0":
[    0.350565] 0x000000000000-0x000000040000 : "u-boot"
[    0.356773] 0x000000040000-0x000000050000 : "u-boot-env"
[    0.361967] 0x000000050000-0x000000ff0000 : "firmware"
[    0.369744] 2 uimage-fw partitions found on MTD device firmware
[    0.374298] Creating 2 MTD partitions on "firmware":
[    0.379173] 0x000000000000-0x000000190000 : "kernel"
[    0.385306] 0x000000190000-0x000000fa0000 : "rootfs"
[    0.390057] mtd: device 4 (rootfs) set to be root filesystem
[    0.394824] 1 squashfs-split partitions found on MTD device rootfs
[    0.400912] 0x000000400000-0x000000fa0000 : "rootfs_data"
[    0.407324] 0x000000ff0000-0x000001000000 : "art"
[    0.413732] libphy: Fixed MDIO Bus: probed
[    0.751841] ag71xx 19000000.eth: Could not connect to PHY device. Deferring probe.
[    1.431161] libphy: ag71xx_mdio: probed
[    1.434522] libphy: ar8xxx-mdio: probed
[    1.440382] switch0: Atheros AR724X/AR933X built-in rev. 2 switch registered on mdio-bus.0
[    1.486770] ag71xx 1a000000.eth: connected to PHY at fixed-0:00 [uid=00000000, driver=Generic PHY]
[    1.495264] eth0: Atheros AG71xx at 0xba000000, irq 5, mode: gmii
[    1.503727] NET: Registered protocol family 10
[    1.514043] Segment Routing with IPv6
[    1.516380] NET: Registered protocol family 17
[    1.520856] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    1.533659] 8021q: 802.1Q VLAN Support v1.8
[    1.872459] ag71xx 19000000.eth: connected to PHY at mdio-bus.0:1f:04 [uid=004dd041, driver=Generic PHY]
[    1.881885] eth1: Atheros AG71xx at 0xb9000000, irq 4, mode: mii
[    1.887664] hctosys: unable to open rtc device (rtc0)
[    1.898547] VFS: Mounted root (squashfs filesystem) readonly on device 31:4.
[    1.913681] Freeing unused kernel memory: 1220K
[    1.916750] This architecture does not have kernel memory protection.
[    2.550726] random: fast init done
[    2.877377] init: Console is alive
[    2.879649] init: - watchdog -
[    4.047903] kmodloader: loading kernel modules from /etc/modules-boot.d/*
[    4.173970] usbcore: registered new interface driver usbfs
[    4.178120] usbcore: registered new interface driver hub
[    4.183558] usbcore: registered new device driver usb
[    4.199256] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    4.209423] chipidea-usb2 1b000000.usb: 1b000000.usb supply vbus not found, using dummy regulator
[    4.220019] ci_hdrc ci_hdrc.0: EHCI Host Controller
[    4.223586] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
[    4.250724] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
[    4.255930] hub 1-0:1.0: USB hub found
[    4.258880] hub 1-0:1.0: 1 port detected
[    4.264671] kmodloader: done loading kernel modules from /etc/modules-boot.d/*
[    4.281185] init: - preinit -
[    5.597614] random: jshn: uninitialized urandom read (4 bytes read)
[    5.935649] random: jshn: uninitialized urandom read (4 bytes read)
[    6.009879] random: jshn: uninitialized urandom read (4 bytes read)
[    6.324862] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    7.371875] eth0: link up (1000Mbps/Full duplex)
[    7.375084] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[    9.704115] jffs2: notice: (472) jffs2_build_xattr_subsystem: complete building xattr subsystem, 34 of xdatum (2 unchecked, 32 orphan) and 179 of xref (17 dead, 132 orphan) found.
[    9.720623] mount_root: switching to jffs2 overlay
[    9.760036] overlayfs: upper fs does not support tmpfile.
[    9.772640] urandom-seed: Seeding with /etc/urandom.seed
[   10.056631] eth0: link down
[   10.076313] procd: - early -
[   10.077895] procd: - watchdog -
[   10.878351] procd: - watchdog -
[   10.880513] procd: - ubus -
[   11.114812] urandom_read: 5 callbacks suppressed
[   11.114825] random: ubusd: uninitialized urandom read (4 bytes read)
[   11.126683] random: ubusd: uninitialized urandom read (4 bytes read)
[   11.133715] procd: - init -
[   12.205660] kmodloader: loading kernel modules from /etc/modules.d/*
[   12.439434] ip6_tables: (C) 2000-2006 Netfilter Core Team
[   12.472926] Loading modules backported from Linux version v4.19.137-0-gc076c79e03c6
[   12.479138] Backport generated by backports.git v4.19.137-1-0-g60c3a249
[   12.504266] ip_tables: (C) 2000-2006 Netfilter Core Team
[   12.533078] nf_conntrack version 0.5.0 (1024 buckets, 4096 max)
[   12.713541] xt_time: kernel timezone is -0000
[   12.868326] PPP generic driver version 2.4.2
[   12.882650] NET: Registered protocol family 24
[   12.993947] ath: EEPROM regdomain: 0x0
[   12.993963] ath: EEPROM indicates default country code should be used
[   12.993968] ath: doing EEPROM country->regdmn map search
[   12.993988] ath: country maps to regdmn code: 0x3a
[   12.993996] ath: Country alpha2 being used: US
[   12.994001] ath: Regpair used: 0x3a
[   13.009244] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[   13.012071] ieee80211 phy0: Atheros AR9330 Rev:1 mem=0xb8100000, irq=2
[   13.171310] kmodloader: done loading kernel modules from /etc/modules.d/*
[   13.351614] urngd: v1.0.2 started.
[   14.384339] random: crng init done
[   32.421357] eth0: link up (1000Mbps/Full duplex)
[   32.425478] br-lan: port 1(eth0) entered blocking state
[   32.429748] br-lan: port 1(eth0) entered disabled state
[   32.435521] device eth0 entered promiscuous mode
[   32.493013] br-lan: port 1(eth0) entered blocking state
[   32.496799] br-lan: port 1(eth0) entered forwarding state
[   32.502540] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready
[   32.614261] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[   33.450843] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready
[   35.168652] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[   38.743073] wlan0: authenticate with f0:9f:c2:ff:ff:b7
[   38.758762] wlan0: send auth to f0:9f:c2:ff:ff:b7 (try 1/3)
[   38.765465] wlan0: authenticated
[   38.770999] wlan0: associate with f0:9f:c2:ff:ff:b7 (try 1/3)
[   38.779440] wlan0: RX AssocResp from f0:9f:c2:ff:ff:b7 (capab=0x431 status=0 aid=2)
[   38.786016] wlan0: associated
[   38.815182] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready

I guess you don't need relayd, what you should configure is a basic bridging between LAN and Wi-Fi client interface. Switch DHCP server off, assign the LAN interface with ip address from the main router LAN subnet.

Relayd doesn't work very well. The best alternative to seamlessly extend the LAN is a WDS or 4-address connection, but that requires support for WDS in the AP. Another method is to have a regular AP-STA connection, but tunnel the printer back to the main router's LAN with GRE or even a VPN. I have not been very successful with GRE but OpenVPN in the TAP mode will work.

Or you can have the printer on a different subnet and route to it. Computers on the LAN will need to manually configure the printer's IP address since discovery methods don't work outside the LAN.

The AP doesn't appear to support WDS, so that's not an option.
I've been trying to setup OpenVPN. I got quite a ways into the process, got some communications going, probably 70% of the way to completion.

GL-AR150 was connected to the main network over WiFi. Laptop to the LAN port on the GL-AR150. GL-AR150 OpenVPN client connected to OpenVPN server on main router. OpenVPN network interface on GL-AR150 bridged to LAN. Laptop could see stuff on the main network, and on the internet. Names of computers on the main network could be resolved by the laptop. But...
Computers on the main network still couldn't see the laptop. I thought maybe I needed to figure out how to make the router on the main network assign an IP address to the laptop on the GL-AR150, or I needed to figure out how to setup routing from the main network's IP range to the VPN's IP range, or ????

Then I rebooted the GL-AR150. Bam. The laptop could no longer connect to anything. Maybe I could have connected to the GL-AR150 from a computer on the main network, but I didn't bother trying. I just reset the thing to factory defaults. I'll try again over the coming days.

Reviewing mk24's response again, I see he mentioned TAP mode. Oops. I was setting everything up in TUNnel mode.

Anyhow, it appears there's a lot of wizardry going on behind the scenes of a VPN. Figuring out the next step is difficult when you aren't familiar with the inner workings.

Thanks for your help so far.

What problems have you encountered with GRE?

Open the firewall on the router so you can log in via its wan (wifi) IP address from your main network, freeing up the Ethernet port for its final intended purpose. Then create a new network bridge of proto none connecting the VPN tap and the eth port. This will be a layer 2 connection from whatever is plugged into the port to the main router's LAN bridge, so the main router will handle DHCP etc for the printer. The AR150's existing lan network will end up basically unused but that is OK.

GRE seems to have problems with MTU mismatch that I couldn't resolve.