DNS Server dengan djbdns
Kenapa dipilih djbdns? karena djbdns mudah :-), keamanan baik, resource kecil, dan
stabil (reliability baik), dan saya "muak" dengan BIND hihihihi.. :-) 
karena saya juga sudah jatuh cinta dari dulu sama semua program buatan DJB 

Links dokumentasi di 
author of djbdns 
people contribution atau
BIND2djbdns howto(?)
UNIX manual dari djbdns (adajuga manual ucspi-tcp dan daemontools) di sini
Lihat grafik ns record http://www.foobar.tm/dns/dnsbajaj.cgi 

I. DNS Internal & Eksternal Cache Server
Permintaan resolving DNS dari localhost yang diminta oleh berbagai program
seperti MTA (Mail Tranfer Agent) ataupun browser dll, dikirimkan ke host
lain yang tertera pada baris nameserver pada file /etc/resolv.conf
yang kemudian server tsb mencari di cache-nya tau meminta pada server DNS.
 
Nah sekarang kita ingin query DNS dari localhost ini ditangani oleh server
kita sendiri (internal cache). Dan karena kita punya jaringan lain, kita
juga ingin cache DNS ini bisa digunakan oleh komputer di jaringan kita
(eksternal cache).

Cara nginstal djbdns buat internal/eksternal chache di Linux/FreeBSD 
gampang koq, gini: 

Ambil paket2 semua program dari DJB yang diperlukan yaitu: djbdns,
daemontools.Jika menginginkan menggunakan axfrdns atau axfr-get perlu juga 
paket ucspi-tcp. Untuk kasus sebagai eksternal/internal cache paket ucspi-tcp 
gak perlu.

TIPS :
Daemontools juga sebenarnya tidak wajib, anda bisa juga menjalankan
djbdns tanpa daemontool langsung saja kasih perintah `/service/tinydns/run &

Paket-paket bisa didapatkan di:

	http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
	http://cr.yp.to/daemontools/daemontools-0.70.tar.gz
	http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz

Lalu ekstrak paket dan install semuanya:

	tar zxvf daemontools-0.70.tar.gz
	( cd daemontools-0.70; make setup check )
	tar zxvf djbdns-1.05.tar.gz
	( cd djbdns-1.05; make setup check )
	tar zxvf ucspi-tcp-0.88.tar.gz
	( cd ucspi-tcp-0.88; make setup check )

abis itu buat account user untuk program ini yaitu dnslog dan dnscache

	useradd -g nogroup -s /bin/false dnscache
	useradd -g nogroup -s /bin/false tinydns
	useradd -g nogroup -s /bin/false axfrdns 
	useradd -g nogroup -s /bin/false dnslog

atau untuk FreeBSD

	pw useradd dnslog -g nofiles -s /nonexistent
	pw useradd dnscache -g nofiles -s /nonexistent
	pw useradd tinydns -g nofiles -s /nonexistent
	pw useradd axfrdns -g nofiles -s /nonexistent	

buat direktori /service untuk daemontools

	mkdir /service

untuk internal cache buat file2 konfirusasi dan startup dengan perintah:
    
    dnscache-conf dnscache dnslog /etc/dnscache 127.0.0.1

setelah itu untuk eksternal cache file2 di etc/dnscachex dengan perintah:


	dnscache-conf dnscache dnslog /etc/dnscachex 167.205.26.30

dengan 167.205.26.30 adalah IP komputer yang akan dijadikan DNS cache
yaitu IP komputer yang sedang diinstall.

Lalu buat file /service/dnscache yang me-link ke /etc/dnscache dan file
/service/dnscachex yang me-link ke /etc/dnscachex

	ln -s /etc/dnscache /service
	ln -s /etc/dnscachex /service

File2 di /etc/dnscache atau /etc/dnscachex terdiri dari file2 startup
bernama "run" yang akan dijalankan oleh supervise (yaitu terdiri dari
file2 startup untuk program dnscache dan program logging), file2
konfigurasi, file2 status dan file2 hasil proses logging. 

File log disimpan di direktori /etc/dnscache/log/main, jika ingin merubah
letak direktori log misalnya menjadi di /var/log/dnscache maka buat
direktori tsb lalu ubah tulisan "./main" menjadi "/var/log" di file
/etc/dnscache/log/run. begitu pula untuk konfigurasi eksternal cache bisa
diubah file /etc/dnscachex/log/run

Agar cache bisa diakses dari remote misalnya untuk seluruh IP 172.16.*
maka tambahkan:

	touch /etc/dnscachex/root/ip/172.16

TIPS:
misalkan kita ingin DNS cache kita bisa diakses oleh range IP 167.205.26.65-125
gunakan perintah 

	touch 167.205.26.65 
	for X in `awk 'BEGIN { for( i=65; i<=125; i++ ) print i }'` 
	do
	    ln 10.2.3.64 10.2.3.$X
	done

dengan script tersebut kita mempercepat membuat file, dan mengirit inode 
yang digunakan karena kita menggunakan file link instead of file kosong
hasil buatan dari perintah `touch` 

Maaf saya selalu menggunakan "instead of" karena saya kira bhs. indonesia
tidak punya kata yang seperti itu hehehe... :-) 
--

Jadi semua konfigurasi IP yang boleh menggunakan server ini sebagai cache
ada di /etc/dnscachex/root/ip/

Jika diinginkan eksternal DNS  cache ini digunakan oleh siapa saja
(public) maka diperlukan patch yang bisa diambil di:

http://www.ohse.de/uwe/patches/dnscache-0.61.okclient.patch

SELESAI installasi kita.

Nah untuk menjalankan sebelumnya matiin dulu BIND/named-nya (kalo
ada)  lalu beri perintah `svscan /service &` 
Sekarang coba ubah IP nameserver pada file /etc/resolv.conf dengan
172.0.0.1 (internal cache) atau 167.205.26.30 (eksternal cache), lalu
coba test dengan `nslookup` suatu domain dan coba sekali lagi (nslookup
yang kedua seharusnya lebih cepat karena server tinggal mengambil dari
cache saja tidak memforward query ke DNS server).

Agar jalan setiap saat server booting tambahkan ke file /etc/inittab
seperti ini:

 echo "SV:123456:respawn:env - PATH=/usr/local/bin:/usr/sbin:/usr/bin:/bin svscan /service /dev/console 2>/dev/console" >> /etc/inittab

atau pada FreeBSD bisa ditambahkan pada file /etc/rc.local

 echo "env - PATH=/usr/local/bin:/usr/sbin:/usr/bin:/bin csh -cf 'svscan /service &'" >> /etc/rc.local

Catatan:
Dalam djbdns file root zone beradi di /etc/dnscachex/root/servers/@ 
Untuk root zone terbaru bisa diambil di sini Silahakan ambil
IP-IP nya untuk dimasukan ke file @ tersebut.

-- Jika resolving domain misalnya bego.ccom (*.bego.com) ingin di set ke DNS
server 1.2.3.5  atau dengan kata lain server kita bertindak sebagai forwarder
zone untuk domain bego.com ke NS dengan IP 1.2.3.5, tinggal kasih perintah 

	`echo 1.2.3.5 > /etc/dnscachex/root/servers/bego.com` 

lalu restart dnscache dengan `svc -t /etc/dnscachex`.

-- Jika diinginkan server hanya sebagai  DNS forwarder tanpa meng-cache
berikan perintah:
    
	echo 1 > /service/dnscache/env/FORWARDONLY

GAMPANG TERNYATA.. 

..dan djbns ini lebih mudah maintainance-nya dibanding BIND karena gak
perlu edit2 file :-) terbukti pada saat istallasi pun kita tidak perlu
membuka file untuk mengeditnya. 

Pusing ah terlalu banyak penjelasan

Baiklah untuk melihat betapa mudahnya menginstal djbdn untuk DNS cache server
dibawah ini adalah script yang mendownload dan menginstal langsung djbdns
dibuat oleh: Doobe R. Tzeck


#!/bin/sh
# Time-stamp: <>

# Quick and dirty dnscache setup for people which don't really care.
# it downloads and installs djbdns and daemontools and sets up
# dnscache to run under supervise on 127.0.0.1. Hacked by
# drt@un.bewaff.net.

# Location of your local startup-script. You probably have to change
# this.

# BSD
RCLOCAL=/etc/rc.local

# RedHat
#RCLOCAL=/etc/rc.d/rc.local

# UID to runn the server
SVRUID=daemon
LOGUID=daemon

cd /tmp
wget http://cr.yp.to/djbdns/djbdns-1.02.tar.gz
tar xzvf djbdns-1.02.tar.gz
cd djbdns-1.02
make setup
cd ..
wget http://cr.yp.to/daemontools/daemontools-0.70.tar.gz
tar xzvf daemontools-0.70.tar.gz
cd daemontools-0.70 
make setup 
rm -Rf daemontools-0.70* djbdns-1.02*
mkdir /var/service
/usr/local/bin/dnscache-conf $LOGUID $SVRUID /var/service/dnscache
mkdir /service
chmod 755 /service
echo "2>&1 env - PATH=/usr/local/bin:/usr/sbin:/usr/bin:/bin csh -cf 'svscan /service &'" >> $RCLOCAL
ln -sv /var/service/dnscache /service
echo  "nameserver 127.0.0.1" > /tmp/r.c
cat /etc/resolv.conf >> tmp/r.c
mv /tmp/r.c /etc/resolv.conf




II. Men-setup NS atau Authoritative DNS Server

1. Setup primary NS

misal kita ingin membuat Authoritative DNS Server, dengan

	ns1.tf.itb.ac.id (167.205.26.30) sebagai primary NS
        ns2.tf.itb.ac.id (167.205.26.1) sebagai secondary NS

Pertama jangan lupa menginstal uscpi-tcp dan buat user dengan nama tinydns dan axfrdns
seperti sudah dijelaskan diatas, lalu buat direktori konfigurasi /etc/tinydns 
dengan perintah:

	tinydns-conf tinydns dnslog /etc/tinydns 167.205.26.30

dengan 167.205.26.30 adalah IP adalah primary IP yang terdaftar sebagai NS
Sekarang kita akan mengeset tinydns agar menjawab semua permintaan host
pada domain tf.itb.ac.id dan domain 26.205.167.in-addr.arpa (reverse domain 167.205.26.*)

	cd /service/tinydns/root
	./add-ns tf.itb.ac.id 167.205.26.30 
	./add-ns 26.205.167.in-addr.arpa 167.205.26.30 
	make

Setelah itu buatlah direktori service untuk axfr dengan perintah berikut:

	axfrdns-conf axfrdns dnslog /etc/axfrdns /etc/tinydns 167.205.26.30

Lalu ubah file konfigurasi yang membolehkan server lain (secondary NS server)
untuk melakukan zone transfer yaitu file /etc/axfrdns/tcp  

INFO:
tranfer zone adalah "peng-copy-an" informasi sebuah host secara remote dari 
suatu primary/server NS ke secondary/slave NS. 
---

	167.205.26.1:allow
	167.205.22.123:allow
	167.205.26.:allow
	202.27.34.159:allow,AXFR="beleguk.com/3.2.1.in-addr.arpa"
	:allow,AXFR="" 

[1] baris pertama adalah untuk membolehkan secondary NS (ns2.itb.ac.id) 
    melakukan zone tranfer 

[2] baris kedua adalah untuk membolehkan NS lain (secondary NS kedua) 
    dalam hal ini server dengan IP 167.205.22.123, 

[3] baris ketiga adalah untuk meng-allow dari semua host dengan IP 167.205.26.*

[4] baris kelima adalah membolehkan DNS server dengan IP 202.27.34.159
    untuk zone tranfer domain beleguk.com dan reverse DNS IP 1.2.3.*
    atau dengan kata lain zone tranfer domain 3.2.1.in-addr.arpa

[5] yang terakhir adalah untuk meng-allow koneksi TCP yang non-zone-transfer 
    dari mana pun. 

jika menginkan pembolehan koneksi tsb menggunakan nama host instead of IP
gunakan sepeti contoh ini:

	=ns2.tf.itb.ac.id:allow 

Kompile konfigurasi tcp tersebut menjadi file dalam format binary

	make

SELESAI..instalasi kita.
Jalankan NS server kita dengan membuat link berikut:

	ln -s /etc/tinydns /service
	ln -s /etc/axfrdns /service

asumsi svscan sudah jalan jika belum jalankan dengan perintah `svscan /service &`

--Menambah Host Baru--
untuk menambah host baru pada domain tf.itb.ac.id, misalnya kita ingin mengeset
host bernama indi dengan IP 167.205.26.12 dan project dengan IP 167.205.26.27 
gunakan perintah

	cd /service/tinydns/root
	./add-host indi.tf.itb.ac.id 167.205.26.12
	./add-host project.tf.itb.ac.id 167.205.25.27 
	make

atau bisa juga dengan mengedit langsung file /service/tinydns/root/data
dan menambahkan baris ini:

	=indi.tf.itb.ac.id:167.205.26.12
	=project.tf.itb.ac.id:167.205.25.27

tapi jelas lebih aman jika menggunakan perintah `add-host`

--Menambahkan suatu host domain lain--
Misalkan kita akan meng-setup domain keripik.org yang mempunya nameserver2 
sebagai berikut
	
	ns1.keripik.org (167.205.26.30)
	ns2.keripik.org (167.205.26.1)
	ns3.keripik.org (202.12.63.101)    

Disini IP 167.205.26.30 masih sebagai ns1.tf.itb.ac.id dan 167.205.26.1 
sebagai ns2.tf.itb.ac.id jadi ns1.keripik.org dan ns2.keripik.org adalah
virtual domain dari IP-IP tersebut.
Kita akan setup di 167.205.26.30 sbb:

	cd /etc/tinydns
	./add-host ns1.keripik.org 167.205.26.30
	./add-host ns2.keripik.org 167.205.26.1 
	./add-ns keripik.org 167.205.26.30 
	./add-ns keripik.org 167.205.26.1
	./add-ns keripik.org 202.12.63.101
	./add-ns 3.2.1.in-addr.arpa 167.205.26.30 

	./add-host satu.keripik.org 1.2.3.100
	./add-host dua.keripik.org 1.2.3.200
        ./add-alias www.keripik.org 1.2.3.100
	./add-alias mail.keripik.org 1.2.3.200
    	./add-mx keripik.org 1.2.3.100
	make

Tinydns akan menamakan mailserver a.mx.example.com secara default.
perintah add-alias adalah untuk menambahkan alias domain dari suatu host
sedangkan add-mx adalah untuk menambahkan MX server dari domain tsb.

Hmm.. jangan mengharapkan ada perintah `add-cname` ya. record CNAME masih 
bisa dihandle di djbns tapi sangat dihindarkan oleh pembuatnya, tau kenapa?
Hasil pengalaman saya sih tuh record suka malah bikin kesalahan.
Wah BIND emang nyebelin deeehh... kurang satu titik aja bikin mampus hehehe..
Kalo mau bikin cname edit langsung aja file /service/tinydns/root/data 

UNTUK contoh ini nanti diterusin lagi ya, laper banet nih gua.. sehari gak makan :-)

2. Setup Secondary NS

Hampir sama dengan setup primary NS, cuma ... 

3. Setup NS untuk jaringan LAN

Jika kita ingin memberi nama domain pada jaringan local kita, dan tentu saja
hanya dikenali oleh jaringan kita itu, maka kita bisa mengeset DNS server 
untuk itu

Misalkan domain pada LAN kita akan kita set jadi dodol.net yang membawahi
IP 172.*
Pertama set dulu server kita sebagai eksternal cache dari network 172.*

	touch /etc/dnscachex/root/ip/172

setelah itu set agar setiap pencarian domain dodol.net dilakukan hanya ke
komputer local (127.0.0.1) begitu juga untuk revers domain 172.* atau 
172.in-addr.arpa

	echo 127.0.0.1 > /etc/dnscachex/root/servers/dodol.net
	echo 127.0.0.1 > /etc/dnscachex/root/servers/172.in-addr.arpa 

sekarang setup name server untuk local/internal domain kita, kita akan simpan
konfigurasi dan log file di direktori /etc/dnscachex/tinydns-mylan

	tinydns-conf tinydns dnslog /etc/dnscachex/tinydns-mylan 127.0.0.1
	ln -sf /etc/dnscachex/tinydns-mylan /service/tinydns-mylan

set internal name server kita:

	cd /etc/dnscachex/tinydns-mylan/root
	./add-ns dodol.net 127.0.0.1
	./add-ns 172.in-addr.arpa 127.0.0.1
	./add-host bego.dodol.net 172.16.0.30
	./add-host bloon.dodol.net 172.16.0.31
	make
	svc -t /service/*
	
III. Peraawatan / Maintenance Server 
Update root zone (minimal sebulan sekali)

	tcpclient 199.166.24.1 53 axfr-get . /etc/rootdns/root/root.orsc /etc/rootdns/root/root.orsc.tmp

Kita bisa menggunakan local root server untuk dipergunakan oleh dnscache, dengan cara:

	cp /etc/dnscache/root/@ /etc/dnscache/root/@.original 
	echo 167.205.26.30 > /etc/dnscache/root/@
	svc -du /service/dnscache

Jika anda pusing dengan zone file tinydns (tinydns-data) yang memang simpel tapi mungkin
susah diingat daripada daripada zone file-nya BIND, nah tabel ini bisa dipergunakan: 

djbdns  Aritnya 	  
--------------------------------------------------------------------------------
.	SOA, NS, A  
& 	NS, A  
@ 	MX, A  
= 	PTR, A  
+ 	A  
' 	TXT  
^ 	PTR  
C 	CNAME  
Z 	SOA  
% 	(client location conditional expression, does not create any records)  
# 	(comment, does not create any records)  
- 	(used to temporarily disable A recordds, does not create any records)  
: 	User-defined  
6 	AAAA, PTR 
3 	AAAA 



udah dulu ahh..capek ;-)
btw, kalau ada kesalahan dalam tulisan ini, jangan segan2 untuk 
ngasih tau ke ..

---
eryan12@yahoo.com
http://eryan.dhs.org

    Source: geocities.com/w1d1anto/Document

               ( geocities.com/w1d1anto)