What DNS-level ad blocking actually is
Every time an app or browser loads a page, it first asks a DNS resolver to turn a domain name (like `ads.example.com`) into an IP address. A filtering DNS resolver keeps a list of known ad and tracker domains. When your Mac asks for one of those, instead of returning the real address it returns nothing (often `0.0.0.0` or `NXDOMAIN`). The connection simply never happens, so the ad or tracker can't load. The key thing to understand: this works at the domain level, before any app makes a connection. It doesn't read page content or inject anything into your browser. That's why one DNS setting covers Safari, Chrome, Firefox, Mail, and every other app at once, no extension required. The trade-off is that it can only block or allow a whole domain, all-or-nothing, with no knowledge of what's actually on it.
Pros and cons vs. extensions and proxies
Where DNS blocking wins: - System-wide. One change covers every browser and every app, including ones with no ad-blocking support of their own. - Zero install. Public resolvers need nothing but a setting change. No kernel extension, no proxy. - Low overhead. It just answers DNS queries; it doesn't sit in your traffic path decrypting anything. Where it falls short: - First-party ads survive. YouTube pre-rolls come from the same domains as the content, so a DNS blocker can't drop them without breaking the site. Page-rewriting extensions can. - All-or-nothing per domain. If one domain serves both a tracker and something you need, you can't split it. - Maintenance. Blocklists go stale and trackers rotate domains, so someone has to keep lists fresh. - It's blind to apps. DNS sees the domain but not *which* app asked. You can't tell whether a tracker call came from a game, a menu-bar utility, or your browser.
The best ad-blocking DNS options in 2026
These are public filtering resolvers you point your Mac at. Free, zero-install, no account needed for most. - NextDNS (freemium). The most customizable: pick blocklists, allow/deny domains, see logs. The free tier covers ~300,000 queries/month; past that it keeps resolving but stops filtering and logging until the month resets. Paid plans lift the cap. - AdGuard DNS (free public + paid). Its default ad-blocking servers are 94.140.14.14 and 94.140.15.15, which block ads and trackers out of the box. A Family variant (94.140.14.15 / 94.140.15.16) adds adult-content filtering. - Cloudflare 1.1.1.1 for Families (free). Use 1.1.1.2 to block malware, or 1.1.1.3 for malware plus adult content. Fast and private, but it targets security rather than general ad blocking. - Quad9 (free). 9.9.9.9, run by a Swiss non-profit. It focuses on malware, phishing, and botnet domains rather than ads, but it's a strong, no-logging security layer. For pure ad and tracker blocking, NextDNS and AdGuard DNS are the two to start with.
How to set custom DNS on macOS (plus self-hosted and app-level)
Change your DNS in System Settings (about a minute): - Open System Settings > Network. - Pick your active connection (Wi-Fi or Ethernet), then click Details.... - Go to the DNS tab. - Under DNS Servers, click + and add the addresses you chose (e.g. `94.140.14.14` and `94.140.15.15` for AdGuard DNS, or your NextDNS addresses). - Remove old entries you don't want, click OK, then Apply. Reconnect Wi-Fi if changes don't take effect. Self-hosted (whole network): - Pi-hole and AdGuard Home are free and block ads for *every* device on your network, smart TVs included. Both run on a Raspberry Pi or any always-on machine, set up in minutes. The catch is hardware and upkeep. App-level on the Mac: - AdGuard for Mac is a paid app running a system-wide filtering proxy, going beyond plain DNS. - NetMute (this site's app) takes the per-app angle: its Tracker Shield blocks trackers per-app and shows you exactly which domains each app is contacting. That fills DNS's blind spot, since DNS knows the domain but not which app asked. One-time purchase with a free trial; it can complement a DNS resolver or stand alone.
The bottom line
For broad, no-effort coverage on a Mac, point your DNS at a filtering resolver. AdGuard DNS (94.140.14.14 / 94.140.15.15) is the simplest pure ad-blocker, and NextDNS is the pick if you want control and logs. Add Cloudflare for Families or Quad9 if security matters more than ads. Want the same protection across every device in the house? Self-host Pi-hole or AdGuard Home. Just remember DNS blocking is domain-level and blind to which app made each request, and it can't touch first-party ads. If you want to *see* which app is phoning home and block trackers per-app, NetMute pairs naturally with any DNS setup. Many people run both: a filtering resolver for the network-wide net, and NetMute for app-level visibility and control.