You were (un)lucky. In OpenWrt, ‘relay’ means that the requests are proxied to the upstream Internet Service Provider (ISP). I see that via a managed switch with port mirroring enabled, attached to the WAN port of my GL.iNet. Consequently, what you get, depends on your ISP, if you use mode ‘relay’.

Furthermore, it requires the ISP to provide IPv6 addresses via DHCPv6 (wrapped into PPPoE, if PPPoE was selected). This is not supported in general, actually the exception. Here in Germany, my two DSL ISPs do not offer IPv6 addresses (IA_NA) via DHCPv6. In Wireshark, this DHCPv6 option 3 is called ‘Identity Association for Non-temporary Address’.

With PPPoE, the trick is different:
The ISP sends a configuration request for IPv6 on the PPP layer (0x8057). My GL.iNet does not negate but acknowledges that, when I enable IPv6 in the Web interface of that GL.iNet. Then, the ISP sends a IPv6 Router Advertisements (IPv6 RA). GL.iNet has to extract the flags of that message. In my case, my GL.iNet would have to form its own IPv6 address via the IPv6 RA. And then, GL.iNet has to send a DHCPv6 message to get a prefix. In Wireshark, this is called ‘Identity Association for Prefix Delegation’. Then, GL.iNet (not the ISP) is handing out part of that very large prefix to IPv6 LAN clients.

All this works magically, when the default mode ‘server’ is set in OpenWrt. I have tested routers from 13 commercial vendors by now (all non-OpenWrt based). ‘server’ = router is the default behavior of all of them.

In contrast to that, with ‘relay’, GL.iNet went for the mode ‘pass-through’. Which is nice because I am sure it is useful for some ISPs out there (I do not know one @dxf, which ISP is that?). However, with ‘pass-through’, the GL.iNet is not a router on the IPv6 level. And it does not work with my two ISPs at all.