Quick version: HTTPS hides what's inside a website connection. DNS reveals which website you opened in the first place. If your DNS leaks, your ISP knows every site you visited - even if the actual page traffic was encrypted through a VPN.
What DNS does and why it matters
DNS - the Domain Name System - is the phone book of the internet. Every time you type nytimes.com, your computer asks a DNS server "what IP address goes with this name?" and the server replies with something like 151.101.193.164. Your browser then opens an HTTPS connection to that IP. The page contents are encrypted; your ISP can't read them.
But your ISP CAN see the original DNS question - "what's the IP for nytimes.com?" - because by default DNS is unencrypted UDP traffic on port 53. So even with HTTPS everywhere, your ISP can build a complete log of every site you visited just by watching DNS.
A VPN is supposed to fix this by routing DNS through the encrypted tunnel and answering the queries with the VPN provider's own DNS server. The ISP only sees encrypted traffic to the VPN's IP - no more domain logs.
Where DNS leaks come from
Multi-homed name resolution (Windows)
Windows tries to be clever. When you have multiple network interfaces (your Wi-Fi and your VPN's virtual adapter), Windows sends DNS queries out both simultaneously and uses whichever responds first. This is documented as "smart multi-homed name resolution". The VPN tunnel sees the query - good - but so does your ISP - bad.
The fix is a registry entry or Group Policy setting that disables this behavior. Reputable VPN clients do this for you on install. Free or sketchy VPNs often don't.
IPv6 fallback
If your VPN only routes IPv4 and your ISP supports IPv6, DNS-over-IPv6 queries go around the tunnel entirely. We test for this directly in the IPv6 leak row.
Hard-coded DNS in apps
Some apps - notably anti-virus, cloud-storage clients, and a few smart-home integrations - hard-code a DNS server (often 8.8.8.8) into the app rather than asking the OS. These queries can bypass the VPN tunnel even with everything else configured correctly. There's no clean fix short of blocking the app at the firewall.
Captive portal hijacks
Coffee-shop and hotel Wi-Fi often runs a "captive portal" that intercepts all DNS until you log in. If your VPN connects after the portal authenticates, fine. If something goes wrong and the captive portal's DNS handler stays active in the OS, you'll keep leaking until you reboot the network.
How DNS leak tests actually work
A real, strict DNS leak test - the kind dnsleaktest.com runs - does this:
- Generates a unique random subdomain (something like
x7k3p9.dnsleaktest.com) - Tells the browser to fetch that subdomain
- The browser asks the OS to resolve it; the OS asks DNS
- Whatever DNS server resolved it must contact the authoritative DNS server for
dnsleaktest.com - The authoritative server logs the IP that asked - that's the resolver your OS actually used
- The page polls back, finds the resolver IP, and tells you whether it belongs to your VPN or your ISP
This requires a controlled DNS server with logging - which we don't yet run as a static site. So our DNS row is informational rather than authoritative. For the strictest check, use dnsleaktest.com's "extended" test alongside our other signals.
Reading the results
Once you do run a strict DNS test, here's how to read it:
- Multiple DNS servers from your VPN provider - safe, you're tunneling correctly
- Cloudflare/Google DNS only - probably safe; many VPNs use these as upstream resolvers
- One ISP-named server (Comcast, Verizon, etc.) - leaking, full stop
- Mix of VPN and ISP servers - intermittent leak, often Windows multi-homed resolution
- Servers in your home country when your VPN says you're abroad - DNS leak, even if the names don't match your ISP
Bottom line
DNS leaks are sneaky because everything looks fine from the user's perspective - the VPN is connected, websites think you're in the right country, HTTPS is green. But your ISP is still building a list of every domain you visit. Use a reputable VPN that handles DNS internally, run a strict test once on each new device, and you're done.