On 04/02/2026 11.10, Giles Crawford wrote:
Believe it or not, I tried the 'zone transfer via dig' route,
scheduling via cron :-)

6 5 * * *      dig @X.X.X.X -y hmac-sha256:ioc2rpz.net-foo doh.ioc2rpz
AXFR > /etc/knot-resolver/doh.ioc2rpz

The files produced by dig don't follow the masterfile format, however,
so neither kresd nor named would load them without modification.

YMMV with kdig; haven't tried it as yet.

That's surprising me.  I certainly did succeed in the past with kdig and knot-resolver with some zones (relatively simple cases, no authentication).


Given current constraints, I found that it's more elegant to take a
zone transfer using an authoritative server (speaking of which, I must
try the Knot one), which can then also better keep the zone fresh.
Kresd's excellent watch functionality for RPZs makes this possible.

Sure, I do consider using auth servers among the best approaches here (even though it's not trivial to set up all).


For the RPZ stack logic to make sense in a top-down approach, guessing
that we should make the decision / exist the stack on the first match,
so if passthru matches in tier 1 and there's an NXDOMAIN match in tier
2, the traffic gets passed.

I wasn't too keen on adding (many) tiers for efficiency reasons.  So in the currently released 6.x versions all local-data rules (+defaults) get merged into a single tier, so a single search can search it all.


The issue is that kresd does not currently recognise "rpz-passthru" in
the RPZ zone files, according to logged errors.

Yes.  We do have this feature inside one public branch (jezek-test, which gets used in a particular project now).  The current semantics in there is that if the QNAME in a client's request falls into a subtree of any names in the allow-list (expressed by rpz-passthru), this whole request's processing skips any blocking rules.  It's a compromise, nothing perfect, and it's unfortunately also far from the rpz-passthru definition in the RPZ draft.


--Vladimir