Hidden-primary DNS for ~91 zones: CoreDNS + custom rfc2136 plugin for self-hosted ACME DNS-01. Source of truth for zones/, Corefile, deploy configs.
Find a file
Ryan Malloy cc33fcbcc8 caddy: add caddy-dns/rfc2136 + test-rfc2136 site -- self-hosted ACME flow
Wires Caddy as the ACME client side of our new self-hosted DNS-01
flow. Proves the design end-to-end: caddy-dns/rfc2136 -> our
CoreDNS rfc2136 plugin -> zone file write -> git auto-commit -> HE
AXFR -> LE validates -> cert issued.

Changes:
- caddy/Dockerfile: --with github.com/caddy-dns/rfc2136 added
  alongside the existing caddy-dns/vultr.
- caddy/Caddyfile: new test-rfc2136.supported.systems site that uses
  the new provider. server coredns:53 (docker internal), key from
  env, propagation_delay 60s + timeout 600s to accommodate HE pull.
- docker-compose.yml: ACME_TSIG_SECRET passed to the caddy container
  (the same secret CoreDNS verifies on the other side of the loop).

First cert issued in production: 2026-05-21 ~13:23 UTC. ~5.5 min
end-to-end from Caddy starting to cert in hand. Documented in
session notes; the cert sits unused in caddy-data/ until/unless
something publishes ports 80/443 for that hostname.
2026-05-21 13:27:05 -06:00
caddy caddy: add caddy-dns/rfc2136 + test-rfc2136 site -- self-hosted ACME flow 2026-05-21 13:27:05 -06:00
coredns prod-readiness: alpine runtime + uid:gid passthrough + git auto-commit working 2026-05-21 13:01:36 -06:00
scripts Retire prepare-zones.sh pipeline; zones/ is now the served form 2026-05-21 11:14:42 -06:00
secondary secondary: scaffold public CoreDNS secondary on ns.supported.systems 2026-05-20 18:40:11 -06:00
test test: sandboxed docker-compose stack for plugin smoke testing 2026-05-21 12:17:49 -06:00
zones supported.systems: ssh → 149.28.207.111; vpn + web-bmh-servicedesk.bmh → CNAME ssh 2026-05-21 11:51:01 -06:00
.env.example prod-readiness: alpine runtime + uid:gid passthrough + git auto-commit working 2026-05-21 13:01:36 -06:00
.env.local.example Phase 0 scaffolding: RFC 2136 plugin groundwork (inactive) 2026-05-20 18:20:43 -06:00
.gitignore .env now gitignored; .env.example is the committed template 2026-05-21 12:37:23 -06:00
CLAUDE.md secondary: scaffold public CoreDNS secondary on ns.supported.systems 2026-05-20 18:40:11 -06:00
Corefile deploy: enable rfc2136 plugin for all 84 production zones 2026-05-21 12:17:20 -06:00
docker-compose.yml caddy: add caddy-dns/rfc2136 + test-rfc2136 site -- self-hosted ACME flow 2026-05-21 13:27:05 -06:00
Makefile Retire prepare-zones.sh pipeline; zones/ is now the served form 2026-05-21 11:14:42 -06:00