Wize AdBlock VPN Explainer
How VPN-Style Ad Blockers Work Without Root on Android
A no root ad blocker for Android uses the VpnService API to filter DNS locally. Here is the lifecycle, the teardown, and the reason it does not need root.

Written by the Fulldive product engineering team, based on direct inspection of the repositories listed below.
A no root ad blocker Android app sounds like a contradiction. Historically, blocking network traffic across all apps on a device meant a rooted phone and an iptables rule. That is not how Wize AdBlock VPN (repo fulldiveVR/FulldiveExtension.AdShield) works in 2026. The answer, and the one most no-root VPN firewall tools on Android use, is the platform’s own VpnService API combined with local DNS filtering.
The one API that makes this possible
Android has shipped a public class called android.net.VpnService since API 14. It lets an ordinary app, after a user confirmation dialog, build a virtual network interface and route device traffic through it. Google designed it for real VPN clients, but nothing in the contract says your “VPN” has to leave the device. A local implementation can:
- Receive DNS queries from other apps on the device.
- Match them against a blocklist.
- Return a non-routable answer for blocked names, or forward the rest to a real DNS resolver.
That is a DNS-sinkhole ad blocker running inside the phone. No root, no system modification, just a user-granted permission.
Why the user has to confirm a VPN prompt
When you first enable Wize AdBlock VPN, Android shows the standard “Connection request / [App] wants to set up a VPN” dialog. This is unavoidable: VpnService.prepare() is how Android tells the user that something on the device is about to route their network traffic. The dialog is the same one a remote commercial VPN would show.
For a DNS-filtering app, the prompt is slightly misleading in wording, because no traffic is actually tunneled off the device. But the platform does not distinguish, and honestly, it should not. Anything that can route traffic deserves an explicit consent step.
The lifecycle is where the real work is
Starting a VPN service is one line. Running it correctly over hours of screen-on time, network changes, Doze, and user-initiated disconnects is not. In the Wize AdBlock VPN repository, this lifecycle shows up directly:
- Graceful teardown.
commit886a3f2c`` addresses the VPN service stopping cleanly. Without graceful teardown, you end up with a phantom VPN key icon in the status bar, a stale tun interface, or DNS queries going to a handle that no longer exists. - DNS wizard lifecycle and flicker.
commit7033779b`` fixes the state transitions around the onboarding DNS wizard. A “wizard” that briefly shows the wrong state on each rotation is harmless if your app is a todo list and serious if your app decides whether network traffic is filtered. - Cold-start DNS readiness.
commit6640e596`` ensures the DNS resolver is actually ready by the time the first query arrives after the service starts.
All three are the kind of fix you only ship after watching real users (and your own test devices) hit the edge cases.
No root means the kernel is not involved
To make the “no root” part concrete: a classic iptables-based Android firewall had to add rules at the kernel netfilter layer. That required root. A VpnService-based app does not touch iptables at all. It is a user-space component that receives packets Android hands it, inspects and possibly drops them, and returns the rest. All of that happens inside the app’s own sandbox.
This is also why a no-root firewall tool like DataGuard uses the same pattern. If you have read How no-root Android firewalls work, the plumbing described there is the same plumbing a local ad blocker uses. The difference is only in policy: a firewall asks “is this app allowed to use this network right now?”, a DNS blocker asks “is this domain name on the blocklist?”.
Limits baked into the API itself
VpnService gives you a lot, but it deliberately does not give you:
- System-wide TLS inspection. You cannot read HTTPS content without breaking the trust model, and no reputable no-root ad blocker should try.
- Persistence across all reboots and app kills. Android can stop your service, and the user can revoke VPN consent at any time.
- Running alongside another VPN. Only one app can hold the active VPN at a time. If you start a commercial VPN, the local DNS blocker stops, and vice versa.
- Root-level filtering precision. You see what packets the system hands you, with whatever coalescing and timing Android applies.
These are API-level facts, not product shortcomings. Any app claiming otherwise on Android, without root, is overclaiming.
What this means for everyday use
For someone installing Wize AdBlock VPN, the practical implications are:
- You will see the VPN key icon. That is expected and does not mean your traffic is going to a remote server.
- If you enable another VPN, the ad blocker will disconnect. You can only run one VpnService at a time.
- The first few seconds after enabling are the most fragile. The cold-start fixes referenced above exist because those seconds matter.
- When you disable the blocker, the tun interface goes away and all apps return to using their default DNS. The graceful teardown fix is why that transition is clean.
Limits: what this does not block
A no-root DNS/VPN ad blocker is a network-noise reducer, not a privacy suite. Specifically:
- It does not block ads served from the same domain as the content.
- It is not anti-malware.
- It does not anonymize your traffic.
- It does not replace a real traffic-privacy VPN.
If those distinctions matter to you, read What Wize AdBlock VPN can and cannot block before forming expectations.
Where to go next
- Product page: Wize AdBlock VPN.
- Mechanism deep dive: DNS ad blocking vs VPN ad blocking on Android.
- Engineering history: Cold-start and DNS lifecycle bugs.
- Firewall sibling: How no-root Android firewalls work.
- Ecosystem: What is Fulldive and the full apps list.
Sources
- Android
VpnServicereference: https://developer.android.com/reference/android/net/VpnService. - Pi-hole DNS sinkhole model: https://en.wikipedia.org/wiki/Pi-hole.
- Internal repository evidence:
fulldiveVR/FulldiveExtension.AdShield, inspected 2026-04-13.
Last updated: 2026-04-16. Commit hashes and version numbers are drawn from Fulldive repositories inspected on 2026-04-13.