freeandopendns.eu

Our configuration

These are the files our resolver runs, so you can check our privacy claims, copy the setup, or run your own server.

Last updated: 14 October 2026. Software: Ubuntu 24.04 LTS, Unbound 1.19.2, dnsdist 1.8.3, Certbot (Let’s Encrypt). Secrets such as private keys are not part of these files.

Unbound: /etc/unbound/unbound.conf.d/resolver.conf

server:
    # Listen only on the server itself; the public reaches us via dnsdist
    interface: 127.0.0.1
    interface: ::1
    port: 53
    access-control: 127.0.0.0/8 allow
    access-control: ::1/128 allow

    # Privacy: don't reveal server details, don't log queries
    hide-identity: yes
    hide-version: yes
    use-syslog: yes
    verbosity: 0
    log-queries: no
    log-replies: no

    # Security hardening
    harden-glue: yes
    harden-dnssec-stripped: yes
    harden-referral-path: yes
    qname-minimisation: yes

    # Performance
    prefetch: yes
    num-threads: 1
    msg-cache-size: 64m
    rrset-cache-size: 128m

dnsdist: /etc/dnsdist/dnsdist.conf

-- Plain DNS listener on an unused local port (keeps port 53 free for Unbound)
setLocal("127.0.0.1:5399")

-- Allow public clients (the default only allows private networks)
setACL({"0.0.0.0/0", "::/0"})

-- Backend: the local Unbound resolver
newServer({address="127.0.0.1:53", name="unbound"})

-- DNS-over-HTTPS on port 443 (IPv4 + IPv6)
addDOHLocal("[::]:443", "/etc/dnsdist/certs/fullchain.pem", "/etc/dnsdist/certs/privkey.pem", "/dns-query")

-- DNS-over-TLS on port 853 (IPv4 + IPv6)
addTLSLocal("[::]:853", "/etc/dnsdist/certs/fullchain.pem", "/etc/dnsdist/certs/privkey.pem")

-- Basic abuse protection: drop clients sending more than 100 queries/second
addAction(MaxQPSIPRule(100), DropAction())

-- IPv4 listeners (the [::] listeners above only accept IPv6)
addDOHLocal("0.0.0.0:443", "/etc/dnsdist/certs/fullchain.pem", "/etc/dnsdist/certs/privkey.pem", "/dns-query")
addTLSLocal("0.0.0.0:853", "/etc/dnsdist/certs/fullchain.pem", "/etc/dnsdist/certs/privkey.pem")

Firewall (UFW)

ufw allow OpenSSH
ufw allow 80/tcp    # only for Let's Encrypt certificate renewal
ufw allow 443/tcp   # DNS-over-HTTPS
ufw allow 853/tcp   # DNS-over-TLS
ufw enable
ufw logging off     # no firewall logs

Certificate renewal hook: /etc/letsencrypt/renewal-hooks/deploy/dnsdist.sh

#!/bin/sh
D=/etc/letsencrypt/live/dns.freeandopendns.eu
cp "$D/fullchain.pem" /etc/dnsdist/certs/fullchain.pem
cp "$D/privkey.pem" /etc/dnsdist/certs/privkey.pem
chown _dnsdist:_dnsdist /etc/dnsdist/certs/*.pem
chmod 640 /etc/dnsdist/certs/*.pem
systemctl try-restart dnsdist

Questions or improvements: contact@freeandopendns.eu.