skip to content

When a stub resolver is switched from the corporate resolver to a public anycast one such as 8.8.8.8, what changes in who resolves its lookups?

level: middleimportance: should knowfreq 34%

answer

  1. the walk stays, the walker moves
  2. one address, many routed sites
  3. public root has no private zones
  4. 1.0.0.1, 8.8.4.4, 149.112.112.112
  5. operator receives every query name

basics

~20 s

The recursive tier moves to the operator: an anycast site picked by routing walks root, TLD and authoritative servers from a cache shared with other users. Internal and split-horizon names stop resolving, and the operator receives every query name.

solid answer

~40 s

The stub still sends one recursive query and waits; what moves is the recursive resolver. An address like `8.8.8.8` or `9.9.9.9` is anycast, announced from many sites, so routing delivers the query to a nearby site, which does the root, TLD and authoritative walk and answers from a cache shared with everyone else reaching that site. It walks the public tree only, so names that exist only in the company's internal zones, or only in its internal split-horizon view, fail or come back with their public answers. Each operator publishes a second address (`1.0.0.1`, `8.8.4.4`, `149.112.112.112`) so the stub can retry on another path when one gives no answer, though both reach the same operator. And the operator, not the ISP or the company, now receives every name the host looks up.

go deeper

for a junior

Recall that the stub only asks; the recursive resolver walks root, TLD and authoritative. Changing the configured address to 8.8.8.8 changes who that walker is, and name the second address each operator publishes.

for a middle

Explain anycast: one address announced from many sites, routing picks the site, each site has its own cache. Then explain why a public resolver cannot see private zones or internal split-horizon views.

for a senior

Diagnose the intermittent intranet failure from a corporate-plus-public resolver list, and say what the second public address does and does not protect against, since both reach the same operator.

for a principal

Weigh moving a fleet's recursive tier off the corporate resolver: shared warm caches and global sites against lost internal views, lost query logs and an outside operator now receiving every name.

## Where the recursive tier sits A **stub resolver** on a host does not walk the DNS tree. It sends one recursive query to a configured resolver and waits for a finished answer. That **recursive resolver** is the only party in a normal lookup that truly recurses: it asks a root server, follows the referral to the TLD servers, follows the next referral to the **authoritative** servers for the zone and assembles the answer. Usually that resolver is the ISP's or the company's own. Pointing the stub at a **public resolver** such as `1.1.1.1` (operated by Cloudflare), `8.8.8.8` (Google Public DNS) or `9.9.9.9` (Quad9) does not change the walk. It changes **where the recursive tier sits**, and with it whose cache answers you, which zones are reachable and who receives your query names. | Question | ISP or corporate resolver | Public anycast resolver | |---|---|---| | Who walks root, TLD and authoritative | the ISP's or company's resolver | the operator's site that routing selects | | Whose cache answers a repeat lookup | that network's users | everyone whose queries reach the same site | | Internal and split-horizon names | resolvable through the company's internal zones | only what the public tree publishes | | Who receives every query name | the ISP or the company | the resolver operator | | Source address authoritative servers see | the ISP's or company's resolver | the operator's resolver | ## One address, many sites: anycast **Anycast** means the same address is announced into internet routing from many sites at once. Routers forward a packet for `8.8.8.8` to whichever announcement is closest in routing terms, so one address is answered by many sites. If one site goes down, its announcement disappears and traffic is routed to the next closest site. Three consequences follow: 1. The site that answers you can change when you travel or when routes change, with no change on the host. 2. Each site keeps its own cache, so the same lookup made from two cities can find different cache state. 3. Losing one site is handled by routing, not by the stub, which never knew which site it was talking to. ## Whose cache you now share - Your lookups land in a cache shared with every other client whose queries reach that site, so popular names are usually already cached. - A name nobody near that site has asked for recently still costs a full walk from the root. - Inside a site an operator may layer its caches, for example a small per-machine cache in front of a tier that sends all queries for one name to the same machine. - How long any answer stays cached is set by its TTL, which is a caching subject rather than a routing one. ## Why internal names stop resolving A public resolver starts every uncached walk at the **public root**. Names that exist only inside a company never appear there: 1. The stub asks the public resolver for `wiki.corp.example.internal`. 2. The public resolver asks a root server, which has no delegation for that private zone. 3. The walk ends with a "name does not exist" answer, which goes back to the stub. **Split horizon** fails more quietly. A company's resolver can serve an internal **view** of `example.com` in which `intranet.example.com` points at a private address. The public resolver only ever reaches the external authoritative servers, so the same name either does not exist or resolves to a public address. Listing the corporate resolver first and a public one second does not repair this: most stubs move to the next listed server when one fails to answer, not when it says a name does not exist, so internal names start failing intermittently whenever the stub happens to be using the public address. ## The second address, and what it does not protect against Each operator publishes a pair, plus IPv6 equivalents: - Cloudflare: `1.1.1.1` and `1.0.0.1`, published as a pair for redundancy. - Google Public DNS: `8.8.8.8` and `8.8.4.4`, with the advice to configure at least two addresses and never the same one twice. - Quad9: `9.9.9.9` and `149.112.112.112`, with the advice to enter all listed addresses to avoid single-path failures. A stub lists both so that when one address gives no answer it can retry on a second **path** to the same service. Both addresses still lead to the **same operator**, so the pair does not protect against a problem across that operator's whole service, and it does nothing about an answer that arrives but is wrong. ## Who now sees your queries - The operator receives every query name the host looks up, together with the address it came from; what it keeps is set by its published privacy policy. - The ISP no longer resolves those names, but plain DNS on port 53 still crosses its network in cleartext unless the stub uses an encrypted transport. - Authoritative servers see the operator's resolver addresses rather than the host's own, unless the resolver forwards part of the client's address to them. - The company loses the resolver logs it used to have for that host, along with any internal views it served.

  • Why does listing the corporate resolver first and 8.8.8.8 second make intranet names fail only some of the time?
    Most stubs move to the next listed server when one does not answer, not when it answers that a name does not exist. While the corporate resolver responds, internal names work; after a timeout the stub uses 8.8.8.8 for a while, and that resolver walks only the public tree, so internal names come back as nonexistent until the stub returns to the first server.
  • If 8.8.8.8 is one address, how can the same lookup from London and Tokyo hit different caches?
    The address is anycast: the same prefix is announced from many sites, and each network routes to the nearest announcement. London and Tokyo reach different sites, each with its own cache, so one may hold the answer while the other must walk from the root. The host never knows which site answered.
  • Does switching a laptop to 1.1.1.1 stop the ISP from seeing which names it looks up?
    No. The ISP no longer resolves the names, but a plain DNS query to 1.1.1.1 on port 53 still crosses the ISP's network unencrypted, so anyone on that path can read the query name. Hiding it needs an encrypted transport to the resolver; what changes by default is who answers, not who can observe.

saying these in an interview costs you the question

  • 8.8.8.8 is a single server somewhere, so every user reaches the same machine.
  • With a public resolver the stub walks root, TLD and authoritative servers itself.
  • Listing 8.8.8.8 and 8.8.4.4 means no outage at one operator can stop resolution.
  • A public resolver as second entry gives internal names a working fallback.
  • Switching to a public resolver hides every lookup from the ISP's network.