On running my own DNS — three months in

Self-hosting a recursive resolver is petty, useful, and mildly therapeutic.

In January I did the thing I had been threatening to do for two years and put a tiny box on my home network whose only job is to answer the question where do I find this domain. It runs unbound, it has no upstream resolver, and it has been quietly humming along in a closet since.

I expected this to be a project about privacy. It turned out to be a project about noticing: how often a single page asks fifty different domains for something, how cheerfully a smart TV phones home at three in the morning, how the modern web is mostly other people’s servers wearing a trench coat.

The setup, briefly

The hardware is unromantic — a small ARM box, a microSD card, a kettle for moral support. The software is three things in a trench coat:

# /etc/unbound/unbound.conf
server:
  interface: 0.0.0.0
  access-control: 192.168.0.0/16 allow
  hide-identity: yes
  hide-version: yes
  qname-minimisation: yes
  prefetch: yes

That’s the whole shape of it. Then a small blocklist for the most egregious telemetry, and a Grafana dashboard I check approximately never.

What changed

The web does not get faster when you run your own DNS. It just gets quieter.

Page loads are within noise of where they were. What I gained was legibility: I can see, on one screen, every domain my house touched in the last hour. That turns out to be a strange and useful kind of attention.

What I’d do differently

  • Skip the fancy dashboards on day one. Logs are enough.
  • Keep an upstream fallback for the first two weeks; the rabbit holes are deep.
  • Tell your roommates. They will be the first ones to notice when DNS goes down.

The whole exercise reminded me that infrastructure is mostly a question of taste under constraint — what to leave in, what to throw out, what to host yourself, what to let drift. Three months in, I’m keeping the box.

← Previous · A small letter to my future, less anxious self