Apologies for not using the template, but I need some high-level advice on how to handle the DNS architecture of my ecosystem.
For many years, I have used a Bind9 recursive resolver (which is doing split-brain DNS) and it has worked well. My clients talk directly to bind on port 53 and there are multiple zones (work, personal, and kids) with different upstreams.
Much later in the evolution of the ecosystem I deployed pihole as an upstream (on port 5353) primarily for ad blocking. I looked into dnsmasq to take over the functions of bind, but it seemed that was not what I needed to upend my existing deeply configured ecosystem. For the work and personal bind zones, which resolve different internal addresses hence the different zones, they upstream to pihole which happily blocks a ton of content. If my wife got frustrated because something got blocked, I had to temporarily disable blocking for the whole house, as pihole saw ALL requests coming from the bind instance and not the client (remember this for later). The kids get openDNS family.
This has been stable for a long time; however my needs are changing, and due to several factors (not the least of which is requiring DNSSEC for SSHFP) I am considering putting pihole in front, have all my clients ultimately get the same set of internal resolution and the same upstream DNS, and then remove recursive resolving from bind (a requirement for it to be authoritative per my understanding) and having that be the priority 1 upstream for pihole. This would allow me to do different levels of blocking per client/subnet, and would make my DNSSEC issue less tricky to troubleshoot.
I see a lot of pros/cons to doing this either way. As I understand it, per this post several years ago, pihole can't specify different upstreams per group as the cache is common: Allow different DNS for each group I can't tell if that's still the case. Additionally, if my bind server becomes a fully authoritative (as I understand it, recursion has to be disabled for it to return an ad flag as a child domain where the parent domain has a matching DS record) I need for it to be the first DNS resolver for pihole, then my upstream of choice as the second. I don't see if I can set that priority via the UI, meaning what I'm hoping to do is impossible, unless specifying custom DNS in order (1, 2) works.
I know this is an over complicated setup, but at this point I'm mostly committed to the bind setup and want to figure out how to integrate pihole into it, however to disable recursion to make it return the ad flag seems to require me to re architect how all my clients will get DNS. I appreciate any ideas.