DNS
DNS Privacy
Why name resolution is the most useful thing your network can see, and what encrypted DNS changes.
When you visit a site, your device must first turn a name into an address. That lookup is plaintext by default, and it happens before any encryption to the site can begin. It is therefore the most reliable thing a network can observe about you, for free.
What DNS reveals
A resolver sees the name you asked for and where the request came from. A network operator sees the same thing, plus timing, and plus the IP address you then connect to. Together, name lookups and connections describe your browsing in detail without any content being read.
What encrypted DNS changes
DNS over TLS (RFC 7858) and DNS over HTTPS (RFC 8484) wrap resolution in a transport the resolver must authenticate. The local network and the ISP then see only that a connection to a named resolver exists.
This is a real and worthwhile improvement. It is also frequently oversold:
Choosing a resolver
| Option | Trust model | Notes |
|---|---|---|
| Your ISP’s resolver | ISP sees everything | The default; no configuration needed |
| A browser-embedded resolver | Browser vendor sees queries | Firefox’s DoH is a direct-to-resolver design |
| An independent resolver you pay for | The operator sees queries | Read the retention policy |
| A local caching resolver | Only you | dnsmasq, unbound, CoreDNS; still needs an upstream |
| A resolver in your own infrastructure | Only you | For the technically confident, the strongest option |
Configuring it
In Firefox, which ships with its own resolver rather than using the system one:
// about:config
network.trr.mode = 3 # 3 = DoH only, 2 = opportunistic
network.trr.uri = "https://dns.example/dns-query"
network.trr.custom_uri = false
network.trr.excluded-domains = "" # no fallbacks
network.trr.strict_native_fallback = trueIn Chrome, the setting is Secure DNS, and it offers a choice of provider — read the list before selecting, since it is a list of companies gaining visibility into your lookups.
On a Linux host with systemd-resolved, unencrypted DNS should be routed to the local
stub listener rather than used directly:
# /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1
FallbackDNS=
DNSOverTLS=yes
DNSSEC=allow-downgradeVerifying
- DNS leak tests show which resolvers observed a lookup. A correctly configured client should show only the resolver you chose.
- Query the special names your resolver provides to report its own identity, if it has them.
- Watch the connection in a packet capture on a trusted network, not in production.
Sources
- RFC 8484 — DNS over HTTPS, including the threat model it addresses and the residual exposure it acknowledges.
- RFC 7858 — DNS over TLS, and why port 853 and certificate validation are part of the design.
- RFC 1035 — the original specification, with no security considerations to speak of.
- Firefox DNS over HTTPS — the
current settings and what each
network.trr.modevalue means.
Topics
Sources
Related guides
-
Guide Advanced
DNS over HTTPS in Practice (Guide)
How DoH is deployed, why it was designed this way, and the operational details that decide whether it helps.
-
Guide Intermediate
Home Network Privacy (Guide)
Your router sees everything, and the devices on your network can see each other. Both are worth fixing.
-
Guide Intermediate
What VPNs Do and Do Not Do (Guide)
The single change a VPN makes, the trust it transfers rather than removes, and how to read a provider claim.