Its not ONE service. Its TWO separate services and issues.
-
Your router DNS has an upstream external DNS. Normally it would also see downstream but we moved dnsmasq and thus it is no longer aware of it.
-
AGH ALSO has an upstream DOH provider and downstream clients. Using DI and rDNS AGH is aware and sees internal clients.
Firstly the loop.
Its bit complex but, essentially the problem boils down to this. By looping the router queries into AGH, you create a loop of DNS. Combined with that is AGH takes a while to load (it loads after dnsmasq does and also after NTP try's to update.) Thus doing this creates a broken loop that breaks things like NTP etc. The NTP bypass I explain will work if AGH is up, but due to AGH being loaded last in the boot sequence we are trying to talk to a service that has not started. And thus the breakage.
To prevent this we set the router DNS to point upstream separately to do unencrypted and unfiltered DNS to completely avoid AGH start up times. The router boots, gets DNS and NTP updates and is happy, then AGH service loads and becomes the upstream for your downstream clients (your LAN devices).
Secondly:
What you require is your Router to resolve your downstream client ips via hostnames.
This can be simply done by using etc/hosts
for fixed address but you want a dynamic method.
That we do via Domain Interception. This tells the router that local lookups or domainless lookups are to be passed to dnsmasq to resolve, instead of upstream to your external DNS (Which reply's NXDOMAIN as it doesn't know they exist)
Normally we only require DI for downstream clients and thus my instructions cover this. But you want to do DI for the router as well. So its an additional step so your router is aware the same lookup route as your downstream clients use. BUT and this is the important bit. You do NOT want to route your router lookup into AGH. This is because AGH doesn't hold the info. The local client info you require is in the redirected Dnsmasq. What we are doing here is a repeat of setting up AGH by telling the DNS service to refer (downstream) to the internal lookup provided by Dnsmasq, rather than the upstream external DNS.
So what you need for the router is DI is to tell it to search dnsmasq then go to the upstream. Same as AGH does.
(edit) OMFG... ok now I feel an idiot. In paring down dnsmasq so it only served local PTR requests I disabled the ability of the router to do its own internal lookups. I thought the setting just stopped it using /etc/resolve.conf
but it disables all PTR for the router.
uci set dhcp.@dnsmasq[0].noresolv="1"
This needs to be set to "0" and then it will work. I will fix the wiki and thread documentation for all this.
Have to admit thou. 6 months and no one pointed it out.

(edit2) The quick fix to sort this is do the following:
uci set dhcp.@dnsmasq[0].noresolv="0"
uci commit dhcp
/etc/init.d/dnsmasq restart
(edit3) Further research shows what I should have done is both disable dnsmasq but also enforce local lookups.
uci set dhcp.@dnsmasq[0].noresolv="1"
uci set dhcp.@dnsmasq[0].localuse="1"