zoneblick
Self-hosted DNS zone watchdog

Know the moment your DNS drifts.

zoneblick asks every authoritative nameserver for every record you care about, checks the answers, and keeps a history. When something changes, breaks, or is left dangling, you hear about it first.

Run 412 → 413

Three records changed in example.org. One nameserver has not caught up.

NameserverSOA serial
ns1.example.org2026111302
ns2.example.org2026111302
ns3.example.net2026111302
ns4.example.net2026111301
01

What DNS drift is.

DNS drift is the gap between what you believe your DNS says and what your nameservers answer today.

Records get added, changed and abandoned over months and years. Each change is small and most are harmless. DNS has no way to tell you when one of them is a mistake, so the gap grows until something breaks or someone else finds it.

How it happens

A project ends and its record stays
The cloud app, bucket or trial account is deleted. The CNAME that points to it is forgotten.
Someone makes a quick fix by hand
A record is edited in the provider's dashboard during an incident and never written down or reverted.
Nameservers fall out of sync
A secondary misses a zone transfer and keeps serving an older copy of the zone.
The delegation goes stale
You move DNS hosts, but the registrar still lists a nameserver from the old one.
Something expires
DNSSEC signatures run out, or a domain that one of your records points to lapses.
Vendors pile up
Each new mail service adds an SPF include, until the record passes the ten-lookup limit.

What it costs

Subdomain takeover
A record that points at a resource you released lets whoever claims that resource serve pages, set cookies or receive mail under your name.
Outages only some people see
When one nameserver is stale, some visitors get the old answer and others the new one. The problem comes and goes, which makes it hard to trace.
Mail that quietly fails
A broken SPF record or a missing DMARC policy means your mail is rejected, or mail forged in your name gets through.
A zone that goes dark
Once DNSSEC signatures expire, validating resolvers refuse every answer for the whole zone.
Weaker certificate control
If a CAA record disappears, any certificate authority may issue for your domain again.

How often to look.

Drift is silent, and its cost grows with the time it goes unnoticed. A dangling record can be claimed from the moment the resource behind it is released.

  • After every change

    Confirm the edit reached every nameserver and that nothing else moved with it.

  • Hourly, if you can

    Finds takeover exposure, stale secondaries and unplanned edits within the hour. A run over a few hundred names is a few thousand small queries.

  • Daily, at the least

    Enough for the slow problems: signatures nearing expiry, SPF creeping toward its limit, a policy record that went missing.

An occasional check finds the slow rot. A frequent check catches an incident while it is still small.

02

Five kinds of trouble, one pass.

Each check has a stable ID, a severity, and the evidence behind it. No recursive resolver sits in the middle, so you see what the authoritative servers really say.

Light runHourly. Twenty-six checks across the whole fleet.

DEL

Delegation

Does the parent zone agree with yours?

  • Parent and child NS sets
  • Lame delegations
  • Glue mismatches
CON

Consistency

Do all your nameservers say the same thing?

  • SOA serial sync
  • Per-server record diffs
  • UDP, TCP, IPv4, IPv6
SEC

DNSSEC

Is the chain of trust intact, and for how long?

  • DS and DNSKEY match
  • Signature expiry countdown
  • Weak algorithms
POL

Mail and policy

Are the records that guard mail and certificates sound?

  • SPF lookup limit
  • DMARC and MTA-STS
  • CAA presence
TKO

Takeover

Does anything point at a resource you no longer own?

  • Dangling CNAME, MX, NS
  • Unclaimed cloud hosts
  • Expired target domains

Deep checks, once a day.

Fourteen more checks that take extra queries per nameserver. Each one was chosen because its result changes over time, so the history shows when a zone went wrong as well as that it is wrong.

Deep runDaily by default, or on demand for a single zone.

SEC 06–10

DNSSEC, deeper

Does signing hold up through rollovers and re-signing?

  • Denial-of-existence proofs
  • NSEC3 parameters
  • Key rollover state
  • CDS and CDNSKEY sync
  • Algorithm completeness
NSB

Server behaviour

Does each nameserver still behave after its last upgrade?

  • EDNS compliance
  • Open zone transfers
  • Recursion left on
  • Query-name case handling
NET

Network

Would one network failure take every nameserver with it?

  • All servers in one network
  • Private or reserved addresses
SOA

SOA sanity

Is the zone's own housekeeping record sound?

  • Timer ranges
  • Primary reachable
  • Contact mailbox accepts mail

After v1The deep checks are planned for the release after the first one. A diagram of each zone's DNSSEC chain, with before-and-after comparison across runs, ships with the first web UI.

03

How a run works.

The same five steps on every schedule tick, or once from the command line.

  1. 1Walk from the root

    Follow referrals down to your zone and record the whole delegation path, glue included.

  2. 2Ask every server

    Query each authoritative nameserver directly for each name and type, over UDP and TCP, IPv4 and IPv6.

  3. 3Check

    Run the catalog against what came back: the light checks on every run, the deep checks once a day. Checks are pure rules over stored answers, so results are repeatable.

  4. 4Snapshot

    Store the run in SQLite. Unchanged record sets are deduplicated, so years of history stay small.

  5. 5Diff and alert

    Compare with the last run and your pinned baseline. Rotating CDN pools are recognised and kept quiet. You get one alert when a finding opens and one when it closes.

04

How it differs from existing tools.

Good tools exist for each part of this job. None of the open-source ones covers zone health, takeover exposure and drift history together while keeping your zone data on your own server.

ToolCore zone healthDeep analysisTakeover exposureDrift historySelf-hosted
Zonemaster, DNSVizYesFullNoNo, one shotYes
BadDNS, dnsReaperNoNoDeepNoYes
Hosted DNS monitorsPartialVariesPartialYesNo
zoneblick26 checks, hourly14 selected checks, dailyImported signaturesEvery runOne binary

The gaps it fills.

Six things the existing tools leave to you, and what zoneblick does about each.

  • History across a whole fleet

    TodayZonemaster and DNSViz analyse one zone when you ask. They are not built to watch dozens of zones on a schedule and alert you when one changes.

    With zoneblickEvery zone is checked on a schedule. Each run is stored and compared with the last one, so you can see what changed and when.

  • Health and exposure in one pass

    TodayZone-health tools do not look for takeover risk, and takeover scanners do not check delegation, serial sync or DNSSEC. You run two tools and reconcile two reports.

    With zoneblickBoth sets of checks run over the same answers and land in one list of findings, with one severity scale and one history.

  • Monitoring you host yourself

    TodayMost services that track DNS changes over time are hosted. Your record inventory, including the list of dangling records, sits on someone else's server.

    With zoneblickOne binary on your own server. The data is a single SQLite file that you own and can back up, export or delete.

  • Every nameserver, every transport

    TodayMany monitors ask a public resolver, or a single nameserver. A stale secondary, or a server that fails only over TCP or IPv6, goes unseen.

    With zoneblickEach authoritative server is queried directly over UDP and TCP, IPv4 and IPv6, and the answers are compared server by server.

  • What the internet sees

    TodayConfig tools such as dnscontrol and OctoDNS confirm that your provider matches your config file. They do not see the parent's delegation, a lagging secondary or expiring signatures.

    With zoneblickResolution starts at the root and follows the real delegation, so the result is what a resolver would receive.

  • Alerts you can leave on

    TodayA plain record diff fires every time a CDN or round-robin pool rotates its addresses, and people soon mute it.

    With zoneblickNames that rotate are recognised and tracked as pools. You are alerted when a finding opens and when it closes.

What it does not replace. The deep checks borrow a selected part of what Zonemaster and DNSViz do. Those tools still go further on a single zone, so findings link straight to them when you need a closer look. The takeover checks in zoneblick use the signature sets that the BadDNS, dnsReaper and Nuclei communities maintain.

05

Run it on your own server.

One binary, one config file, one SQLite file. There is no hosted version and no account to create.

Try a zone

No config and no database. Exit code follows severity, so it works in CI.

zoneblick check example.org

Run the daemon

Scheduler, web UI and alerts. Put it behind your reverse proxy.

# /etc/zoneblick/zoneblick.toml
[[zone]]
name  = "example.org"
seeds = ["www", "api", "mail"]

zoneblick serve

Or use Docker

One image, one volume for data, one mounted config file.

docker run -d \
  -v ./data:/data \
  -v ./zoneblick.toml:/etc/zoneblick.toml \
  -p 127.0.0.1:8053:8053 \
  zoneblick serve

In designzoneblick is not released yet. The commands above show the planned interface. The first milestone is the one-shot check command.