a-healthy-dns
A health-aware DNS server
4.3K
An authoritative UDP DNS server for one hosted zone that can serve standard static A records, health-checked A records, or a mix of both.
Health-checked entries are published only while their TCP check passes. Standard static entries are made publishable by updater refreshes without a health probe. When an owner name and its subtree are absent from the active zone view, queries return NXDOMAIN; existing empty non-terminals return NODATA.
This quick start keeps the container on a high port so local testing does not require binding host port 53. It intentionally mixes a standard static www record with a health-checked checked record; the verification query uses www so the first publishable answer does not depend on a reachable sample backend. Static entries are added by the first updater refresh, so rerun the query if it races container startup.
docker run -d \
--name a-healthy-dns \
-p 53053:53053/udp \
indisoluble/a-healthy-dns \
--port 53053 \
--hosted-zone example.local \
--zone-resolutions '{"www":["192.168.1.200"],"checked":{"ips":["192.168.1.100","192.168.1.101"],"health_port":8080}}' \
--ns '["ns1.dns.example.net"]'
Verify it is running:
dig @localhost -p 53053 example.local SOA
dig @localhost -p 53053 www.example.local A
docker logs --tail 50 a-healthy-dns
For Compose usage, port-53 deployment, DNSSEC key mounts, hardening, and production image pinning, use docs/docker.md. The untagged image above is for a local quick start; production deployments should pin a specific image tag.
git clone https://github.com/indisoluble/a-healthy-dns.git
cd a-healthy-dns
pip install .
a-healthy-dns \
--hosted-zone example.local \
--zone-resolutions '{"www":["192.168.1.200"],"checked":{"ips":["192.168.1.100","192.168.1.101"],"health_port":8080}}' \
--ns '["ns1.dns.example.net"]'
Requires Python 3.11+.
{"ips":[...],"health_port":...}) or standard static (["ip1","ip2"]).health_port.NXDOMAIN; existing empty non-terminals return NODATA.--alias-zones).--priv-key-path); full DNSSEC authoritative-server behavior is out of scope.Start with docs/table-of-contents.md for the full documentation index, proportional reading model, and canonical owner of each documentation topic.
Common next stops:
| Need | Document |
|---|---|
| Full documentation navigation | docs/table-of-contents.md |
| CLI flags and examples | docs/configuration-reference.md |
| Docker deployment | docs/docker.md |
| Runtime diagnosis | docs/troubleshooting.md |
| DNS wire behavior and RFC scope | docs/RFC-conformance.md |
Content type
Image
Digest
sha256:de1d2be1e…
Size
34.7 MB
Last updated
10 days ago
docker pull indisoluble/a-healthy-dns:0.1.56