What a DNS lookup actually shows you
The domain name system is the layer that turns names people can remember into the addresses machines actually use. It was described in 1987 in RFC 1034 and 1035, and the design has held up so well that almost everything added since — mail routing, certificate authorisation, mail authentication, service discovery — was bolted on as new record types rather than a new system.
A lookup asks for the records attached to a name. This page asks for the common types in one go, which is the useful way to do it: nearly every real problem shows up as a disagreement between record types rather than inside one. Mail failing while the website is fine is an MX question. A certificate that will not renew is a CAA question. A site that works for some people and not others is usually an A-versus-AAAA question.
One caveat before you read anything else: what you see here is what our resolver was told, just now. If a record was changed recently, resolvers around the world will still be serving the old answer until their cached copy expires. That is not us being out of date — it is how the system is supposed to work, and the section on TTL explains how to predict it.
The record types, and what each one is for
AandAAAA- The addresses a name points to:
Afor IPv4,AAAAfor IPv6. Several of each is normal and means either simple load sharing or a delivery network. If a name has both and something is unreachable over one of them, you get the classic "works for me" split — see the IPv6 test for why the browser's choice matters. CNAME- An alias: "this name is really that name, go and ask again". The rule that catches everyone is that a name with a CNAME can have no other records, which is why a CNAME is not allowed at the top of a domain — you cannot alias
example.comitself, onlywww.example.com. Providers work around this with something usually called ALIAS or flattening, which resolves the target for you and answers with plain addresses. MX- Where mail for the domain goes. Each entry carries a preference number and the lower number wins — a common and expensive misreading. A domain that sends no mail at all should say so explicitly with a single "null" entry, a lone dot at priority zero, which tells senders to stop rather than to keep retrying for days.
NS- The authoritative servers for the zone. Compare these with what the registry publishes in the domain's registry record: when the two disagree, part of the world reaches one set of servers and part reaches another, and the symptoms are maddeningly intermittent.
TXT- Free-form text, in practice the place where mail policy lives. SPF sits here at the top of the domain, DKIM keys under a selector name, and DMARC under
_dmarc. Also where domain-ownership verification strings from every service you have ever signed up to accumulate. SOA- The zone's own metadata: which server is primary, the serial number that secondaries watch to know a change happened, the refresh and retry timers, and the negative-caching time that decides how long "this name does not exist" is remembered.
CAA- Which certificate authorities are permitted to issue for the domain. Since September 2017 every public CA is required to check it before issuing, which makes this the one DNS record that can block a certificate outright.
SRV- Service discovery: which host and port run a given service. Used heavily by chat, voice and directory protocols, and by Microsoft environments in particular.
TTL, and why "DNS propagation" is the wrong phrase
Every record carries a time-to-live in seconds. It is an instruction to caches: keep this answer for this long before asking again. Nothing is pushed anywhere. When people say a change is "propagating", what is actually happening is that resolvers around the world are still holding an answer they were given permission to hold, and will fetch the new one when it expires.
This makes the delay predictable rather than mysterious, and it makes the standard procedure obvious: lower the TTL before you make a change, not after. Drop it to a few minutes, wait for the old, long TTL to expire everywhere, then make the change, then raise the TTL again once the new value has settled. Skip that first step and you are committed to waiting out whatever value was published — which for a comfortable 24-hour TTL means a day of two different answers circulating.
Negative answers cache too. If somebody looks up a name before it exists, the "does not exist" answer is remembered for the period set in the SOA record, so creating the name does not immediately fix it for that person. This is behind a good share of "I added the record and it still does not work" reports.
Mail records: the part that breaks most often
If mail is the problem, four records decide almost everything, and they are checked in this order by the receiving system.
- MX — where to deliver. No MX at all means senders fall back to the domain's A record, which is usually a web server and usually not what anyone intended.
- SPF, a TXT record starting
v=spf1— which servers may send on the domain's behalf. There must be exactly one; two SPF records is a permanent error, not a merge. It also has a hard limit of ten DNS lookups during evaluation, and stacking severalinclude:statements from different mail vendors quietly blows past it. Everything after that fails regardless of how correct it looks. - DKIM — the public key that verifies the signature on outgoing mail, published under a selector chosen by the sending system.
- DMARC, a TXT record at
_dmarc— what a receiver should do when SPF and DKIM disagree with the visible From address, and where to send reports about it. Publishing it with a policy ofnoneis the correct first move: it changes nothing about delivery and starts the reports that tell you who is sending as you.
If mail is being rejected rather than misrouted, the records may be fine and the sending address may be the problem instead — that is a question for the blocklist check and for the reverse name on the address.
Failures, and how to tell them apart
- The name does not exist (NXDOMAIN)
- Authoritative and definite: no such name in the zone. Check spelling, then check whether you created the record in the zone you think you did.
- The name exists but has no records of that type
- Different thing entirely, and it is the normal answer when you ask for AAAA on a name that only has IPv4. Not an error.
- Server failure (SERVFAIL)
- The resolver could not get a usable answer. Two ordinary causes: the authoritative servers are unreachable, or DNSSEC validation failed — an expired signature takes a zone off the internet completely for anyone validating, while continuing to work perfectly for anyone who does not.
- A timeout with no answer at all
- Often a network or firewall problem rather than a DNS one. Large answers can exceed what fits in a single UDP packet and require a fall back to TCP, and equipment that blocks DNS over TCP produces failures that look random and affect only some domains.
Two checks worth doing every time
Do the NS records match the registry? The delegation at the registry is what the rest of the world follows; the NS records inside the zone are what the zone claims about itself. Old nameservers left behind after a migration keep answering with old data, and because resolvers pick between them, the result is that a site appears to work for half your colleagues.
Do the addresses point where you think? Look up the A and AAAA records, then check who runs those addresses. A record still pointing at a hosting provider you left two years ago is a common and quietly dangerous finding — the name is delegated to infrastructure you no longer control, and anyone who takes over that address inherits the name.