Leaks & Masking · Network Tests

DNS Leak Test

See which resolvers your lookups reach, and whether a VPN or DoH is actually containing them.

Timing DNS lookups…
Timing DNS lookups…

Each probe asks for a name that cannot exist. The request stops at the resolver, so what you see is the lookup itself.

On this page
  1. What a DNS leak is
  2. What a browser can observe
  3. Reading the timings
  4. When DNS really leaks
  5. Checking it properly

What a DNS leak actually is

Before your browser can load anything it has to turn a hostname into an address, and that question goes to a resolver — usually the one your router handed out over DHCP, which in turn forwards to your ISP. Every name you visit passes through it in the clear on UDP port 53.

A VPN is supposed to capture that step as well as your traffic. Many do. The problem is the ones that do not: a split-tunnel configuration, a VPN client with "use my ISP's DNS" enabled, or a leak after the tunnel drops all leave the ordinary resolver in charge. Your page content then travels encrypted while the list of sites you visit travels in plaintext next to it, which is the leak in the name.

The leak is a list, not a page

Nothing about your traffic is exposed by a DNS leak — just the names. That is still a detailed record of where you went and when, and it is often easier for a network operator to read than the encrypted traffic beside it.

What a browser can and cannot observe

It is worth being blunt here, because most pages that promise a DNS leak test from the browser alone are overstating what they can do. A web page cannot read the resolver address. There is no API for it, request timings include TCP and TLS work that dwarfs the lookup, and browsers do not expose their Secure DNS setting to scripts at all.

  • Not readable: the resolver's address, whether DoH is active, the contents of a query, and any query made by another app on your machine.
  • Readable: how long your own lookups take, whether a name that cannot exist was answered anyway, the network your address belongs to, its timezone, your browser's timezone and your locale.

The panel above reports only the second list. The split-tunnel rows compare the organisation behind your address and its timezone against your browser's, which is a smell test, not proof. For an honest resolver-level answer you need a server-side test, which is described further down.

Reading the probe timings

Each probe asks for a random subdomain of a .invalid name. That top-level domain is reserved by RFC 2606 precisely so it can never resolve, which makes it a clean measuring stick: the browser fails at the lookup, no connection is opened, and the elapsed time is dominated by the DNS round trip.

A typical result is somewhere between a few milliseconds and roughly a hundred. The lower end usually means a local cache or an on-router resolver answered — including the negative answer, which browsers and resolvers cache for a short period under RFC 2308. The higher end means the question travelled further before coming back.

What matters more than the number is the shape. All four probes failing cleanly and quickly is the ordinary outcome. A stall past two seconds points at a blocked, filtered or unreachable resolver. And a probe that succeeds is the interesting one — it means a name with no possible address reached a server, so something answered a query it should have refused.

When DNS really does leak

The classic leak is a VPN whose adapter is configured with the ISP's resolver. The tunnel carries your traffic, the resolver query stays outside it, and the ISP can log every hostname. A second, subtler case is the tunnel dropping: many clients keep the old resolver while reconnecting, so names keep flowing to a network you thought you had left.

IPv6 is the third case worth knowing about. A machine can hold both an IPv4 address through the tunnel and a native IPv6 address that bypasses it, and the resolver may be reached over IPv6 without you noticing. Checking with the IPv6 test alongside this one is the quickest way to see whether one family is escaping.

An intercepting resolver is a different problem

Some access providers rewrite the answers to names that should not exist, serving a search page instead of an error. If the probes above came back with a result rather than a failure, that behaviour is the likely cause. It is worth reading about on its own terms, not just as a leak.

How to check your DNS properly

A real resolver test needs a server. The usual design gives you a one-off hostname, you load it, and the server records which resolver asked for that name and shows it back to you. That is the only way to learn the actual address, and it is why server-side tests exist next to browser-side ones like this.

  • Turn on encrypted DNS in the browser. Firefox has a DNS-over-HTTPS setting, Chrome and Edge have Secure DNS, and Brave ships its own. This covers browser lookups only.
  • Check your VPN's DNS setting. Look for the option that routes DNS through the tunnel instead of the local network, and prefer the provider's own resolver.
  • Check the whole device, not the browser. Other apps and the operating system keep their own resolver regardless of what the browser does.

Whichever route you take, re-run this page afterwards. The timing probe will not tell you the resolver, but the split-tunnel rows and the proxy and VPN detection test will show whether your address and your browser still disagree about where you are.

Frequently Asked Questions

What is a DNS leak?
When you open a site, your device first asks a resolver to translate the name into an IP address. A VPN normally sends that question through the tunnel too. If the VPN only routes web traffic but leaves the system resolver in place, the names you visit still go to your ISP in plain text — that is a DNS leak.
Why does this page not show my resolver address?
Because no browser exposes it. There is no JavaScript API for the resolver, fetch does not report the DNS step, and with DNS-over-HTTPS the query is encrypted on port 443. Leak-test services that do show a resolver list run a server that logs which resolver asked for a unique hostname they gave you.
What are the probes actually measuring?
Each probe requests a random name under .invalid, a domain reserved by RFC 2606 that no resolver should ever translate. The request therefore fails at the lookup stage and never opens a connection, so the elapsed time is essentially the DNS round trip. One extra request to a real host proves your network itself is working.
My probes all succeeded. What does that mean?
A name that cannot exist reached a server, which means something answered a query it should have refused. That is typical of an ISP that hijacks NXDOMAIN to show an ad page, a captive portal that resolves everything, or a filtering resolver. It does not identify the resolver, but it is a real anomaly worth investigating.
Does DNS-over-HTTPS fix a leak?
It changes who sees the query rather than stopping the leak. With DoH the lookup travels in TLS to a provider you chose, so your ISP cannot read it, but the provider can. If your VPN is set to "use my ISP DNS", turning on DoH in the browser usually overrides that for browser traffic only — other apps on the machine keep their own resolver.