unsubbed.co

Unbound

Released under BSD-3-Clause, Unbound provides validating, recursive, and caching DNS resolver on self-hosted infrastructure.

Self-hosted recursive DNS, honestly reviewed. No marketing fluff, just what you get when you run your own resolver.

TL;DR

  • What it is: A validating, recursive, caching DNS resolver — the software that translates domain names into IP addresses, entirely on your own machine or server [website].
  • Who it’s for: Privacy-conscious home lab operators, network administrators, and self-hosters who are tired of handing their entire browsing history to Google (8.8.8.8), Cloudflare (1.1.1.1), or their ISP.
  • Cost savings: Commercial DNS privacy services like NextDNS run ~$1.99/month with query caps. Unbound on a $3–5/month VPS or a spare Raspberry Pi costs nothing for the software itself [website][3].
  • Key strength: It’s a recursive resolver — it doesn’t ask a middleman for answers. It walks the DNS tree itself, splitting your queries across dozens of servers worldwide rather than funneling everything through a single company’s logs [2].
  • Key weakness: It is not beginner software. Unbound has no web UI, no one-click installer, and no concept of a guided setup wizard. Every option lives in a plain-text config file. That’s a feature for some people and a hard stop for others [2][3].

What is Unbound

Unbound is a DNS resolver built by NLnet Labs, a Dutch nonprofit that has been writing open internet infrastructure software since 1999. It sits at 4,343 GitHub stars, is distributed under the BSD-3-Clause license, and is currently on version 1.24.2 [website][github].

The one-line pitch: Unbound answers the question “what IP address is behind xda-developers.com?” without asking anyone else to look it up for you. Instead, it walks the DNS hierarchy from the root servers down — asking first who handles .com, then who handles xda-developers.com, then querying the authoritative server directly [2]. The result is cached locally so subsequent lookups are instantaneous.

What makes this meaningfully different from just typing 8.8.8.8 into your router settings is a combination of three things. First, DNSSEC validation — Unbound cryptographically verifies that DNS responses haven’t been tampered with in transit, which is increasingly relevant given that DNS spoofing is still a live attack vector [website]. Second, DNS-over-TLS (DoT) and DNS-over-HTTPS (DoH) — Unbound supports encrypted DNS so clients on your network can’t have their queries intercepted by your ISP or a coffee-shop network [website]. Third, Query Name Minimisation — instead of sending the full domain name to every server in the lookup chain, Unbound sends only the minimum required at each step, reducing the data footprint of each query [website].

NLnet Labs operates with a stated principle worth quoting directly from their website: “We do not make custom builds or provide specific features to paying customers only.” [website] For infrastructure software you’re putting in the critical path of your entire network, that’s not a trivial statement.


Why people choose it over public resolvers and Pi-hole

The practical use cases that show up in third-party coverage cluster around two groups: people replacing Pi-hole after v6 reliability problems, and people who want the privacy properties of a recursive resolver without routing traffic through a third-party VPN.

Versus public DNS (Google, Cloudflare, your ISP). This is the foundational argument for Unbound. When you use a public resolver, every domain query goes to a single company that can log, analyze, or sell it. With Unbound, queries are distributed across root servers, TLD servers, and authoritative servers — no single entity sees your full browsing pattern [2]. Adam Conway at XDA Developers put it plainly: “Your ISP can still see which IP addresses you connect to, and in many cases that still reveals the service you’re using, but in an age of CDNs it doesn’t always map neatly to a single website.” [2] That’s an honest acknowledgment of the limits — Unbound doesn’t make you invisible, it just removes one large concentration of DNS visibility.

Versus Pi-hole. Pi-hole is a blocklist-based DNS sink — it intercepts queries to known tracker and ad domains and returns nothing. Unbound is a recursive resolver. These are genuinely different tools that are often run together. Conway migrated away from Pi-hole after Pi-hole v6 introduced a bug where CPU usage would spike to 100% and stay there, taking down DNS for his entire network [2]. His solution was to switch to Unbound running natively inside OPNsense, which consolidated two services into one and removed the dependency on a separately-maintained container [2]. Worth noting: Pi-hole and Unbound can be run together — Pi-hole handling blocklists at the front, Unbound doing recursive resolution at the back. This is a popular home lab configuration even if it adds moving parts.

Versus NextDNS and similar commercial privacy DNS. NextDNS, Cloudflare Gateway, and similar services offer the appearance of privacy DNS — blocklists, DoH/DoT, analytics dashboards — while still being a centralized company logging your queries. For many users that tradeoff is fine. For users who want genuine independence from third-party logging, Unbound on hardware you control is the only real answer. Samir Makwana at XDA summarizes his motivation directly: “Using a third-party VPN wouldn’t solve anything. My browsing activities, including my DNS traffic, would be easily viewable or logged by a third-party VPN provider.” [3]

Versus BIND and PowerDNS. BIND (named) has been the reference DNS implementation for decades and is far more complex than Unbound — it’s designed for authoritative DNS serving for organizations running their own domains, not for recursive resolution on a home network. PowerDNS splits into separate authoritative and recursor packages. Unbound is purpose-built for the recursive resolver role and is correspondingly lighter and easier to configure for that specific job.


Features

Based on the official website, documentation, and README:

Core resolution:

  • Full validating recursive resolver — walks the DNS tree from root servers, no upstream dependency required [website]
  • DNSSEC validation with cryptographic verification of response integrity [website]
  • Local caching with configurable TTLs [website]
  • Aggressive Use of DNSSEC-Validated Cache (NSEC/NSEC3) — reduces unnecessary queries to authoritative servers [website]
  • Query Name Minimisation (RFC 7816) — sends minimal information at each lookup step [website]
  • Authority zone support — can load a local copy of the root zone, further eliminating external lookups [website]

Encryption:

  • DNS-over-TLS (DoT) on port 853 [website]
  • DNS-over-HTTPS (DoH) [website]
  • These allow clients to encrypt DNS queries to your Unbound instance, useful when accessing your resolver remotely [2][3]

Blocklisting:

  • Supports local zone overrides and blocklist-style configuration for tracker/ad domain blocking [2]
  • Can replicate much of what Pi-hole does, though without Pi-hole’s web dashboard and blocklist subscription management

Platform compatibility:

  • Runs on all Linux and BSD distributions, macOS [website]
  • Bundled in the base system of FreeBSD, OpenBSD, and other major BSDs [website]
  • Available in standard repositories of most Linux distributions [website]
  • Ships as a built-in component of OPNsense [2]
  • Packaged for Proxmox-hosted Debian/Ubuntu VMs [3]

Configuration:

  • Single flat config file (unbound.conf) — all options documented in the unbound.conf(5) man page [README]
  • Supports multiple listen interfaces, per-interface access control
  • Scriptable — no GUI required, integrates well with config management (Ansible, etc.)

What it does not have:

  • A web dashboard or GUI of any kind
  • Built-in blocklist subscription management
  • A guided setup wizard
  • Centralized management across multiple instances

Pricing: DNS-as-a-Service vs self-hosted math

Unbound itself costs $0. BSD-3-Clause license — you can use it, fork it, embed it, redistribute it [website]. What you pay for is the infrastructure it runs on.

Infrastructure options:

  • On existing hardware (router with OPNsense, Raspberry Pi, old PC): $0 marginal cost [2]
  • Proxmox LXC on existing homelab: $0 marginal cost [2][3]
  • Dedicated VPS: $3–5/month on providers like Hetzner, Vultr, or DigitalOcean [3]

Commercial DNS alternatives for comparison:

  • NextDNS Free: 300,000 queries/month, then logs stop — data still goes to NextDNS
  • NextDNS Unlimited: $1.99/month (or $19.90/year) — unlimited queries, still a third party
  • Cloudflare Gateway (Zero Trust Free tier): up to 50 users, queries logged by Cloudflare
  • Cloudflare Gateway Pay-as-you-go: $7/user/month
  • Quad9: Free, privacy-respecting, but still a third party
  • Pi-hole + upstream public DNS: $0 software + hardware cost, but still depends on an upstream resolver seeing your queries

The math for a home user: If you’re already running a homelab with Proxmox, OPNsense, or a Raspberry Pi, deploying Unbound costs nothing and eliminates your dependence on commercial DNS providers entirely [2][3]. If you want to access your home resolver remotely over DoT/DoH, you still need a static endpoint — either a DDNS service or a cheap VPS acting as a relay [3]. That VPS costs $3–5/month but you were probably paying NextDNS anyway.

The savings are not dramatic in dollar terms. This is not a “save $1,700/year” situation. The value proposition is data sovereignty, not cost reduction.


Deployment reality check

Unbound is well-packaged and available from standard repositories on virtually every Linux and BSD distribution. The install itself is usually one command. The configuration is where things get less friendly for non-technical users.

The typical setup paths:

OPNsense (easiest, if you already have it): Unbound is the default resolver in OPNsense — you enable and configure it through the OPNsense web UI. You don’t touch the config file directly. Conway’s setup took an afternoon and resulted in a resolver that runs as part of his firewall rather than as a separate service [2].

Proxmox VM or LXC (intermediate): Install a lightweight Debian or Ubuntu container, install Unbound via apt, write a config file, set access controls for your subnet, point your network’s DHCP server at the new IP. Makwana documented this in detail — the Unbound configuration itself wasn’t the hard part. Pairing it with WireGuard for encrypted remote access added significant complexity: key generation, peer configuration for every device, DDNS setup for a dynamic home IP [3]. His estimate: “I needed to create a public and private key on every device I wanted to use.” [3]

Bare metal or Raspberry Pi: Similar to above. Works fine. Memory footprint is small — Unbound runs comfortably on a Pi Zero 2W or any similar hardware.

What you actually need:

  • A machine (physical or virtual) running Linux or BSD
  • A static IP on your local network for that machine
  • An understanding of your router’s DHCP settings so you can point devices at the new resolver
  • Patience to read the unbound.conf(5) man page and the example config

What can go sideways:

  • Remote access to your home Unbound instance requires either a static public IP (rare for residential), a DDNS setup, or a VPS relay [3]. Makwana chose a VPS; Conway used OPNsense’s built-in DoT/DoH exposure.
  • Blocklist management is manual. There’s no “subscribe to this blocklist” button — you configure local zones or use scripts to generate zone override files from blocklist sources [2].
  • A recent CVE (CVE-2025-11411) involved possible domain hijacking via promiscuous NS records — patch to 1.24.2 [website]. This is the nature of running your own infrastructure: you own the patching.
  • Unbound 1.24.2 is the current release as of this writing. NLnet Labs maintains an active security advisory page and changelog [website].

Realistic time estimate: 1–2 hours for an experienced Linux user familiar with network configuration. A full day if you’re also setting up WireGuard remote access and DDNS. Not realistic for someone without prior Linux server experience.


Pros and cons

Pros

  • Genuinely eliminates DNS middlemen. A recursive resolver doesn’t forward your queries to Google or Cloudflare — it walks the DNS tree itself. No single entity sees your full query stream [2].
  • BSD-3-Clause license. No usage restrictions, no “fair code” caveats, no commercial clauses. Use it however you want [website].
  • Ships in OPNsense and most BSD base systems. If you’re already running OPNsense, you have Unbound. No extra infrastructure [2].
  • DNSSEC validation, DoT, DoH natively. These aren’t add-ons — they’re part of the standard build [website].
  • Tiny footprint. Runs on a Raspberry Pi, a Proxmox LXC with 256MB RAM, or inside OPNsense on modest hardware.
  • Mature and actively maintained. NLnet Labs has shipped Unbound since 2007. The project has a real security advisory process and regular releases [website].
  • Query Name Minimisation and root zone caching reduce data leakage at the protocol level, not just the application level [website].
  • Works alongside Pi-hole for setups that want both blocklisting and recursive resolution.

Cons

  • No GUI. Configuration is entirely file-based. There is no dashboard, no analytics, no blocklist subscription management. If you want visibility into what your network is querying, you need to add a separate tool (or integrate with OPNsense’s reporting) [2].
  • Blocklist management is DIY. Pi-hole makes blocking trivial — subscribe to a list, done. Unbound requires manual zone configuration or scripted blocklist generation [2].
  • Remote access is non-trivial. Getting your home Unbound instance accessible from outside your network requires either a static IP, DDNS, or a VPS relay with WireGuard — all of which add complexity [3].
  • No built-in metrics or monitoring. Unbound logs to syslog. Turning that into meaningful dashboards requires external tooling.
  • Security patching is on you. CVE-2025-11411 was a domain hijacking vulnerability in recent versions [website]. Running your own resolver means owning your own patch cycle.
  • Not a Pi-hole replacement for blocklisting. Unbound is a resolver, not an ad blocker. It can do blocklisting, but it takes more work to set up and maintain than Pi-hole’s purpose-built interface [2].
  • No support contract for free users. NLnet Labs offers paid support contracts, but the free tier is community mailing lists and GitHub issues [website].

Who should use this / who shouldn’t

Use Unbound if:

  • You run OPNsense or pfSense and want a resolver that’s already bundled in.
  • You’re running a homelab and want genuine DNS independence — no Google, no Cloudflare, no ISP in the loop.
  • You’re comfortable editing config files and reading man pages.
  • You’re already running Pi-hole and want to add recursive resolution behind it for better privacy.
  • You want DNSSEC validation and modern DNS privacy standards without paying for a commercial service.

Skip it (use Pi-hole or AdGuard Home instead) if:

  • Your primary goal is ad and tracker blocking, not recursive resolution. Pi-hole and AdGuard Home have web dashboards, blocklist subscriptions, and statistics — Unbound has none of these.
  • You want a GUI to manage DNS settings.
  • You’re a non-technical founder with no Linux server experience and no plans to acquire it. This is infrastructure software.

Skip it (use NextDNS or Cloudflare Gateway instead) if:

  • You want DNS filtering with managed blocklists, a web dashboard, and analytics, and you’re comfortable with a third party seeing your query patterns.
  • You need to manage DNS policies across a team of devices without touching config files.
  • You’re running this for a company environment where GDPR-compliant managed services are preferred over self-hosted infrastructure.

Skip it (use BIND or Knot Resolver instead) if:

  • You’re running an authoritative DNS server for your own domain. Unbound is a resolver, not an authoritative server — you need NSD, BIND, or PowerDNS for that role.

Alternatives worth considering

  • Pi-hole — blocklist-based DNS sink with a web dashboard. Pairs well with Unbound (Pi-hole handles blocklisting, Unbound handles recursive resolution). Best choice if ad/tracker blocking is the primary goal and you want a UI.
  • AdGuard Home — similar to Pi-hole but written in Go, arguably cleaner UI, includes DoH/DoT support out of the box. Easier to set up than Unbound.
  • Knot Resolver — another recursive resolver from CZ.NIC, comparable in philosophy to Unbound, scripted with Lua. Less commonly installed by default on major platforms.
  • PowerDNS Recursor — production-grade recursive resolver used by ISPs. More powerful than Unbound for large-scale deployments; overkill for home use.
  • BIND (named) — the reference DNS implementation, handles both authoritative and recursive roles. More complex, designed for enterprise. If you don’t know why you’d choose it, you probably don’t need it.
  • NextDNS — commercial DNS privacy service. Managed, has a dashboard, charges per query tier. Fine if you’re OK with a third party seeing your queries and want simplicity.
  • Cloudflare 1.1.1.1 for Families — free, blocks some malware and adult content, dead simple. No self-hosting required. Cloudflare sees your queries.
  • systemd-resolved — built into most modern Linux systems, handles local DNS caching. Not a recursive resolver in the Unbound sense — still forwards to an upstream.

The realistic fork: Unbound if you want genuine recursive resolution and own your infrastructure. AdGuard Home if you want blocklisting with a UI and don’t mind a slightly less pure privacy story. NextDNS if you want managed blocklisting and you’re comfortable with a commercial third party.


Bottom line

Unbound is infrastructure software — the kind that does its job without getting in your way and without asking for anything in return. It is not a consumer product. It has no onboarding flow, no web dashboard, no blocklist subscriptions, and no support chat. What it has is a technically correct implementation of DNS privacy standards, a BSD license with no strings attached, and a 15-year track record at NLnet Labs. If your DNS currently goes to 8.8.8.8 or 1.1.1.1, switching to a self-hosted Unbound instance is the single biggest step you can take toward eliminating a third party’s visibility into your network traffic. The catch is that it requires real Linux skills to set up, and ongoing ownership of patching and configuration. For a non-technical founder who hasn’t touched a server, this is the wrong tool — AdGuard Home with a Docker one-liner is a better entry point. For someone who runs OPNsense or a homelab and wants to understand what their network is actually doing with DNS, Unbound is the correct answer.


Sources

  1. Adam Conway, XDA Developers“I’m using my home’s Unbound DNS to block trackers no matter where I am, here’s how” (Sep 15, 2025). https://www.xda-developers.com/using-home-unbound-dns-block-trackers/
  2. Samir Makwana, XDA Developers“I encrypt DNS and use Unbound as a recursive resolver to get the best of both worlds — Here’s how” (Oct 7, 2025). https://www.xda-developers.com/i-encrypt-dns-and-use-unbound-as-a-recursive-resolver/

Primary sources: