How to install and configure Bind DNS Cluster in Linux

1. Introduction

Short for Domain Name System (or Service or Server), an internet service that converts domain names into IP addresses. Domain names are much easier to remember than IP addresses.

Information from all the domain name servers across the Internet are gathered together and housed at the Central Registry. Host companies and Internet Service Providers interact with the Central Registry on a regular schedule to get updated DNS information.

2. Requirements

For master DNS Server:

OS : Centos 7
IP Address : 192.168.1.18

For slave DNS Server:

OS : Ubuntu 14.04
IP Address : 192.168.1.19

3. Setup Master DNS Server

Install the bind packages

# yum install bind* -y

To configure the DNS server follow the below step.

# vi /etc/named.conf


//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { 127.0.0.1; 192.168.1.18; }; ## MASTER ##  
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; 138.201.3.0/24; }; ## RANGE ##
        allow-transfer { localhost; 192.168.1.19; }; ## SLAVE ##
        /*

.
.
.
.
zone "." IN {
        type hint;
        file "named.ca";
};

zone "inhouse.inc" IN {
type master;
file "forward.zone";
allow-update { none; };
};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

To create zone files as mentioned in /etc/named.conf, follow the steps below.

Important: Please make sure that you replace ‘@’ with ‘inhouse.inc.’ in both the zone files.

Create forward zone file.

# vi /var/named/forward.zone

$TTL 86400
@   IN  SOA     masterdns.inhouse.inc. root.inhouse.inc. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          masterdns.inhouse.inc.
@       IN  NS          secondarydns.inhouse.inc.
@       IN  A           192.168.1.18
@       IN  A           192.168.1.19
masterdns       IN  A   192.168.1.18
secondarydns    IN  A   192.168.1.19

Create reverse zone file.

# vi /var/named/reverse.zone

$TTL 86400
@   IN  SOA     masterdns.inhouse.inc. root.inhouse.inc. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          masterdns.inhouse.inc.
@       IN  NS          secondarydns.inhouse.inc.
@       IN  PTR         inhouse.inc.
masterdns       IN  A   192.168.1.18
secondarydns    IN  A   192.168.1.19
18     IN  PTR         masterdns.inhouse.inc.
19     IN  PTR         secondarydns.inhouse.inc.

Add the following line in /etc/resolv.conf


# vi /etc/resolv.conf

nameserver 192.168.1.18

Now start the named service


# systemctl named start
# chkconfig named on

Verify DNS configuration and zone files for any syntax errors

# named-checkconf /etc/named.conf 

# named-checkzone inhouse.inc /var/named/forward.zone

Output is as follows:

zone inhouse.inc/IN: loaded serial 2011071001
OK

Now we need to check the reverse zone.

# named-checkzone inhouse.inc /var/named/reverse.zone

Output is as follows:

zone inhouse.inc/IN: loaded serial 2011071001
OK

Now you can test the DNS server using the following commands. Testing with any one of the command is fine.


$~ dig masterdns.inhouse.inc

; <<>> DiG 9.9.5-3ubuntu0.1-Ubuntu <<>> masterdns.inhouse.inc
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57668
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;masterdns.inhouse.inc.		IN	A

;; AUTHORITY SECTION:
inhouse.inc.		86400	IN	SOA	ns1.inhouse.inc. sherin.syslint.com. 2015112001 86400 7200 3600000 86400

;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Fri Jan 15 02:23:30 IST 2016
;; MSG SIZE  rcvd: 108

Do an nslook for the domain name inhouse.inc


# nslookup inhouse.inc

Server:		192.168.1.18
Address:	192.168.1.18#53

Name:	inhouse.inc
Address: 192.168.1.18
Name:	inhouse.inc
Address: 192.168.1.19

4. Setup slave DNS server

Install the bind packages.

# apt-get install bind9 bind9utils bind9-doc

To configure slave DNS server follow the below step.

# vi /etc/bind/named.conf

Make sure it contains the following lines. If not, add them.

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

Save and quit the file.


# vi /etc/bind/named.conf.local

Add the following lines to it


zone"inhouse.inc" {
        type slave;
        file "/var/named/forward.zone";
        masters { 192.168.1.18; };
 };

Add the following line in /etc/resolv.conf


# vi /etc/resolv.conf

nameserver 192.168.1.18

Give permissions and change ownership


# chmod -R 755 /etc/bind
# chown -R bind:bind /etc/bind

Now restart the bind service

# service bind9 restart

Add dns-nameservers in /etc/network/interfaces


# vi /etc/network/interfaces

auto venet0:0
iface venet0:0 inet static
        address 192.168.1.19
        netmask 255.255.255.0
        broadcast 138.201.3.255
        gateway 138.201.3.1
        dns-nameservers 192.168.1.18
        dns-nameservers 192.168.1.19
        dns-search home

Now test the DNS server using the following commands. Testing with any one of the command is fine.


$~ dig masterdns.inhouse.local

; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> masterdns.inhouse.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 21775
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;masterdns.inhouse.local.	IN	A

;; AUTHORITY SECTION:
.			6364	IN	SOA	a.root-servers.net. nstld.verisign-grs.com. 2016011401 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 192.168.1.19#53(192.168.1.19)
;; WHEN: Fri Jan 15 00:02:14 MSK 2016
;; MSG SIZE  rcvd: 127

--------------------------------------------------

$~ dig secondarydns.inhouse.local

; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> secondarydns.inhouse.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 2592
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;secondarydns.inhouse.local.	IN	A

;; AUTHORITY SECTION:
.			6600	IN	SOA	a.root-servers.net. nstld.verisign-grs.com. 2016011401 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 192.168.1.19#53(192.168.1.19)
;; WHEN: Fri Jan 15 00:02:50 MSK 2016
;; MSG SIZE  rcvd: 130

----------------------------------------
# nslookup inhouse.inc
Server:		192.168.1.19
Address:	192.168.1.19#53

Name:	inhouse.inc
Address: 192.168.1.18
Name:	inhouse.inc
Address: 192.168.1.19

5. Finishing point

BIND includes a utility called rndc which allows command line administration of the named daemon from the localhost or a remote host.

You can now reload rndc on both servers.

# rndc reload

Leave a Reply

Your email address will not be published. Required fields are marked *