isitdns? wiki/Fundamentals/Which DNS resolver should I use?
Fundamentals

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 A
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> -4 @9.9.9.9 example.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9361
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 17 IN A 172.66.147.243
example.com. 17 IN A 104.20.23.154
;; Query time: 16 msec
;; SERVER: 9.9.9.9#53(9.9.9.9) (UDP)
;; WHEN: Sun Oct 25 06:46:25 CDT 2026
;; MSG SIZE rcvd: 72

GO 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

what each part of this output means →

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 A
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> -4 @9.9.9.9 isitblocked.org A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 8451
;; flags: qr rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 17 (Filtered)
;; QUESTION SECTION:
;isitblocked.org. IN A
;; Query time: 15 msec
;; SERVER: 9.9.9.9#53(9.9.9.9) (UDP)
;; WHEN: Sun Oct 25 06:46:25 CDT 2026
;; MSG SIZE rcvd: 50

GO 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

what each part of this output means →

The same name at Quad9's unfiltered address.

 dig -4 @9.9.9.10 isitblocked.org A
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> -4 @9.9.9.10 isitblocked.org A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21779
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;isitblocked.org. IN A
;; ANSWER SECTION:
isitblocked.org. 3105 IN A 74.208.236.124
;; Query time: 16 msec
;; SERVER: 9.9.9.10#53(9.9.9.10) (UDP)
;; WHEN: Sun Oct 25 06:46:25 CDT 2026
;; MSG SIZE rcvd: 60

GO NOERROR with an address: no filter here

NO GO NXDOMAIN: you are not on the address you think you are

what each part of this output means →

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 A
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> -4 @1.1.1.1 dnssec-failed.org A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 51368
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 9 (DNSKEY Missing): (no SEP matching the DS found for dnssec-failed.org.)
;; QUESTION SECTION:
;dnssec-failed.org. IN A
;; Query time: 47 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Sun Oct 25 06:46:25 CDT 2026
;; MSG SIZE rcvd: 103

GO SERVFAIL, with EDE 9: the resolver checked the signatures and refused the answer

NO GO an address: this resolver did not validate

what each part of this output means →

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 wantPickCheck it
malware and phishing blockeda 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 kidsa 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 blockedAdGuard DNS, or a Control D ads addressthe operator's own check, linked below
your provider not reading your lookupsany of them, set as encrypted DNS on the devicethe operator's DoH or DoT name below, entered in your device's encrypted DNS setting
DNSSEC checked for youa resolver whose AD flag on the status board reads validateddig @RESOLVER dnssec-failed.org answers SERVFAIL

Cloudflare and its filtered addresses#

Cloudflare runs three addresses, one per filter (Cloudflare):

AddressFiltersDoHDoT name
1.1.1.1, 1.0.0.1nothinghttps://cloudflare-dns.com/dns-queryone.one.one.one
1.1.1.2, 1.0.0.2malwarehttps://security.cloudflare-dns.com/dns-querysecurity.cloudflare-dns.com
1.1.1.3, 1.0.0.3malware and adult contenthttps://family.cloudflare-dns.com/dns-queryfamily.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 A
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> -4 @1.1.1.3 nudity.testcategory.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13839
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 17 (Filtered)
;; QUESTION SECTION:
;nudity.testcategory.com. IN A
;; ANSWER SECTION:
nudity.testcategory.com. 60 IN A 0.0.0.0
;; Query time: 32 msec
;; SERVER: 1.1.1.3#53(1.1.1.3) (UDP)
;; WHEN: Sun Oct 25 06:46:25 CDT 2026
;; MSG SIZE rcvd: 74

GO 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

what each part of this output means →

The same name at plain 1.1.1.1.

 dig -4 @1.1.1.1 nudity.testcategory.com A
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> -4 @1.1.1.1 nudity.testcategory.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57742
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;nudity.testcategory.com. IN A
;; ANSWER SECTION:
nudity.testcategory.com. 60 IN A 104.18.4.35
nudity.testcategory.com. 60 IN A 104.18.5.35
;; Query time: 37 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Sun Oct 25 06:46:25 CDT 2026
;; MSG SIZE rcvd: 84

GO real addresses: no filter here

NO GO 0.0.0.0: you are on a filtered address

what each part of this output means →

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).
OperatorAddresses (filter, in the operator's words)DoH (first address)Policy
Quad99.9.9.9 (malware), 9.9.9.10 (none)https://dns.quad9.net/dns-queryprivacy policy
Cloudflare1.1.1.1 (none), 1.1.1.2 (malware), 1.1.1.3 (family)table aboveprivacy
Google8.8.8.8, 8.8.4.4https://dns.google/dns-queryprivacy
AdGuard DNS94.140.14.14 (ads, trackers), 94.140.14.15 (family), 94.140.14.140 (none)https://dns.adguard-dns.com/dns-queryprivacy
OpenDNS208.67.222.222 (basic), 208.67.222.123 (FamilyShield)https://dns.opendns.com/dns-queryCisco
CleanBrowsing185.228.168.9 (security), 185.228.168.168 (family)https://doh.cleanbrowsing.org/doh/security-filter/privacy
Control D76.76.2.0 (none), 76.76.2.2 (ads and tracking), 76.76.2.4 (family)https://freedns.controld.com/p0free DNS
DNS4EU86.54.11.1 (protective), 86.54.11.100 (none)https://protective.joindns4.eu/dns-querypolicy

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#