Skip to content

Propagation

Propagation

A propagation check answers "has my DNS change taken effect yet?" by comparing the authoritative record set for a host against what a panel of public recursive resolvers currently return. If they all agree, the change has propagated; if the authoritative answer is right but some recursives still serve the old set, it is still rolling out; if the authoritative answer itself is missing, nothing can propagate yet.

Usage

use Cbox\Dns\Dns;
use Cbox\Dns\Enums\RecordType;
use Cbox\Dns\Propagation\PropagationStatus;

$dns = new Dns;

$report = $dns->checkPropagation('www.example.com', RecordType::A, 'example.com');

$report->status;               // PropagationStatus enum
$report->authoritativeValues;  // list<string> — the source of truth
$report->results;              // list<ResolverResult> — each public resolver's view
$report->stale();              // the results that don't yet agree

The status

PropagationStatus Meaning
Propagated every polled resolver agrees with the authoritative set
Pending the authoritative answer is correct, but some recursives are stale
Misconfigured the authoritative answer itself is missing or empty

Each ResolverResult carries the nameserver queried, the values it returned, whether it agrees with the authoritative set, and an optional provider label. Comparison is order-independent (de-duplicated and sorted).

The default panel vs. the named registry

The facade's checkPropagation() polls a lean panel of six well-known public resolver IPs (Google, Cloudflare, Quad9, OpenDNS). For a wider, labelled check across the full 15-provider registry, construct the checker directly:

use Cbox\Dns\Propagation\PropagationChecker;

$checker = new PropagationChecker($dns->resolver(), $dns->authoritative());

$report = $checker->checkAcrossProviders('www.example.com', RecordType::A, 'example.com');
// results are labelled: "Google Public DNS", "Cloudflare", "Quad9", ...

See the propagation providers reference for the full registry.

Honest scope — what this does NOT measure

Polling many public resolvers from a single host is a cache-diversity signal: it shows whether independent recursive operators have each refreshed their cache for a name. It is not true global geographic propagation.

Every major provider in the registry (Google, Cloudflare, Quad9, OpenDNS, …) is anycast, so from one host you always reach the nearest point of presence — you sample operators, not locations. The region label on a provider describes the operator, not where the lookup was answered.

The reliable propagation signal is therefore the authoritative-vs-recursive diff this report computes, not geographic coverage. Geo-distributed vantage points (regional DoH probes exiting from multiple regions) are a documented roadmap item — not a claim this package makes.