Clean djbDNS DNS Server On CentOS - dnscache And tinydns - A To Z

What is djbDNS? And why do we use djbDNS? There is a new point of view to serve the dns service - each of the dns server functionalities is a separate service, like authority, cache, forward and so on. The other difference is the daemon-tools which will rapidly restart services to prevent zombies.



CentOS 5.4 clean installation

Log in as root.

# yum update
# yum install gcc
# mkdir pkg
# cd pkg

The first step is to install the daemon-tools:

# cd ~/pkg
# wget
# gunzip daemontools-0.76.tar
# tar -xpf daemontools-0.76.tar
# rm -f daemontools-0.76.tar
# cd admin/daemontools-0.76
# vi src/conf-cc

Append the following line at the end of the gcc line:

-include /usr/include/errno.h
# ./package/install

One other package we need to prepare for djbdns to be functional is ucspi:

# cd ~/pkg
# wget
# gunzip ucspi-tcp-0.88.tar
# tar -xf ucspi-tcp-0.88.tar
# cd ucspi-tcp-0.88
# vi src/conf-cc

Append the following line at the end of the gcc line:

-include /usr/include/errno.h
# make
# make setup check

The next step is the document publication:

# cd ~/pkg
# wget

Next we will unzip docs under /doc:

# gunzip < doc.tar.gz | (cd /; tar -xf -)

Use the following script to merge in system docs:

for i in packages commands cfunctions fileformats
  sort -f /dev/null `find /doc/merge -name $i.html` > /doc/$
  mv /doc/$ /doc/$i.html

Save script into a file:

# chmod +x 
# ./
# cd ~/pkg
# wget
# gunzip djbdns-1.05.tar
# tar -xf djbdns-1.05.tar
# cd djbdns-1.05
# vi src/conf-cc

Append the following line at the end of the gcc line:

-include /usr/include/errno.h
# make
# make setup check

All compiling gets done.

The next step is the dns server configuration.



Create two system user accounts:

# useradd -d /var/dnscache -s /bin/false dnscache
# useradd -d /var/dnscache -s /bin/false dnslog

Configure the cache:

# dnscache-conf dnscache dnslog /var/dnscache/dnscache <listen-IP>

Example: dnscache-conf dnscache dnslog /var/dnscache/dnscache

Allow the rest of your network to query dnscache:

# touch /var/dnscache/dnscache/root/ip/<Net-ID>

Example: touch /var/dnscache/dnscache/root/ip/192.168

Add dnscache to the list of services to be monitored by svscan:

# ln -sf /var/dnscache/dnscache /service/

If you like ms-windows... you can make a reboot to be sure that all the world is in place.

There is a point here that your are still not able to query from your cache server, because your clients are now able to be resolved in reverse mode.

As mentioned before it's one of the dns-cache security features to reverse-check clients. So in the next step we will work on tinydns to act for us.



Once again, we need two system user accounts:

# useradd -d /var/dnscache -s /bin/false tinydns
# useradd -d /var/dnscache -s /bin/false tinylog
# tinydns-conf tinydns tinylog /var/dnscache/tinydns

Now it's time to add nodes into dns database:

# cd /var/dnscache/tinydns/root
# ./add-ns internal
# ./add-ns
# ./add-mx internal
# ./add-host ns.internal
# ./add-host mail.internal
# ./add-alias unagi.internal
# make

These nodes with go to the database file /var/dnscache/tinydns/root/data that you are able to edit manually.

The last step is the dns service startup:

  # ln -sf /var/dnscache/tinydns /service
Share this page:

Suggested articles

7 Comment(s)

Add comment


By: Bob Gustafson

See Correction:

# cd djbdns-1.05

# vi conf-cc

By: Anonymous

i got this warning.

 svc -u /service/dnscache
svc: warning: unable to control /service/dnscache: supervise not running

By: Chris @ Sift

make sure you have added the line to end of /etc/inittab


save and run the command

init q 

this brings up supervise - also if you want to stop supervise anytime just edit /etc/inittab has out and run

init q again to turn off supervise.

By: Arif Mazlan

If u are on Centos 6..there are new "init" script replacement called upstart. you have to create config file in /etc/init/daemontools.conf

 # daemontools

start on runlevel [2345]

stop on runlevel [016]


exec /command/svscanboot

to start the daemontools run below command

initctl start daemontools 


By: Bob Gustafson

See correction:

# cd ucspi-tcp-0.88

# vi conf-cc

By: bobgus

The shell 'csh' is pretty old. It may be the case that your system has a later shell, such as 'sh'.

 If 'which csh' shows that you do not have 'csh', then modify the file:


replace 'csh' with 'sh'

By: Munga Lal shaw

Replacement of initab is systemctl on CentOS 7 . To start the daemontools on centos7 using systemctlCentOS 7 uses systemdCreate a new file /etc/systemd/system/daemontools.service, with the startup code in it:

[Unit]Description=daemontools Start


[Service]Type=simpleUser=rootGroup=rootRestart=alwaysExecStart=/command/svscanboot /dev/ttyS0TimeoutSec=0


Start the service:

systemctl start daemontools.service

Test that it is running:

systemctl status daemontools.service

Enable it to start at boot:

systemctl enable daemontools.service