Which DNS resolver should I use?
How to pick a DNS resolver, with the dig that shows each difference.
What a resolver does#
Every name your device looks up goes to one server, the resolver. It finds the answer by walking the delegation from the root (anatomy of a query), caches it, and hands it back. Unless you set one, your device uses whatever the network gave it: DHCP option 6 (RFC 2132 section 3.8), or the RDNSS option for IPv6 (RFC 8106 section 5.1). At home that is usually the router, which by default uses your provider's resolver (Apple).
Asks one resolver for one name and shows which server answered and how long it took.
dig -4 @9.9.9.9 example.com AGO NOERROR, the SERVER line names the resolver you asked, and Query time is that resolver as seen from where you sit
NO GO a timeout. Interception does not show in this answer; step 1 of test your own path, linked below, shows it
To see which resolver you use today, and whether anything rewrites its answers, run the two queries in test your own path.
What changes when you switch#
Most answers come back the same from any working resolver. Four things differ, and each one shows up in a dig.
Filtering. Some resolvers answer a blocked name with NXDOMAIN or 0.0.0.0 instead of its address, usually with Extended DNS Error 17, Filtered (RFC 8914). Same operator, two addresses, two answers:
Asks Quad9's filtering address for the test name Quad9 documents for its block list.
dig -4 @9.9.9.9 isitblocked.org AGO NXDOMAIN with EDE 17 (Filtered): the filter is on. Quad9 answers a blocked name without the ra flag, so dig prints a recursion warning
NO GO an address: this resolver is not filtering that name
The same name at Quad9's unfiltered address.
dig -4 @9.9.9.10 isitblocked.org AGO NOERROR with an address: no filter here
NO GO NXDOMAIN: you are not on the address you think you are
DNSSEC validation. A validating resolver checks the signatures and refuses a forged or broken answer (RFC 4035 section 4.3). The status board reads each listed resolver's AD flag on a signed name, live.
Asks a validating resolver for a name whose DNSSEC chain is broken on purpose.
dig -4 @1.1.1.1 dnssec-failed.org AGO SERVFAIL, with EDE 9: the resolver checked the signatures and refused the answer
NO GO an address: this resolver did not validate
Who sees your lookups. A lookup on port 53 is plain text: the resolver operator sees it, and so can anyone on the path (RFC 9076). Changing the resolver's address changes who runs it; it hides nothing from your provider, and some networks answer port 53 themselves wherever you point it (step 1 of test your own path shows that). Only an encrypted setting on the device hides the lookup on the way: DNS over TLS (RFC 7858) or DNS over HTTPS (RFC 8484). Your provider still sees the addresses you connect to and, for most sites, the name in the TLS handshake (RFC 8744 section 1). What the operator keeps is in its own policy, linked in the table below.
Speed. The Query time line above is that resolver from where you sat. The latency on the status board is measured from our probes and the edge, not from your house; your own number is the dig you run yourself.
Is it worth switching?#
Keep the default if your lookups work, nobody on the network needs filtering, and you don't mind your provider seeing them.
Switch if one of these is true, and check it with the dig beside it:
| You want | Pick | Check it |
|---|---|---|
| malware and phishing blocked | a security address (Quad9 9.9.9.9, Cloudflare 1.1.1.2) | dig @9.9.9.9 isitblocked.org answers NXDOMAIN |
| adult sites blocked for kids | a family address (Cloudflare 1.1.1.3, OpenDNS FamilyShield, AdGuard Family) | dig @1.1.1.3 nudity.testcategory.com answers 0.0.0.0 |
| ads and trackers blocked | AdGuard DNS, or a Control D ads address | the operator's own check, linked below |
| your provider not reading your lookups | any of them, set as encrypted DNS on the device | the operator's DoH or DoT name below, entered in your device's encrypted DNS setting |
| DNSSEC checked for you | a resolver whose AD flag on the status board reads validated | dig @RESOLVER dnssec-failed.org answers SERVFAIL |
Cloudflare and its filtered addresses#
Cloudflare runs three addresses, one per filter (Cloudflare):
| Address | Filters | DoH | DoT name |
|---|---|---|---|
| 1.1.1.1, 1.0.0.1 | nothing | https://cloudflare-dns.com/dns-query | one.one.one.one |
| 1.1.1.2, 1.0.0.2 | malware | https://security.cloudflare-dns.com/dns-query | security.cloudflare-dns.com |
| 1.1.1.3, 1.0.0.3 | malware and adult content | https://family.cloudflare-dns.com/dns-query | family.cloudflare-dns.com |
Asks Cloudflare's family address (1.1.1.3) for the test name Cloudflare documents.
dig -4 @1.1.1.3 nudity.testcategory.com AGO 0.0.0.0 with EDE 17 (Filtered): the family filter is on
NO GO real addresses: you are on unfiltered 1.1.1.1, or something rewrote the answer
The same name at plain 1.1.1.1.
dig -4 @1.1.1.1 nudity.testcategory.com AGO real addresses: no filter here
NO GO 0.0.0.0: you are on a filtered address
The isitdns recommendation#
If your device or router takes more than one resolver, give it two, from two different operators, both encrypted. One operator's outage then does not take your lookups down with it.
Two limits, from the platforms' own documents:
- Give both the same kind of filtering. A resolver with a filter beside one without lets a blocked name through whenever the second one answers; Quad9: "We do not recommend mixing secured and unsecured service IP addresses in the same configuration" (Quad9).
- Some devices hold one encrypted resolver. Android's Private DNS takes one hostname (Android) and an Apple encrypted DNS profile names one server (Apple); there, pick one. Windows asks its list in order and moves on after a timeout (Microsoft).
| Operator | Addresses (filter, in the operator's words) | DoH (first address) | Policy |
|---|---|---|---|
| Quad9 | 9.9.9.9 (malware), 9.9.9.10 (none) | https://dns.quad9.net/dns-query | privacy policy |
| Cloudflare | 1.1.1.1 (none), 1.1.1.2 (malware), 1.1.1.3 (family) | table above | privacy |
| 8.8.8.8, 8.8.4.4 | https://dns.google/dns-query | privacy | |
| AdGuard DNS | 94.140.14.14 (ads, trackers), 94.140.14.15 (family), 94.140.14.140 (none) | https://dns.adguard-dns.com/dns-query | privacy |
| OpenDNS | 208.67.222.222 (basic), 208.67.222.123 (FamilyShield) | https://dns.opendns.com/dns-query | Cisco |
| CleanBrowsing | 185.228.168.9 (security), 185.228.168.168 (family) | https://doh.cleanbrowsing.org/doh/security-filter/ | privacy |
| Control D | 76.76.2.0 (none), 76.76.2.2 (ads and tracking), 76.76.2.4 (family) | https://freedns.controld.com/p0 | free DNS |
| DNS4EU | 86.54.11.1 (protective), 86.54.11.100 (none) | https://protective.joindns4.eu/dns-query | policy |
On 2026-10-25 CleanBrowsing's security and family addresses, asked over port 53 and over DoH, answered dnssec-failed.org with an address where 1.1.1.1 answered SERVFAIL: on that date they did not check DNSSEC.
The status board reads these operators live (none of Control D's addresses above; of DNS4EU, only 86.54.11.1): up or down, latency from our probes, and the AD flag.
See also#
- How to check a resolver
- Resolver comparison: one name asked of several resolvers side by side
- DoT, DoH, DoQ: the encrypted transports
- DNSSEC, signed and validated
- Extended DNS Errors: what EDE 9 and 17 mean