Table of Contents

Back  
 Next
, , ,

Docker - DNS Server

What Is DNS and How Does It Work – A Comprehensive Guide
I have been using Bind9 as my home LAN DNS for the past few years. I originally operated it on bare metal on my home router computer. In mid 2023 I successfully moved my Bind9 primary instance to my main home server in a container and created a slave instance in a container running on my home router computer. I created a Docker Bind9 Image using base Docker Alpine Linux images, with S6 init system.

Linux setup to forward packets

The main router must be set to forward packets! The ability to forward packets must be set / allowed, edit or add the following parameters in sudo vim /etc/sysctl.conf:

After applying these changes reboot or apply setting using sudo sysctl -p /etc/sysctl.conf

References

Bind9 Controls

I have setup a primary DNS server and secondary slave DNS server.

bind9 Docker setup

bind9 docker image

I use the s6 rc system. Notes

  1. I never had much success with the S6_KEEP_ENV when I played around with this earlier.
  2. Some of the packages are handy for debugging the container, but not required for normal package operation. Hence these are commented out.

Dockerfile

docker compose

A key point is the docker network is in host mode. (The ports are opened directly on the host and not routed from the docker internal network.)

docker-compose.yml

DNSSEC

My local DNS server is a recursive caching type only. It take local (LAN) DNS queries and answers directly for any LAN name resolution, checks the cache for any external name resolution and then if not found locally or in cache checks the specified external DNS servers to resolve names. My DNS server is not setup as a public DNS server and is not publicly accessible. Hence DNSSEC is not relevant for this local DNS server query validation.

For external name resolution Bind9 basically now defaults to automatic use of DNSSEC. This can be validated with (How To Test A Recursive Server) using:

Equally important the following commands helps confirm that invalid DNS queries have failed and do not rerun invalid IP address, which would be security risk. If dig @192.168.1.14 www.dnssec-failed.org A receives status: SERVFAIL then dig @192.168.1.14 www.dnssec-failed.org A +cd will disable DNSSEC and return the IP address showing that the SERVFAIL occurred due to DNSSEC failure.

Basic Bind9 DNSSEC configuration options

So I do not need to do any configuration for DNSSEC to function on external queries.

reference

old references

DNS over TLS (DoT)

DNS over TLS encrypts the DNS data so others can not see the specific DNS query and response. DNSSEC does not prevent viewing of the DNS data, but rather ensure prevent man in the middle attacks.

It looks like Bind9 is still working on support for DNS over TLS (DoT) for forwarders. It may work on the current developer release 9.19.

reference

Testing DNS

My local recursive servers are ns1.local.kptree.net and ns2.local.kptree.net, which are on separate serves on the local network. These DNS servers are for local LAN use only and cannot and should not be accessible from outside the LAN.


To find the version of bind9 used, anywhere from the LAN:

References

Back  
 Next