Skip to main content

DNS Publication Failures

DNS Publication Failures, in the admin app's System menu, answers one question: is DNS healthy on this server? A row means the panel holds records that the name servers are not serving. An empty page says Every zone on this server is published.

Publication runs in the background workers, so a failure there surfaces nowhere else by itself. This is also the only place where a whole-server failure reads as one problem: a rotated API key is a row per zone, and a list ordered by last occurrence puts them together, where each zone's own page would tell a different account holder the same thing.

Zones Behind​

Above the failures, Zones Behind lists zones that hold changes the name servers were never given, and for which nothing failed anywhere the panel could record it: the zone, how many record sets are waiting, and the oldest change. A zone is listed once a record set has been pending for five minutes.

This is what a stopped worker, a worker holding a stale container after an upgrade, or a trigger dropped on the way to the outbox look like: the failure happens before anything can be logged, and every zone quietly falls behind. Check that the panel's workers (elpan-panel-worker@* and elpan-panel-async@*) are running. Once they are, the five-minute pass (dns publish-pending) catches up by itself, or dns republish converges everything at once.

A zone on the Manual update backend is never listed here: its outstanding rows are its owner's to-do list, not a fault, and they would sit on this page for ever. The owner sees them on their own zone page, in the vocabulary that fits (DNS backends).

The failures​

Each row is one problem between the panel and a backend, for as long as it is one:

ColumnWhat it holds
ZoneLinked to the zone's service. Deleted when the panel no longer has the zone and the backend is still serving it (a failed teardown).
KindWhose problem it is (below).
OperationPublishing records, Applying zone settings, Republishing the zone, Removing the zone or Reading zone state.
RecordThe record set the failure was about, as name type. Empty when the operation was about the whole zone, or a batch covered several names.
BackendThe backend's identifier: builtin on an ordinary install, else powerdns, cloudflare, desec.
MessageThe backend's own words, with any secret the configuration held redacted, and the exception class under it. A TypeError about a constructor argument is a stale worker, every time.
Since, OccurrencesA row coalesces every repetition of one problem, so "since 14:02, 340 times" is one row. That is also what tells a flapping backend from a permanently refused value.

A later success resolves the rows it is evidence about, and only those: publishing www says nothing about a LOC record at hq that has been refused for a week. Resolved rows leave the page and are kept 30 days; an open one stays however old, because a record refused six weeks ago is still refused. A zone holds at most 100 open problems; past that it has one problem, its backend.

The four kinds​

KindMeaningRetriedWho acts
Backend unavailableThe backend is down, slow, restarting, or answered 5xx. Also everything a driver did not classify.Yes; usually the retry works.You, when it lasts.
Rejected by the DNS serverThe backend refused this value and will refuse it again.No. The row is the durable record; dns republish is the repair once the value changes.The account holder, who typed the value.
Backend credentials refusedThe key or token in the zone's backend configuration is not the backend's.Yes: the next delivery opens a connection with whatever credential is on disk by then.You for the built-in backend; the account holder for a hosted one.
Backend misconfiguredThe install has no usable default backend at all. Every zone has it.Yes.You.

What the account holder sees​

Only a refusal shows the account holder the backend's message, on the record it is about and in the zone's Publication Issues tab. For every other kind their page says Publication is delayed. The server operator has been notified.; the endpoints and exception classes are yours alone.

A refusal that has stood for an hour is also mailed to the account holder, once per problem, by an hourly pass; a new problem is a new row and gets its own notice. The same pass emits a dns.publication_failed event for the server's Webhooks.

elpanctl dns error-log notify

runs that pass now. It sends real mail; there is no dry run, because the screen already answers who would be told.

Common causes​

You seeLikely causeWhat to do
Backend unavailable, builtin, a burst of occurrencesThe name server (the elpan-dns container) is down or restarting. For about six seconds after its API key is rewritten it refuses the new key too.Check that the name server is running; the deliveries are retried and the next one lands.
Backend credentials refused, builtinThe PowerDNS API key was rotated under long-running workers.Nothing: the built-in backend mints the key itself, and the retry that follows opens its connection with the fresh key.
Backend credentials refused, cloudflare or desecThe account holder's API token was revoked or changed at the provider.They re-enter it on the zone's Backend card; the panel verifies it against the provider before storing it.
Rejected by the DNS server, one recordA value the panel accepted and the backend renders differently or does not take. The message quotes the format it wanted.Fix or remove the record, then dns republish <zone>.
Zones Behind growing across every zone, no failuresThe workers are stopped, or hold a stale container after an upgrade.Restart elpan-panel-worker@* and elpan-panel-async@*, then dns republish.

Housekeeping​

elpanctl dns error-log prune

Drops resolved rows older than 30 days and trims any zone holding more than 100 open ones. A nightly task runs the same prune; the command exists so its effect can be observed by hand.

Where to look next

A record that looks wrong while nothing is waiting and nothing has failed means the panel believes it has published. dns inspect <zone> <name> <type> reads both sides and says whether they agree; see How DNS publication works.