mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 02:54:26 +00:00
The CI zone served A and AAAA for INFINITO_DOMAIN and let every other type fall through to the public resolvers, which return NXDOMAIN for the reserved .test TLD. Per RFC 2308 that denial covers the whole name, not the queried type, so any caching resolver in front of CoreDNS applies it to the A record the deployment depends on. Without such a cache nobody noticed: Mastodon's EmailMxValidator asks MX, takes the NXDOMAIN, then asks A anyway and gets the address. On a Tor node svc-net-tor puts dnsmasq in front, the denial is cached, and tootctl accounts create ends on 'Failure/Error: email unreachable'. It cost Fediwall#0 and Fediwall#2 in run 34653542922 and Fediwall#2 in run 34653754175, all three compose plus tor; the same two jobs passed in run 34614940508 as compose without tor, same command, same administrator@infinito.test, rc 0. A template with no answer returns NOERROR with an empty answer section and the SOA in authority, so the zone denies a type without denying the name. It sits after the A and AAAA templates, which would otherwise have their names answered NODATA, and before forward, so no type escapes. Measured against 172.30.0.53 in the running stack: infinito.test MX went from NXDOMAIN with an authority record to NOERROR with zero answers and the aa flag, infinito.test A and auth.infinito.test A still return 172.30.0.10, and deb.debian.org still resolves through the forward. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CoreDNS Sidecar Config 🛰️
Static configuration for the coredns service in compose.yml.
The sidecar resolves the dev/CI stack's internal hostnames so the infinito runner can reach its own applications without hitting an external resolver.
Scope 📋
- This directory MUST contain only files consumed by the
corednscompose service. - The
Corefile.tmplMUST be the source of truth. It is rendered toCorefileby coredns.py, which substitutes its${VAR}placeholders in-process, using values from.env(generated from default.env, overridable through the CLI's environment). - The rendered
Corefileis build artefact and MUST stay in.gitignore.
Files 📄
Corefile.tmpl:${VAR}template processed at stack start.Corefile: rendered output, bind-mounted read-only into thecorednscontainer at/Corefile.