No description
  • Go 97.2%
  • Makefile 1.7%
  • Dockerfile 1.1%
Find a file
2026-04-30 08:35:11 +07:00
checker checker: add standalone interactive form and test target 2026-04-26 17:19:32 +07:00
plugin checker: harden HTTP client, cap response size, drop dead legacy rule 2026-04-26 17:12:13 +07:00
.gitignore checker: harden HTTP client, cap response size, drop dead legacy rule 2026-04-26 17:12:13 +07:00
Dockerfile docker: add HEALTHCHECK probing /health 2026-04-26 16:41:08 +07:00
go.mod docker: add HEALTHCHECK probing /health 2026-04-26 16:41:08 +07:00
go.sum docker: add HEALTHCHECK probing /health 2026-04-26 16:41:08 +07:00
LICENSE Initial commit 2026-04-08 03:27:27 +07:00
main.go Migrate to checker-sdk-go v1.3.0 with new server subpackage 2026-04-26 16:41:03 +07:00
Makefile checker: add standalone interactive form and test target 2026-04-26 17:19:32 +07:00
NOTICE Initial commit 2026-04-08 03:27:27 +07:00
README.md Update rules 2026-04-30 08:35:11 +07:00

checker-zonemaster

Zonemaster DNS validation checker for happyDomain.

Runs the Zonemaster test suite against a domain via its public JSON-RPC API and stores the full results as an observation. The checker also produces a rich HTML report grouped by Zonemaster module and severity.

Usage

Standalone HTTP server

make
./checker-zonemaster -listen :8080

The server exposes the standard happyDomain external checker endpoints (/health, /definition, /collect, /evaluate, /html-report).

Docker

make docker
docker run -p 8080:8080 happydomain/checker-zonemaster

happyDomain plugin

make plugin
# produces checker-zonemaster.so, loadable by happyDomain as a Go plugin

The plugin exposes a NewCheckerPlugin symbol returning the checker definition and observation provider, which happyDomain registers in its global registries at load time.

Versioning

The binary, plugin, and Docker image embed a version string overridable at build time:

make CHECKER_VERSION=1.2.3
make plugin CHECKER_VERSION=1.2.3
make docker CHECKER_VERSION=1.2.3

happyDomain remote endpoint

Set the endpoint admin option for the zonemaster checker to the URL of the running checker-zonemaster server (e.g., http://checker-zonemaster:8080). happyDomain will delegate observation collection to this endpoint.

Deployment

The /collect endpoint has no built-in authentication and will issue JSON-RPC calls to whatever Zonemaster API URL is configured via the zonemasterAPIURL admin option (defaulting to the official public API at https://zonemaster.net/api). Operators should point this option only at trusted Zonemaster instances; pointing it at an untrusted host turns the checker into an SSRF vector, since responses are parsed and surfaced back to the caller. The checker itself is meant to run on a trusted network, reachable only by the happyDomain instance that drives it. Restrict access via a reverse proxy with authentication, a network ACL, or by binding the listener to a private interface; do not expose it directly to the public internet.

Options

Scope Id Description
Run domainName Domain name to test (auto-filled from the domain)
Run profile Zonemaster profile name (default: default)
User language Result language (en, fr, de, …)
Admin zonemasterAPIURL Zonemaster JSON-RPC endpoint (default: official API)

Rules

Each rule wraps one Zonemaster test module and emits a <rule>.summary state plus one <rule>.<level> state per WARNING-or-worse Zonemaster message, so downstream consumers can match on stable codes.

Code Description Severity
zonemaster.dnssec DNSSEC tests (signatures, NSEC/NSEC3, DS/DNSKEY coherence). CRITICAL
zonemaster.delegation Delegation tests (parent/child NS agreement, glue, referrals). CRITICAL
zonemaster.consistency Consistency tests (SOA serial, NS set, zone content across servers). CRITICAL
zonemaster.connectivity Connectivity tests (UDP/TCP reachability of authoritative servers, AS diversity). CRITICAL
zonemaster.nameserver Nameserver tests (server behaviour, EDNS, unknown RR handling). CRITICAL
zonemaster.syntax Syntax tests (domain name syntax, hostname legality). CRITICAL

License

MIT (see LICENSE). Third-party attributions in NOTICE.