Linux and UNIX HOW-TO: Create simple master and slave DNS Servers

The procedure below can be used with any UNIX/LINUX flavor. All the machines in this example are using Red Hat Enterprise Linux 5.

For simplicity purposes, we will assume the server will resolve names on the LAN: 192.168.0.1/24, and the LAN has 4 workstations connected:
station1.example.com: 192.168.0.1
station2.example.com: 192.168.0.2
station3.example.com: 192.168.0.3
station4.example.com: 192.168.0.4

We will configure “station1.example.com” as a master DNS server, and “station2.example.com” as a slave DNS Server.

We will start by configuring the master DNS Server:

1. The package needed for this configuration is “BIND”. Check if it’s available:

[root@station1 named]# rpm -qa|grep bind
ypbind-1.19-12.el5
bind-libs-9.3.6-4.P1.el5
bind-utils-9.3.6-4.P1.el5
bind-9.3.6-4.P1.el5
[root@station1 named]# 

2. Edit “/etc/named.conf” as follows:

[root@station1 ~]# vi /etc/named.conf
options {
directory "/var/named";
};

zone "example.com" {
type master;
file "forward.zone";
};

zone "0.168.192.in-addr.arpa" {
type master;
file "reverse.zone";
};
[root@station1 ~]#

In the file above, we first specified that the Host Name to IP records will be stored in files under the directory “/var/named”, and then we created a zone for forward mapping (Host Name to IP mapping), and a zone for reverse mapping ( IP to Host Name mapping). Since we only have one LAN (one domain: example.com), so we need two zones only.

3. Create the forward zone file “forward.zone” under “/var/named” :

[root@station1 ~]# cd /var/named
[root@station1 named]# vi forward.zone 
$TTL    86400
@               IN      SOA     station1.example.com.   root    (
                                                42      ; serial (d. adams)
                                                3H      ; refresh
                                                15M     ; retry
                                                1W      ; expiry
                                                1D )    ; minimum
                IN      NS      station1.example.com.
station1        IN      A       192.198.0.1
station2        IN      A       192.168.0.2
station3        IN      A       192.198.0.3
station4        IN      A       192.168.0.4

[root@station1 named]#

In the file above, we specified that the “SOA” (start of authority) is “station1.example.come”, and that error messages be sent to “root”.

Then we specified that the “NS” (Domain Name Server) is “station1.example.com.” Then we added the “A” (Address) of each machine on the network.

4. Create the forward zone file “reverse.zone” under “/var/named” :

[root@station1 ~]# cd /var/named
[root@station1 named]# vi reverse.zone 
$TTL    86400
@               IN      SOA     station1.example.com    root    (
                                                42      ; serial (d. adams)
                                                3H      ; refresh
                                                15M     ; retry
                                                1W      ; expiry
                                                1D )    ; minimum
                IN      NS      station1.example.com.
1               IN      PTR     station1.example.com.
2               IN      PTR     station2.example.com.
3               IN      PTR     station3.example.com.
4               IN      PTR     station4.example.com.

[root@station1 named]# 

In the reverse file, again we specified the same “SOA” and “NS”. After that, we specified the “PTR” (pointer), so that it will be appended to “0.168.192.in-addr.arpa”. For example, the record “192.168.0.4″ when queried to the DNS Server, it will be translated as “4.0.168.192.in-addr.arpa”, and then mapped to “station4.example.com.”

5. Make the sure that “forward.zone” and “reverse.zone” have the right owner/permission:

[root@station1 named]# ls -l
total 24
drwxrwx--- 2 named named 4096 Jul 29  2009 data
-rw-r--r-- 1 root  root 239 Oct 17 16:57 forward.zone
-rw-r--r-- 1 root  root  250 Oct 17 16:55 reverse.zone
drwxrwx--- 2 named named 4096 Jul 29  2009 slaves
[root@station1 named]#

Since the daemon “named” will be using these file, the permission should be changed accordingly:

[root@station1 named]# chgrp named *.zone
[root@station1 named]# ls -l
total 24
drwxrwx--- 2 named named 4096 Jul 29  2009 data
-rw-r--r-- 1 root  named  239 Oct 17 16:57 forward.zone
-rw-r--r-- 1 root  named  250 Oct 17 16:55 reverse.zone
drwxrwx--- 2 named named 4096 Jul 29  2009 slaves
[root@station1 named]#

6. Configure all the clients to use “station1″ as a DNS Server by editing “/etc/resolv.conf”:

[root@station1 ~]# vi /etc/resolv.conf 
search example.com
nameserver 192.168.0.1
[root@station1 ~]#

Make sure to configure the same on all the machines: station2, station3, and station4.

7. Start the service:

[root@station1 ~]# service named start
Starting named:                                            [  OK  ]
[root@station1 ~]#

Make the sure the service starts automatically after each reboot:

[root@station1 ~]# chkconfig named on
[root@station1 ~]# chkconfig named --list
named           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@station1 ~]# 

8. Test the DNS functionality:

From Station3, for example, we can run the following tests:

[root@station3 ~]# nslookup station2
Server:         192.168.0.1
Address:        192.168.0.1#53

Name:   station2.example.com
Address: 192.168.0.2

[root@station3 ~]# 
[root@station3 ~]# nslookup station1
Server:         192.168.0.1
Address:        192.168.0.1#53

Name:   station1.example.com
Address: 192.198.0.1

[root@station3 ~]# nslookup 192.168.0.4
Server:         192.168.0.1
Address:        192.168.0.1#53

4.0.168.192.in-addr.arpa        name = station4.example.com.

[root@station3 ~]# 

Now we have successfully configured “station1″ as a master (primary) DNS Server. The next step is to configure “station2″ as a slave (secondary) DNS Server. It’s very easy to do so, as only one file needs to be edited on “station2″:

1. Configure “/etc/named.conf” on “station2″ :

[root@station2 ~]# vi /etc/named.conf 
options {
directory "/var/named/slaves";
};

zone "example.com" {
type slave;
file "forward.zone";
masters { 192.168.0.1; };
};

zone "0.168.192.in-addr.arpa" {
type slave;
file "reverse.zone";
masters { 192.168.0.1; };
};

[root@station2 ~]# 

In “/var/named.conf”, we simply specified that the files should go under “/var/named/slaves”, and the the master DNS server is “192.168.0.1″ (i.e. station1) .

2. The next step is start the DNS Service on “station2″:

[root@station2 ~]# service named start
Starting named:                                            [  OK  ]
[root@station2 ~]# 
[root@station2 ~]# chkconfig named on
[root@station2 ~]# chkconfig named --list
named           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@station2 ~]# 

3. Check that all the configuration files have been automatically copied from the master DNS Server:

[root@station2 ~]# ls /var/named/slaves/
forward.zone  reverse.zone
[root@station2 ~]# 
[root@station2 ~]# cat /var/named/slaves/forward.zone 
$ORIGIN .
$TTL 86400      ; 1 day
example.com             IN SOA  station1.example.com. root.example.com. (
                                42         ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      station1.example.com.
$ORIGIN example.com.
station1                A       192.198.0.1
station2                A       192.168.0.2
[root@station2 ~]# cat /var/named/slaves/reverse.zone 
$ORIGIN .
$TTL 86400      ; 1 day
0.168.192.in-addr.arpa  IN SOA  station1.example.com.0.168.192.in-addr.arpa. root.0.168.192.in-addr.arpa. (
                                42         ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      station1.example.com.
$ORIGIN 0.168.192.in-addr.arpa.
1                       PTR     station1.example.com.
2                       PTR     station2.example.com.
[root@station2 ~]# 

4. Now, on all the clients (station1, station2, station3, and station4 ), Edit the file “/etc/resolv.conf” to specify that “station2″ is a slave DNS Server:

[root@station1 ~]# cat /etc/resolv.conf 
search example.com
nameserver 192.168.0.1
nameserver 192.168.0.2
[root@station1 ~]# 

I hope DNS is clear now … :)

This entry was posted in DNS, DNS Server, HOW-To, Master DNS, network, Red Hat, RHCE, RHEL, Slave DNS, Unix and tagged , , , , , , , , , , , . Bookmark the permalink.

5 Responses to Linux and UNIX HOW-TO: Create simple master and slave DNS Servers

  1. Nice and simple explanation , thanks. ..

    Do you have any similar tips on AD integration, AFTER windows 2003. ?
    Have things changed after win 2003 and “Microsoft Identity Management for Unix” on Windows 2003 SP2 server ?
    Best regards ..
    Martin RØnde Andersen, fellow unix/linux geek

  2. Hamdan says:

    Hi Martin,

    thanks for your comment. Unfortunately I have no tips for AD, specially after 2003. I never used it :)

    Thanks for passing by :)

  3. Pingback: BIND Question

  4. Azad Rasel says:

    Many many thanks to Hamdan and also to Sahara Geeks. It is an excellent for the beginners and the style of presentation is simply awesome. I am from Bangladesh. I wish you all the best. Keep it up.

  5. Hamdan says:

    Thanks for your comment Azad, I’m glad that you found our site useful :) I will keep on writing then :)

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>