Ad and tracker blocking
Blocking ads and trackers at the DNS layer
The whole mechanism fits in one sentence: a device cannot send a packet to a name, so every connection begins by asking for an address, and a filter that declines to answer for a known ad host ends the matter there. Nothing is downloaded and then hidden, because nothing was ever requested.
That early refusal is what makes the technique interesting and also what limits it. This guide works through the lookup step in detail, the reason an avoided request saves battery and mobile data rather than only removing a banner, the three things a hostname filter structurally cannot do, why it reaches apps no browser extension can touch, the two ordinary situations in which it is never consulted at all, and why any honest account has to include the false positives.
Nothing connects before it asks for an address
A hostname is a label for humans. When an app wants metrics.example-ads.net it hands that string to the operating system's stub resolver and waits, because there is no packet it can send until something returns a numeric address. Only once an address comes back does a connection exist at all: a TCP handshake, then a TLS handshake, then the actual request and its response.
A filter sits at that first step, in the resolver rather than in the app. It checks the name against a blocklist, and on a match it answers straight away, either that no such host exists or with an address that leads nowhere, instead of passing the question on. The app then fails to connect to a host it never located. From its point of view the ad server is not blocked; it simply is not there.
Notice how little the filter is working with. It sees a hostname, and that is the entire input. It does not see the page you are reading, the path after the slash, the cookies attached to the request, or which rectangle on screen the resource was going to fill. Everything that follows, the strengths and the limits equally, falls out of that one fact.
- Input: a hostname. Not a URL, not a page, not an element, not a user.
- Output: an address or a refusal. There is no partial answer, so one path on a host cannot be allowed while another is denied.
- Timing: before the TCP handshake, which is what makes this preventative rather than cosmetic.
Refusing early is why it saves battery and data
Compare the two places a block can happen. A cosmetic rule in a browser hides an element after the fact: the request went out, the connection was negotiated, the payload arrived, and the tracker on the far end was contacted and had its chance to record the visit. The page looks clean, and every byte was still paid for. The better extensions do block the request itself rather than merely hide the result, which is genuinely different, but only for traffic the browser makes.
A refused lookup costs one small answer. There is no handshake, no certificate exchange, no transfer, and no beacon delivered. On a phone this matters more than the byte count suggests, because a cellular radio does not switch off the instant a request finishes; it stays in a high-power state for seconds afterwards in case more follows. A page that quietly contacts twenty measurement hosts keeps waking the radio twenty times. Not making those requests removes the tail as well as the payload.
- A request never made costs no connection, no certificate, no response body and no radio time.
- On metered or roaming data the saving is traffic you were never going to read.
- A refusal comes back immediately, which behaves better than a request that is made and left to time out.
Three things hostname filtering cannot do
The first is first-party advertising. If the ad arrives from the same hostname as the article around it, there is no separate name to decline, and refusing that name would take the site down with it. A feed is the clearest case: the same backend that returns the posts returns the promoted ones in the same response, from the same host, so there is nothing separable to refuse. That is why a name filter changes far less inside a social app than inside a game that fetches its advertising from an outside network. It is not a hole in the list that a better list would close; it is the shape of a tool that works on names.
The second is anything visual. A filter cannot hide an empty frame, reclaim the space a banner was given, or tidy up the layout afterwards. Blocked slots sometimes leave a blank rectangle or a broken-image icon, which is the honest signature of a request that failed rather than an element that was removed. On a page built mostly out of its advertising, the result is more visible gaps than a page-level blocker would have left, because nothing is tidying up after the refusal.
The third is precision below the hostname. A blocklist entry is a name, so the smallest unit it can express is a whole host, and a rule written against a parent domain applies to every subdomain beneath it. When one domain serves both the measurement you would rather refuse and a stylesheet the page needs, or when a sign-in redirect and a click tracker live under the same parent, the decision is all or nothing. There is no way to say "this host, but only the part that is not tracking" — that granularity belongs to tools that can read a URL, and a resolver only ever sees the name.
- Cannot block an ad served from the content's own hostname.
- Cannot hide elements, reflow a layout, or remove the gap a blocked resource leaves behind.
- Cannot separate two services that share a hostname, so useful and unwanted traffic sometimes stand or fall together.
An extension covers a browser. The resolver covers the device.
A browser extension runs inside the browser, which is both its advantage and its boundary. It can read page structure, cancel individual requests by URL and rewrite the document, none of which a name filter will ever manage. What it cannot do is see traffic that never goes through the browser, and on a phone a great deal of what leaves the device never does.
Consider what else is talking: a mail client fetching remote images, free apps whose embedded analytics and advertising kits report in on every launch, a game's ad network, a crash reporter, a shopping app checking in while it sits in the background. None of them ask a browser for permission, and no browser extension can see them. Name resolution, by contrast, is the one step every one of them performs identically, which is why intervening there reaches all of them at once.
So these are complements rather than competing options, and on a phone the division is sharper than on a desktop. Safari on iOS does accept content blockers, but through a deliberately restricted interface: the extension hands iOS a list of rules in advance and never sees the requests themselves, so it cannot make a decision in the moment. Chrome on Android accepts no extensions at all; Firefox for Android does. Page-level filtering on mobile is therefore present in some browsers, weaker in others and absent in the rest, and in none of them does it reach another app.
- Device-wide filtering reaches apps, background services and browsers that accept no extensions.
- Page-level filtering does the things that need the page: cosmetic rules, per-URL exceptions, element removal.
- The sensible arrangement is both where both exist — page-level filtering in whichever browser supports it, and a device-wide filter underneath everything else.
When the filter is never asked at all
A filter can only act on a question that reaches it, and two ordinary things stop the question arriving. The first is caching. Every DNS answer carries a time-to-live, and your operating system, your browser and sometimes the app itself hold on to answers until it expires. A name resolved before you switched filtering on stays resolved afterwards, and a refusal issued while it was on can keep being returned for a while after you switch it off, because refusals are cached like any other answer. This is why a change in settings sometimes appears to do nothing for several minutes, and why a connection already open to an address carries on regardless: nothing re-resolves a name it has already resolved.
The second is a program that brings its own resolver. Nothing obliges software to ask the operating system for an address. A browser or an app can speak DNS over HTTPS directly to a resolver it chose itself, or carry a resolver address compiled into it, and in either case the lookup never passes the filtering resolver, so it is never filtered. Those lookups are still carried inside the tunnel, so the local network cannot read them, which is the one case where you have the encryption and none of the filtering. The fix is not in the tunnel, because the tunnel cannot answer a question it is not asked: where a browser exposes a secure-DNS setting of its own, turning that off is what hands its lookups back to the system resolver.
- A cached answer outlives the setting that produced it, cached refusals included, so expect a few minutes of lag after changing anything.
- An app doing its own encrypted lookups is not filtered — not blocked, not allowed, simply never seen — though it is still carried inside the tunnel.
- An established connection does not look the name up again, so refusing a hostname does not end a session that is already running.
Lists are maintained by people, and people are sometimes wrong
A blocklist is a curated list of hostnames, and curation never finishes. Advertising and measurement networks register new names continuously, abandoned domains get bought and put to ordinary use, and large content delivery networks host tracking scripts and essential assets as neighbours on the same name. A list is therefore a standing judgement that needs maintaining, and each update can change how some site behaves for you tomorrow.
Over-blocking has a recognisable fingerprint: everything works except one specific action. A checkout form that will not submit, an app that spins forever on sign-in, a bare network error with no other symptom, one broken thumbnail in a gallery, a link from an email that leads nowhere because it is routed through a click tracker the list refuses. The tell is how narrow it is. Genuine connection trouble is not that selective.
Which is why the ability to turn filtering off matters as much as the filtering. One switch separates the two explanations: disable it, repeat the exact action, and you know within seconds whether the list was responsible. A blocking feature with no off switch turns a thirty-second check into an afternoon.
- Likely over-blocking: one form, one button, one sign-in, one image, one tracked link.
- Probably not over-blocking: everything slow at once, a service down for everyone, or an action that still fails with filtering disabled.
Where WrapVPN does this, and how to switch it off
While the tunnel is up, your lookups are answered at the far end, and that is where filtering is applied. A name on the list is refused there, so your device never contacts the host, and because the decision happens at the resolver rather than inside a browser it applies to every app on the device for as long as you stay connected. Encryption and filtering are separate concerns: your traffic is carried the same way whether blocking is on or off.
It is a setting, not a condition of use, so turn it off whenever a site misbehaves and back on afterwards. The mechanism also explains its own boundary honestly. Filtering lives on the resolver the tunnel points at, which means it stops when you disconnect, and it has no effect on a device that is not running the app.
Seeing whether a device-wide filter changes anything for you is mostly a matter of living with it for a few days on the apps you actually use. The free tier allows three hours a week, one hour per session, on two devices, which is enough to watch the mechanism work; the monthly plan also starts with a seven-day free trial. Paid access is $0.99 a day, $1.99 a week or $3.99 a month, with no annual subscription and no long-term commitment, so a short trial of the idea does not require signing up for a year of it.
- Blocking applies while connected, to every app that asks the system for an address — which is nearly all of them, and no browser extension required.
- It can be turned off at any time, and turning it off does not affect the tunnel itself.
- Pick a region from the list, which shows live latency, so lookups are answered somewhere close to you.
What people use it for
A phone full of free apps
Advertising-supported apps generally bundle several measurement and ad kits, and each one reports in when the app opens and periodically after that. Those hosts are third-party by design, which is exactly the case a name filter handles well, and it happens with no per-app configuration because the apps have no say in how names get resolved.
A browser with no extension support
Chrome on Android installs no extensions at all, and Safari's content blockers on iOS act from a rule list submitted in advance rather than by inspecting requests as they happen. Refusing lookups works in either case, because it sits below the browser rather than inside it, although without cosmetic rules you will occasionally see the empty space where something did not load.
Metered, roaming or slow connections
When bandwidth is rationed, the argument shifts from tidiness to arithmetic. Tracking beacons and ad payloads consume the same allowance as the content you wanted, and on a congested link they compete with it for the connection. Declining them at the lookup removes both the bytes and the extra handshakes.
How to set it up
- 1
Note exactly what failed
Write down the site or app and the precise action, such as submitting one form or opening one link. Over-blocking is narrow by nature, and the narrower your description, the faster the rest of this goes.
- 2
Switch blocking off, not the tunnel
Turn the ad and tracker filter off and leave the connection up. This isolates one variable: if the problem were the tunnel or the region, it would still be present with filtering disabled.
- 3
Repeat the same action
Try the identical step again. If it now works, a refused hostname was the cause. If it fails the same way, filtering is probably not involved — but a cached refusal can outlive the setting, so force-quit the app or reload the page rather than reusing a connection that is already open before you rule it out.
- 4
Turn it back on afterwards
Finish what you were doing, then re-enable filtering. Keeping a note of which hostname or which site it was is worth doing, because the real fix is a correction to the list rather than leaving it switched off permanently.
What it costs
Short plans, priced so a week costs what a week is worth. Cancel by not renewing.
$1.99per week
$3.99per month
No annual subscription. No long-term commitment.
7-day free trial
See all plansCommon questions
Is DNS filtering the same thing as an ad blocker?
They solve overlapping problems at different layers. An ad blocker in a browser can see the page and act on individual elements or URLs, but only for that browser. DNS filtering decides whether a hostname resolves at all, which covers every app on the device and stops the request before it is made, but it cannot see inside a page.
Does it block ads inside apps and games?
It blocks the ones fetched from separate advertising and tracking hostnames, which is how a great deal of in-app advertising arrives, and that happens without configuring anything per app. What it cannot touch is advertising delivered from the same host as the app's own content, because declining that name would break the app.
Why does refusing a lookup save battery and data?
Because the expensive part never begins. A request that is made costs a connection, a TLS handshake and a download, and on a phone it also keeps the cellular radio in a high-power state for seconds afterwards. A refused name costs one small answer, so a page contacting twenty tracking hosts stops waking the radio twenty times.
A site stopped working properly. Was it the filter?
Possibly, and it takes half a minute to find out. Over-blocking usually shows up as one narrow failure, such as a form that will not submit or an endless spinner on sign-in, while everything else is fine. Turn filtering off, leave the connection up, retry the same action, then turn it back on. If it worked with filtering off, that was the cause.
I turned filtering off and the site still failed. Does that clear it?
Not immediately, no. Answers are cached with a time-to-live and refusals are cached too, so a name that was refused a minute ago can keep coming back refused after you switch filtering off. Force-quit the app or reload the page rather than retrying inside a connection that is already open, and give it a few minutes before you conclude the filter was innocent.
Why do false positives happen at all?
A blocklist is maintained by people against a moving target. New advertising hostnames appear constantly, old domains get recycled into legitimate use, and content delivery networks serve tracking scripts and necessary assets under the same names. Any list aggressive enough to be useful will occasionally refuse something a site actually needed.
Is this the same as encrypted DNS?
No, and the two answer different questions. Encrypted DNS is about who can read your lookups while they travel, so that the local network cannot see the names you ask for. Filtering is about which lookups get answered. A resolver can do both, one, or neither, and having encryption says nothing about whether anything is being blocked. The two do collide in one place: an app that performs its own encrypted lookups to a resolver it picked never asks the filtering one, so those requests are carried privately and filtered not at all.
Get WrapVPN
One account covers your phone, tablet and computer. Connect in a tap, from any of our regions.
Keep reading
Closely related pages, chosen because they answer the question this one raises next.
Guide
What WireGuard is, and why it connects instantly
WireGuard fixes its cipher suite instead of negotiating one and shakes hands in a single round trip. What that buys you, what it costs, and where the promise ends.
Travel
Public Wi-Fi safety, explained by what actually goes wrong
Captive portals, DNS and TLS SNI leaks, evil-twin hotspots and shared Wi-Fi passwords, explained plainly, with an honest account of what a VPN fixes.
Guide
How to set up a VPN on iPhone
Set up a VPN on iPhone in a few minutes: the iOS permission prompt, where the configuration lives in Settings, the status-bar badge, and the two usual failures.
Guide
Do you need a VPN on an iPhone?
iOS already handles much of what VPN adverts warn about. What a tunnel still changes on an iPhone, who genuinely benefits, and who should not bother buying one.