DNS Propagation Checker
How the DNS Propagation Checker asks twelve public resolvers and the zone's own nameserver the same question, compares every answer with the authoritative one, what a different answer, an error or a SERVFAIL means, and how to make the next change reach everyone faster.
The tool page is tamperbox.dev/dns-propagation. It opens on harbor-supply.example, a sample domain on the reserved .example zone whose address changed forty minutes ago while three resolvers still hold the old one. This page is the long version: what “propagation” really is, how the answers are compared, the findings, and how to plan a change that reaches everyone quickly.
.example are answered in the browser. Ordinary lookup results are not persisted by this page. An explicit handoff temporarily stores its value in session storage for one-use transfer.What the tool answers
Section titled “What the tool answers”DNS changes do not travel anywhere. The zone’s nameservers answer with the new data at once; what lags are the caches of recursive resolvers, each of which keeps the old answer until its TTL runs out (RFC 1034 section 3.6: “The meaning of the TTL field is a time limit on how long an RR can be kept in a cache.”). “Propagation” is those caches expiring. The tool answers:
- What does the zone publish now? The authoritative answer, the source of truth.
- Which public resolvers already return it? Each one compared with the source.
- Which differ, and what TTLs do they report? The answer each one holds and the TTL left on it.
- Is something worse than caching going on? Errors, different statuses, or every resolver failing at once.
It cannot clear a cache, and it does not ask the resolver at a visitor’s own internet provider.
Inputs
Section titled “Inputs”A name
Section titled “A name”example.com, www.example.com. Pick the record type in the rail: A, AAAA, CNAME, MX, TXT or NS. The check runs when you stop typing, or on Enter; Check again repeats it. A pasted address or email address is reduced to its host or domain. Pasted records are not accepted: the point is to ask the resolvers.
Reading the result
Section titled “Reading the result”Verdict and chips
Section titled “Verdict and chips”“Propagated: all 12 resolvers return 192.0.2.10.” when every public answer matches the zone; “9 of 12 resolvers return 192.0.2.10.” when some differ, with the largest TTL among them; “NXDOMAIN everywhere:” when every resolver agrees the name does not exist; “Resolvers return SERVFAIL:” when the zone answers and no public resolver does; “Source unavailable:” when the zone’s own nameserver could not be asked. The chips count the agreeing resolvers, give the largest TTL still held, and count failures.
Where your input goes
Section titled “Where your input goes”The comparison is drawn in the browser; a name starts twelve public-resolver observations and one authoritative observation. Finding the authoritative zone and a reachable server can require additional SOA, NS and address queries, so thirteen observations are not a thirteen-packet limit.
Findings
Section titled “Findings”Failures and checks first, then the different answers, then the pass counting the matching resolvers.
Agreement
Section titled “Agreement”One bar split by answer: solid for the resolvers that match the zone, hatched for those holding a different answer, marked for failures. Under it, each distinct answer with how many resolvers return it.
Every resolver
Section titled “Every resolver”One row per server, the zone’s own first: its name, address and where it answers from; its answer (and error, if any); “Cached for”, the largest TTL among the compared records; a status badge (Source, Matches, Differs, the DNS status, Lookup failed, or Not compared); and its response time.
History and Heal it
Section titled “History and Heal it”History logs Break it and Heal it replacements. Revert restores the previous input; Reset input restores the first input in that sequence. Restoring a live name runs a fresh lookup. Typing starts a new history, and the log is not a monitoring record.
Take it further
Section titled “Take it further”The authoritative address to the ASN Lookup and to Reverse DNS, and, when every public resolver returns SERVFAIL while the source answers, the name to the DNSSEC Checker.
Method
Section titled “Method”1. The servers asked
Section titled “1. The servers asked”| Resolver | Address | Where |
|---|---|---|
| Cloudflare | 1.1.1.1 | Anycast |
| Google Public DNS | 8.8.8.8 | Anycast |
| Quad9 | 9.9.9.9 | Anycast, Switzerland |
| OpenDNS (Cisco) | 208.67.222.222 | Anycast, United States |
| AdGuard DNS | 94.140.14.14 | Anycast, Cyprus |
| Control D | 76.76.2.0 | Anycast, Canada |
| Mullvad DNS | 194.242.2.2 | Sweden |
| DNS.SB | 185.222.222.222 | Germany |
| NextDNS | 45.90.28.0 | Anycast |
| CleanBrowsing | 185.228.168.9 | Anycast, United States |
| AliDNS | 223.5.5.5 | China |
| Yandex DNS | 77.88.8.8 | Russia |
Each is asked over DNS over HTTPS with a wire-format POST (RFC 8484 section 4.1), with recursion desired and an EDNS record asking for DNSSEC data. Each response must match the question and must not be truncated, as on the DNS Lookup. The zone’s own nameserver is found and asked over TCP port 53 exactly as the DNS Lookup’s authoritative option does: the zone from its SOA, up to four NS hosts, up to four public addresses each, and only a reply with the AA flag counts. Every server has its own deadline (5 seconds for a public resolver, 14 for the authoritative search), so one slow server cannot discard the others’ answers; a server that fails is shown as “Lookup failed” with its reason.
2. One comparable value per server
Section titled “2. One comparable value per server”For each server the page builds one value: the records of the type asked, sorted and joined; or the status when it is not NOERROR; or “No record” when the answer is empty. When the zone answers with an alias, the comparison is of that CNAME, not of whatever the resolvers’ chains lead to, so an answer that differs only further down the chain is not counted as different. “Cached for” is the largest TTL among the compared records.
3. Matching
Section titled “3. Matching”A public answer matches when neither it nor the source failed, its status equals the source’s and its value equals the source’s. Every non-match is either:
- a different answer: status NOERROR, no error, a different value. Caching, geo-routing and provider filtering are possible causes;
- a failure: an error, or a different status (SERVFAIL, NXDOMAIN while the zone says NOERROR, and so on).
4. Findings and verdict
Section titled “4. Findings and verdict”| Situation | Finding | Severity | Verdict |
|---|---|---|---|
| The zone’s own nameserver failed | Authoritative answer unavailable | check | Source unavailable (check) |
| The zone answers, every public resolver returns SERVFAIL | Every public resolver returns SERVFAIL | fail | Resolvers return SERVFAIL (fail) |
| Some resolvers hold a different answer | N resolvers returned a different answer | info | N of M resolvers return value (check) |
| Some resolvers fail, not all | N resolvers returned an error or a different DNS status | check | N of M resolvers (check) |
| Resolvers match the zone | N of M resolvers match the authoritative answer | pass | Propagated, or “STATUS everywhere” |
A different answer is informational evidence of disagreement, not proof of an old cache. The largest observed TTL describes the returned records; it is not a convergence deadline. Ordinary cache expiry is defined by RFC 1035 section 3.2.1. Two things can stretch it: RFC 8767 section 4 lets a resolver keep using an expired record “as though it is unexpired” when it cannot refresh it, and authoritative servers that tailor answers to the resolver’s location (RFC 7871 section 1) give different answers that never converge.
5. Negative answers are cached too
Section titled “5. Negative answers are cached too”When the name did not exist before the change, resolvers that asked earlier cached the NXDOMAIN for the zone’s negative TTL (RFC 2308 section 5): “the minimum of the SOA.MINIMUM field and SOA’s TTL”. They show the old status until it runs out.
Standards and conformance
Section titled “Standards and conformance”| Specification | Sections used | How the tool applies it | Where it stops |
|---|---|---|---|
| RFC 1034 | 3.6 | Differences retain their observed TTL; their cause is not inferred | |
| RFC 1035 | 3.2.1, 4.2.2 | The TTL each resolver reports; the authoritative query over TCP | TTL definition amended by RFC 8767 |
| RFC 2181 | 8 | TTLs are read as unsigned seconds | |
| RFC 2308 | 5 | A cached NXDOMAIN is explained in the guide | Negative TTLs are not computed per resolver |
| RFC 8767 | 4 | Explains answers held past their TTL | Stale serving cannot be detected from outside |
| RFC 8484 | 4.1 | Every public resolver is asked over DoH | Plain DNS on port 53 to resolvers is not used |
Finding reference
Section titled “Finding reference”| Finding | Severity | Source | What it means | Fix |
|---|---|---|---|---|
| N of M resolvers match the authoritative answer | pass | RFC 1034 3.6 | Those caches hold the current answer | None |
| N resolvers returned a different answer | info | RFC 1035 3.2.1 | Those resolvers returned different data; caching, routing or filtering may explain it | Wait; lower the TTL before the next change |
| N resolvers returned an error or a different DNS status | check | Those resolvers cannot answer, or disagree on whether the name exists | Check again; persistent failure suggests filtering or an unreachable zone | |
| Every public resolver returns SERVFAIL | fail | RFC 4035 3.2.3 | Public resolution failed while the authoritative observation succeeded | Investigate DNSSEC and authoritative reachability |
| Authoritative answer unavailable | check | RFC 1035 4.2.2 | Public answers could not be compared with the source | Check again; make the nameservers answer over TCP |
Plan a change that reaches everyone fast
Section titled “Plan a change that reaches everyone fast”- A day before (or at least one old TTL before), lower the TTL of the records you will change to 300 seconds.
- Make the change.
- Repeat the comparison after the intended TTL interval. Investigate persistent differences rather than assuming every resolver must converge on the same answer.
- Keep the old server running until the longest original TTL has passed, for caches that do not honour the lowered value.
- Raise the TTL again.
Some resolvers still show the old answer
Section titled “Some resolvers still show the old answer”Read “Cached for” as the TTL observed in that response. Wait a reasonable interval and Check again; stale serving or intentional routing can outlast that TTL. A resolver that keeps a different answer long after is likely geo-routing or filtering rather than caching; compare with dig @<resolver address> www.example.com A.
Every resolver returns SERVFAIL
Section titled “Every resolver returns SERVFAIL”The authoritative observation succeeds while the public resolvers return SERVFAIL. A broken DNSSEC chain, such as a stale DS record, is one possible cause; this pattern alone does not diagnose it. Open the name in the DNSSEC Checker. dig +cd @1.1.1.1 example.com A (checking disabled) can help distinguish validation failure from other resolver errors; compare it with a normal query.
Source unavailable
Section titled “Source unavailable”The zone’s own nameservers did not answer over TCP port 53 within the deadline. Resolvers fall back to TCP for large answers, so nameservers should answer it; ask your provider. The public answers are still shown.
Break it cases
Section titled “Break it cases”| Case | What it loads | What it shows |
|---|---|---|
| An alias | www.harbor-supply.example, which is a CNAME |
The comparison made on the alias |
| Name does not exist | nohost. in front of your name |
“NXDOMAIN everywhere” |
| Broken DNSSEC | a sample zone whose DS matches no key | “Resolvers return SERVFAIL”, and the DNSSEC link |
Worked example
Section titled “Worked example”harbor-supply.example, type A. The zone’s own nameserver answers 203.0.113.80, the new address. Nine public resolvers return it too. OpenDNS, AliDNS and Yandex DNS still return 192.0.2.10, the address before the change, with 21, 37 and 50 minutes left on their caches. The verdict reads “9 of 12 resolvers return 203.0.113.80.” with “Largest observed TTL: 50 minutes 20 seconds.” Findings reports the three different answers as information and folds the nine matches. The example illustrates disagreement after a change. Its largest TTL is an observation, not a promise that every real resolver will converge within an hour. Press “Broken DNSSEC” to see the all-SERVFAIL pattern, which no amount of waiting fixes.
For agents
Section titled “For agents”The Tamperbox MCP server exposes dns_propagation with a name and a type (any type the DNS Lookup supports, not only the six chips here). It returns every resolver’s raw result; the comparison described on this page is the agent’s to make. Keep these warnings with any conclusion:
- A sample across supported resolvers, not proof that every cache worldwide has updated.
- Anycast resolvers answer from the site nearest to our server.
- A TTL is a maximum, and resolvers may serve stale data past it.
See Connect an MCP client and Code mode.
Limits
Section titled “Limits”- Thirteen answers from our server at one moment.
- Anycast: a visitor elsewhere may reach a different site of the same resolver.
- The visitor’s own internet provider’s resolver is not asked.
- TTLs are reported by each resolver and are a maximum, not a deadline.
- Sample names under
.exampleare answered in the browser.
References
Section titled “References”- RFC 1034: section 3.6, resource records and the TTL.
- RFC 1035: sections 3.2.1 (TTL), 4.2.2 (TCP). TTL definition amended by RFC 8767.
- RFC 2181: section 8, TTLs.
- RFC 2308: section 5, caching negative answers.
- RFC 4035: section 3.2.3, the AD bit and validation.
- RFC 7871: client subnet in DNS queries. Section 1.
- RFC 8484: DNS queries over HTTPS. Section 4.1.
- RFC 8767: serving stale data to improve DNS resiliency. Section 4.