Forwarding Mode Explained: Forward Queries to Upstream DNS Server (Optionally with DNS-over-TLS)
Forwarding sends all queries to configured upstream recursive resolvers, optionally encrypting that traffic.
When to use forwarding:
You want encrypted DNS queries between your resolver and upstream servers.
Your local recursive DNS is blocked, slow, or you want to use filtering providers.
You accept trusting a third-party provider with your DNS data.
Example 1: Forward All Queries (cleartext)
File path: /etc/unbound/unbound.conf.d/pi-hole.conf
server:
interface: 127.0.0.1
port: 53
forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4
Example 2: Forward All Queries with DNS-over-TLS Encryption
Encrypt traffic to upstream servers to prevent local network/ISP snooping.
Requires specifying server hostname for TLS certificate validation.
Requires
tls-cert-bundle
to verify upstream certificates.
server:
interface: 127.0.0.1
port: 53
forward-zone:
name: "."
forward-tls-upstream: yes
forward-addr: 1.1.1.1@853#cloudflare-dns.com
forward-addr: 9.9.9.9@853#dns.quad9.net
# TLS certificate bundle location to validate upstream TLS certificates
tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt" # Debian/Ubuntu
# tls-cert-bundle: "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" # RHEL/Fedora/CentOS
Example 3: Split Forwarding for Specific Zones
Forward a particular internal domain to a specific DNS server (such as your local network’s domain), and forward the rest to encrypted upstream:
forward-zone:
name: "example.internal"
forward-addr: 192.168.1.5
forward-zone:
name: "."
forward-tls-upstream: yes
forward-addr: 1.1.1.1@853#cloudflare-dns.com
Important Notes
The hostname after
#
inforward-addr
is mandatory for correct DNS-over-TLS validation.The
tls-cert-bundle
file must contain trusted root CA certificates to validate upstream servers.If you run Unbound recursively without forwarding, no certificates or TLS configuration are needed.
Restart Unbound after modifying configuration:
sudo systemctl restart unbound
or for docker container:
docker restart unbound
Last updated