All devices connected to the internet contain Unique IP Addresses that assist in communicating with each other. These IP addresses come in numbers like for IPv4 and 2400:cb00:2048:1::c629:d7a2 for IPv6. Humans find it easy to remember names than IP addresses while devices use these IP addresses to communicate. To curb this, this is where DNS comes in. DNS which stands for Domain Name System resolves human-readable names referred to as domain names such as to a machine-readable IP address.


BIND which stands for Berkeley Internet Name Domain is a type of DNS server that is free and open source. It enables you to publish DNS information on the internet and resolve DNS queries for users. BIND is among the first, oldest, and most commonly deployed solutions that most network engineers are familiar with. BIND has a list of components that include, Name server, Lightweight resolver, and Name Server tools.

Some of the features of BIND DNS include;

  • Recursive DNS – Fetch data from DNS servers on behalf of DNS clients.
  • Dynamic update – add or delete records on primary servers automatically without any specific kind of message.
  • Authoritative DNS – publishes DNS records under the Servers Authoritative control.
  • Split DNS – set up different views of the DNS space to internal and external resolvers.
  • DNS Notify – allows primary DNS servers to inform secondary servers in case of a change in zone data.
  • DNS Security Extensions (DNSSE) – cryptographically sign and verify authoritative data on caching server.
  • Transaction SIGnatures (TSIG) – cryptographically sign DNS messages.

BIND is customizable and lets you create your custom tools with Perl or Python. It also has a large support community with a vast knowledge base for troubleshooting. You can also tailor BIND to fit your organization’s requirements.

This guide will show you how to Configure Master BIND DNS on CentOS 9|AlmaLinux 9|RHEL 9 systems.

Install BIND DNS on CentOS 9|AlmaLinux 9|RHEL 9

Update your system packages.

sudo dnf update -y

Install BIND and its utilities.

sudo dnf install bind bind-utils

Start and enable the named service.

sudo systemctl enable --now named

Check for the status of the service.

$ systemctl status named
 named.service - Berkeley Internet Name Domain (DNS)
     Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor pre>
     Active: active (running) since Wed 2022-06-29 13:48:57 EAT; 19s ago
    Process: 6300 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == >
    Process: 6302 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (>
   Main PID: 6303 (named)
      Tasks: 6 (limit: 48809)
     Memory: 34.4M
        CPU: 66ms
     CGroup: /system.slice/named.service
             └─6303 /usr/sbin/named -u named -c /etc/named.conf

Configure Master BIND DNS on CentOS 9|AlmaLinux 9|RHEL 9

Ensure you can Ping your server by hostname, If not add it to your hosts’ file

sudo vi /etc/hosts

Add your domain name.

Save and exit the file.

Create a backup of the original configuration file.

sudo cp /etc/named.conf /etc/named.conf.orig

Open the file with your preferred text editor.

sudo vi /etc/named.conf

Now edit the configuration file with the following edits. Edit the listen-on, listen-on-v6, and directory lines as shown below. You can also add Access Control Lists (ACL) that define host groups that are permitted to access the name server.

acl clients {;};

options {
        listen-on port 53 { any; };

        listen-on-v6 port 53 { any; };

        directory       "/var/named";

Set the allow-query to your network address to allow IP on the network to access the server.

allow-query { localhost; clients; };
allow-recursion { localhost; clients; };

We are going to create a zone file in the directory /etc/named/Zfile.zones. thus we can include it in the configuration file as follows.

include "/etc/named/Zfile.zones";

Save and exit the file.

Create Zone Entries

DNS zone is a portion of the DNS namespace that is managed by a specific organization or administrator. All the Zone configurations are stored in a DNS zone file.

Create a new zones file to add the configuration.

sudo vi /etc/named/Zfile.zones

Add the following to the file. Note the domain names should match yours.

//forward zone
zone "" IN {
        type master;
        file "";
        allow-update { none; };

//backward zone
zone "" IN {
        type master;
        file "";


Save and exit the file. The file contains configurations for the forward and backward zone entries.

  • is the domain name for which the server looks up the IP address.
  • type shows the type of the server.
  • is the Foward lookup database file.
  • is the reverse lookup name – this essentially does the opposite of the forward lookup.
  • is the reverse lookup database file.

Creating Zone Files

We will first create the forward zone database file in the /var/named/ directory.

sudo vi /var/named/

Add the following entries. The times of units are most of the time specified in seconds. However, they can be appended in abbreviations that specify the units of time. For example, M for Minutes, H for hours, D for Days, and W for weeks.

$TTL    86400
@	 IN	SOA (
		42         ; serial
		3H         ; refresh
		15M        ; retry
		1W         ; expiry
		1D )       ; minimum
	           IN NS

dns               IN A  
station1        IN A  
station2        IN A  

Create the backward zone database file in the /var/named/ directory.

sudo vi /var/named/

Append the following entries. The times are specified in seconds.

$TTL    86400
@	IN	SOA (
		1997022700    ; serial
		28800             ; refresh
		14400             ; retry
		3600000         ; expire
		86400             ;minimum
	  IN	    NS
101     IN      PTR
102     IN      PTR

The entries in the configuration file stand for the following.

  • TTL stands for time-to-live of the Resource record. It is an integer unit in seconds used by resolvers when they cache resource records.
  • @ the at-sign represents the current origin
  • SOA stands for the State of Authority. It is a type of record that stores important information about a domain.
  • IN stands for Internet
  • Serial is the serial number of the zone. It is the version number of the SOA record.
  • Refresh is the amount of time (in seconds) the secondary server waits to ask the primary server for the SOA record update.
  • Retry is the amount of time a serve waits to ask an unresponsive primary server for data again.
  • Expire is the amount of time a secondary server waits to get a response from a primary server before it stops responding to queries from the zone.
  • Minimum is the amount of time a nameserver should cache a negative response.
  • NS is the nameserver record that indicates which DNS server is authoritative for that domain
  • A record stands for an ‘address’ that indicates the IPv4 address of a given domain.
  • PTR record id the Pointer record that provides the domain name associated with the given IP address.

Set secure permissions on the zone files

sudo chown root:named /var/named/ /var/named/
sudo chmod 640 /var/named/ /var/named/

Restart the BIND service

sudo systemctl restart named

Verify the validity of the configuration. If it is correct, it should return nothing.

sudo named-checkconf /etc/named.conf

Verify the forward zone file.

$ sudo named-checkzone /var/named/
zone loaded serial 42

Verify the backward zone file

$ named-checkzone /var/named/

zone loaded serial 1997022700

Gather the DNS configuration using the dig command.

$ dig @localhost

; <<>> DiG 9.16.23-RH <<>> @localhost
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57892
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 233795accfff5dd80100000062bc582ba5f199525fcdcac3 (good)
;		IN	A

;; AUTHORITY SECTION:		3600	IN	SOA 2281833404 10000 2400 604800 3600

;; Query time: 440 msec
;; SERVER: ::1#53(::1)
;; WHEN: Wed Jun 29 16:48:27 EAT 2022
;; MSG SIZE  rcvd: 151

Other DNS records

DNS records are instructions in the DNS servers that provide information about a domain, including the IP addresses. In this guide, we have used the SOA, A, NS, and PTR records. Other records include;

  • AAAA record – contains the IPv6 records of a domain.
  • MX record – stands for Mail Excahnge. It directs emails to an email server. They control the delivery of emails.
  • CNAME record – stands for Canonical Name. It forwards one domain to another domain without the IP address.
  • SRV record – stands for service. It specifies ports for specific services like VoIP.
  • TXT record – admin stores text notes in the record.


From this guide, we have Configured Master BIND DNS on CentOS 9|AlmaLinux 9|RHEL 9. BIND’s stability allows it to be used in millions of production DNS Servers for operation. It has good platform support for Linux, macOS, Windows, OpenBSD, and FreeBSD. It is free upfront and has large community support that provides a global knowledge base.

More on RHEL 9:



Please enter your comment!
Please enter your name here