Setup unbound as caching DNS on OpenBSD

The purpose of a LAN cache for DNS in is to allow queries from LAN clients to end up in the DNS cache rather than the originating DNS. This will help with performance and lower traffic towards to originating DNS.

To do this we need a set of steps ...

  1. Setup the caching DNS service
  2. Make sure router make use of local DNS service
  3. Make sure local clients get informed of caching DNS server via DHCP

It is assumed that dhcpd is already setup, otherwise take a look at Setting up a DHCP server on OpenBSD 6.7.

Install was made on OpenBSD 7.2.

Setup unbound

unbound(8) in part of base system so it does not need to be installed.

Default configuration file is /var/unbound/etc/unbound.conf.

cat /var/unbound/etc/unbound.conf 

# $OpenBSD: unbound.conf,v 1.21 2020/10/28 11:35:58 sthen Exp $

	do-ip6: no

	access-control: allow
	access-control: allow
	access-control: ::0/0 refuse
	access-control: ::1 refuse


        name: "."

Just make sure that interface, access-control and forward-addr is configured for your local network and originating DNS servers. I am using sample values here.

You may test config by

unbound -d -vv -c /var/unbound/etc/unbound.conf

If it works. Start and enable unbound using rcctl.

rcctl start unbound
rcctl enable unbound

Use unbound in router

To force router to make use of local unbound server the loopback address is prepended in dhclient.conf.

cat /etc/dhclient.conf
prepend domain-name-servers;

This means that local unbound service is used before other DNS servers provided to router via DHCP.

Add local DNS to DHCP server

To inform local clients of new caching DNS server this server (assumed with IP must be added to DNS server list of you DHCP server.

cat /etc/dhclient.conf
option  domain-name-servers,,;