Authoritative DNS Hosting with BIND9 on Linux

This guide provides an overview of how the Linux operating system implements the Berkeley Internet Name Domain version 9 (BIND9) daemon, commonly known as named, to deliver authoritative Domain Name System (DNS) services. It details the underlying process model, directory architecture, configuration of forward and reverse authoritative zones, disabling recursion for security, and operational maintenance using system utilities.

System-Level Daemon Architecture

In Linux, BIND9 is managed via systemd under the service unit named.service (Red Hat/CentOS/Fedora) or bind9.service (Debian/Ubuntu). When initialized, the binary /usr/sbin/named starts as root to bind to privileged network sockets on port 53 for both UDP and TCP across IPv4 and IPv6 interfaces.

Immediately after socket binding, the process drops privileges to an unprivileged system user (typically named or bind) to adhere to the principle of least privilege. Linux distributions often enforce security boundaries around this daemon using Mandatory Access Control (MAC) frameworks such as AppArmor or SELinux, and some deploy the daemon within a chroot jail directory (such as /var/named/chroot/) to limit file system visibility.

Configuration Hierarchy

BIND9 organizes its behavior through text-based configuration files, primarily centered around /etc/bind/named.conf (Debian/Ubuntu) or /etc/named.conf (RHEL/CentOS).

To function strictly as an authoritative DNS server, recursion must be disabled globally to prevent the server from functioning as an open resolver and being used in DNS amplification attacks:

options {
    directory "/var/cache/bind";
    listen-on { any; };
    listen-on-v6 { any; };
    recursion no;
    allow-query { any; };
    allow-transfer { none; };
};

Authoritative Zone Definition

An authoritative zone statement declares that the server holds the definitive mapping for a domain space. BIND uses type primary; (or the legacy syntax type master;) to designate primary authority:

zone "example.com" {
    type primary;
    file "/etc/bind/zones/db.example.com";
    allow-transfer { 192.0.2.2; }; // IP of secondary DNS
};

Reverse lookup zones, which translate IP addresses back to domain names, are declared identically using standard in-addr.arpa or ip6.arpa naming conventions:

zone "2.0.192.in-addr.arpa" {
    type primary;
    file "/etc/bind/zones/db.192.0.2";
};

Zone File Mechanics

Zone files define the resource records for the authoritative domain. Every zone file requires a Start of Authority (SOA) record and at least one Name Server (NS) record.

$TTL    86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                        2023102701 ; Serial (YYYYMMDDNN)
                        3600       ; Refresh
                        1800       ; Retry
                        604800     ; Expire
                        86400 )    ; Negative Cache TTL

; Name Servers
@       IN      NS      ns1.example.com.
@       IN      NS      ns2.example.com.

; Host Records
ns1     IN      A       192.0.2.1
ns2     IN      A       192.0.2.2
@       IN      A       192.0.2.10
www     IN      CNAME   example.com.

The serial number format (YYYYMMDDNN) tells secondary (slave) nameservers when data has changed. Whenever the zone is modified, incrementing the serial causes secondary servers to request a zone transfer over TCP port 53 via AXFR or IXFR.

Validation, Service Control, and Maintenance

Linux provides native diagnostic utilities bundled with BIND9 to validate files before loading them into memory:

Runtime administration is executed using the Remote Name Daemon Control (rndc) utility, which connects locally over TCP port 953:

System telemetry and query events are captured via the Linux logging infrastructure (rsyslog or systemd-journald), or routed to isolated files via BIND's internal logging directive for real-time monitoring and auditing.