BIND dan DNS

Server DNS Resolving-Caching

Oleh Iwan Setiawan
http://www.duniasemu.org/writings
2003/04/09 08:27:28

Pada artikel sebelumnya kita sudah mengenal mengenai konsep dan gambaran Domain Name System (DNS) dan Berkeley Internet Name Domain (BIND) sebagai salah satu implementasinya. Kali ini penulis akan membahas mengenai pembuatan server DNS resolving-caching tanpa domain.

Tujuan dari pembuatan server DNS resolving-caching tanpa domain adalah membuat sebuah server DNS yang dapat me-resolve semua permintaan nama domain dari jaringan lokal secara cepat. Ini bisa dilakukan karena proses resolving dilakukan pada server DNS lokal yang sebelumnya telah meng-caching nama domain hasil resolving akses oleh salah satu komputer dalam jaringan lokal tersebut. Resolving-caching name-server tersebut akan menyimpan hasil resolving dalam cache sehingga akses nama domain yang sama selanjutnya akan berjalan lebih cepat (mengurangi waktu tunggu) karena mengambil dari cache server DNS tersebut. Server DNS resolving-caching sangat cocok untuk warung internet atau jaringan lokal yang membutuhkan resolving secara cepat pada koneksi yang tergolong lambat.

caching.png

Penulis akan membahas spesifik pada distro berbasis rpm yaitu Red Hat pada beberapa bagian dari artikel ini, walaupun konsepnya hampir sama untuk distro lain.
Pertama, kita harus mempunyai paket bind, bind-utils dan caching-nameserver. Ketika anda menginstal Linux distro Red Hat secara default maka paket ini biasanya sudah terinstal. Ketikkan:

# rpm -qa |grep bind
bind-utils-9.2.1-0.7x
bind-9.2.1-0.7x

# rpm -qa |grep caching
caching-nameserver-7.2-1

Setelah memastikan paket-paket yang dibutuhkan sudah terinstal maka kita bisa mulai mengkonfigurasi.

Komentar

Komentar pada berkas konfigurasi akan diabaikan oleh program name-server (named). Komentar bisa menggunakan /* dan */, //, atau #.
Contoh:

/* Ini adalah Komentar Gaya C */
// Ini adalah Komentar Gaya C++
# Ini adalah Komentar Gaya Shell

Pada berkas database-cache name-server root dan loopback/localhost digunakan semikolon (;) untuk memberikan komentar di dalamnya.

Konfigurasi

Masih ingatkah anda mengenai berkas-berkas yang dibutuhkan untuk menjalankan BIND (named)? Berikut ini berkas-berkas yang harus dikonfigurasi untuk menjalankan server DNS BIND resolving-caching:
  1. named.conf
    Berkas ini pada Red Hat dan Slackware biasanya diletakkan pada direktori etc (/etc/named.conf). Editlah berkas konfigurasi ini dengan editor kesayangan anda. Isinya kurang lebih sebagai berikut:

    // generated by named-bootconf.pl
    
    options {
    	directory "/var/named";
    	/*
    	 * If there is a firewall between you and nameservers you want
    	 * to talk to, you might need to uncomment the query-source
    	 * directive below.  Previous versions of BIND always asked
    	 * questions using port 53, but BIND 8.1 uses an unprivileged
    	 * port by default.
    	query-source address * port 53;
    	 */
    };
    
    //
    // a caching only nameserver config
    //
    zone "." IN {
    	type hint;
    	file "named.ca";
    };
    
    zone "0.0.127.in-addr.arpa" IN {
    	type master;
    	file "named.local";
    };
    
    key "key" {
    	algorithm hmac-md5;
            secret "jggRewTTCgdTOUvWPd0cqPoRiQfKvoYYJnhpVqWcWpfrgSRedgKlpyjbmlsd";
    };
    

    Nama berkas named.ca dan named.local yang disebutkan di atas pada beberapa paket distribusi mungkin berbeda tapi sebenarnya hampir sama isinya.

    Baris directory memberitahukan pada named untuk mencari berkas-berkas yang ada dalam konfigurasi dalam direktori yang ditunjukkan, dalam hal ini /var/named.
    Jika anda dibelakang firewall, uncomment baris query-source address * port 53.

    Baris zone adalah menunjukkan zone yang otoritatif untuk nama domain bersangkutan dan diikuti dengan tipe name-server (hint, master, slave). Khusus untuk hint digunakan untuk zone root (.). Tipe master untuk name-server primary-master sedangkan tipe slave untuk name-server secondary-master/slave.
    Selanjutnya diikuti nama berkas database zone, letaknya berada di direktori /var/named/ sesuai dengan options pada baris directory. Zone untuk root (.) berisi daftar name-server root.

    Baris zone kedua yaitu 0.0.127.in-addr.arpa adalah zone untuk reverse-mapping alamat loopback.

    Baris key merupakan baris yang menunjukkan bahwa named bisa dikontrol lewat program rndc melalui localhost dengan secret-key yang sama atau konfigurasi key yang sama untuk metode transaksi antar name-server (TSIG) agar dapat melakukan zone-transfer dan dynamic update.

  2. named.ca
    Berkas ini berisi daftar name-server root di Internet. Berkas ini dapat anda update jika diperlukan melalui internic.net dengan program/perintah dig.

    # dig @rs.internic.net > /var/named/named.ca.new
    

    Setelah anda mengambil berkas database name-server root tadi, silahkan ubah namanya menjadi named.ca sesuai dengan konfigurasi named.conf.
    Jika anda ingin mempertahankan nama berkas named.ca.new, maka rubah konfigurasi named.conf untuk zone root ke named.ca.new.

    Cara kedua anda bisa melakukan anonymous-ftp ke ftp.rs.internic.net dan download berkas named.root.

    Cara lain adalah dengan menggunakan e-mail. Kirim e-mail ke vice@nic.ddn.mil dengan subject 'netinfo root-servers.txt'.

    Berkas named.ca isinya kurang lebih sebagai berikut:

    ;       This file holds the information on root name-servers needed to
    ;       initialize cache of Internet domain name-servers
    ;       (e.g. reference this file in the "cache  .  "
    ;       configuration file of BIND domain name-servers).
    ;
    ;       This file is made available by InterNIC registration services
    ;       under anonymous FTP as
    ;           file                /domain/named.root
    ;           on server           FTP.RS.INTERNIC.NET
    ;       -OR- under Gopher at    RS.INTERNIC.NET
    ;           under menu          InterNIC Registration Services (NSI)
    ;              submenu          InterNIC Registration Archives
    ;           file                named.root
    ;
    ;       last update:    Aug 22, 1997
    ;       related version of root zone:   1997082200
    ;
    ;
    ; formerly NS.INTERNIC.NET
    ;
    .                        3600000  IN  NS    A.ROOT-SERVERS.NET.
    A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
    ;
    ; formerly NS1.ISI.EDU
    ;
    .                        3600000      NS    B.ROOT-SERVERS.NET.
    B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
    ;
    ; formerly C.PSI.NET
    ;
    .                        3600000      NS    C.ROOT-SERVERS.NET.
    C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
    ;
    ; formerly TERP.UMD.EDU
    ;
    .                        3600000      NS    D.ROOT-SERVERS.NET.
    D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
    ;
    ; formerly NS.NASA.GOV
    ;
    .                        3600000      NS    E.ROOT-SERVERS.NET.
    E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
    ;
    ; formerly NS.ISC.ORG
    ;
    .                        3600000      NS    F.ROOT-SERVERS.NET.
    F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
    ;
    ; formerly NS.NIC.DDN.MIL
    ;
    .                        3600000      NS    G.ROOT-SERVERS.NET.
    G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
    ;
    ; formerly AOS.ARL.ARMY.MIL
    ;
    .                        3600000      NS    H.ROOT-SERVERS.NET.
    H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
    ;
    ; formerly NIC.NORDU.NET
    ;
    .                        3600000      NS    I.ROOT-SERVERS.NET.
    I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
    ;
    ; temporarily housed at NSI (InterNIC)
    ;
    .                        3600000      NS    J.ROOT-SERVERS.NET.
    J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
    ;
    ; housed in LINX, operated by RIPE NCC
    ;
    .                        3600000      NS    K.ROOT-SERVERS.NET.
    K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
    ;
    ; temporarily housed at ISI (IANA)
    ;
    .                        3600000      NS    L.ROOT-SERVERS.NET.
    L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
    ;
    ; housed in Japan, operated by WIDE
    ;
    .                        3600000      NS    M.ROOT-SERVERS.NET.
    M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
    ; End of File
    

  3. named.local
    Berkas ini berisi database localhost untuk alamat loopback. Berkas tambahan untuk localhost atau komputer itu sendiri atau jaringan loopback. Jaringan loopback? yap, alamat spesial yang digunakan host untuk lalu lintas ke komputer itu sendiri. Jaringan ini sebagian besar adalah 127.0.0.0 dan alamat untuk host yaitu 127.0.0.1 yang merupakan alamat loopback untuk komputer itu sendiri.
    Mungkin anda bertanya-tanya kenapa setiap komputer harus punya alamat loopback untuk diri mereka sendiri? jawabannya adalah karena tidak ada yang bertanggung jawab pada jaringan 127.0.0.0 termasuk alamat host 127.0.0.1 kecuali host/komputer itu sendiri.
    Jadi setiap komputer bertanggung jawab terhadap jaringan 127.0.0.0 dengan host 127.0.0.1 untuk komputer itu sendiri.

    $TTL	86400
    @       IN      SOA     ns1.domain-kita.com. root.ns1.domain-kita.com.  (
                                          2002081219 ; Serial
                                          28800      ; Refresh
                                          14400      ; Retry
                                          3600000    ; Expire
                                          86400 )    ; Minimum
                  IN      NS      ns1.domain-kita.com.
    1       IN      PTR     localhost.
    

  4. resolve.conf
    Berisi domain yang pertama yang akan dicari dan name-server yang akan dituju untuk permintaan resolving nama host/domain. Berkas ini kurang lebih berisi:

    search ns1.domain-kita.com domain-kita.com
    nameserver 127.0.0.1
    

    Baris search menunjukkan domain pertama yang akan dicari ketika melakukan pencarian nama host.
    Baris nameserver menunjukkan alamat name-server anda, 127.0.0.1 yaitu komputer itu sendiri.

Menjalankan Name Server

Setelah semua berkas di atas sudah anda konfigurasi maka selanjutnya kita jalankan named dengan mengetikkan:

# /etc/init.d/named start

atau

# /usr/sbin/named

Setelah itu lihatlah berkas catatan/log sistem anda apakah named berjalan dengan sukses, dengan mengetikkan:

# tail -f /var/log/messages
Aug 26 08:19:15 ns1 named[204]: starting BIND 9.2.1
Aug 26 08:19:15 ns1 named[204]: using 1 CPU
Aug 26 08:19:15 ns1 named[204]: loading configuration from '/etc/named.conf'
Aug 26 08:19:16 ns1 named[204]: no IPv6 interfaces found
Aug 26 08:19:16 ns1 named[204]: listening on IPv4 interface lo, 127.0.0.1#53
Aug 26 08:19:16 ns1 named[204]: listening on IPv4 interface eth0, 192.168.3.1#53
Aug 26 08:19:16 ns1 named[204]: command channel listening on 127.0.0.1#953
Aug 26 08:19:16 ns1 named[204]: zone 0.0.127.in-addr.arpa/IN: loaded serial 2002081219
Aug 26 08:19:16 ns1 named[204]: zone localhost/IN: loaded serial 42
Aug 26 08:19:16 ns1 named[204]: running

Jika catatan/log sistem anda kurang lebih hampir sama dengan keluaran di atas, itu berarti named anda sudah berjalan dan mendengarkan pada port 53 (running).
Jika ada pesan kesalahan maka named akan memberikan nama berkas atau letak berkas yang salah. Betulkan kesalahan tersebut dan coba jalankan lagi.

Sudah siapkah name-server kita untuk menerima permintaan resolving domain? mari kita lihat.
Penulis menggunakan program dig (domain information groper) untuk melakukan pencarian terhadap name-server yang baru kita jalankan:

# dig -x 127.0.0.1
; <<>> DiG 9.2.1 <<>> -x 127.0.0.1
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28240
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.		IN	PTR

;; ANSWER SECTION:
1.0.0.127.in-addr.arpa.	86400	IN	PTR	localhost.

;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.	86400	IN	NS	ns1.domain-kita.com.

;; ADDITIONAL SECTION:
localhost.		86400	IN	A	127.0.0.1

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Aug 27 07:50:49 2002
;; MSG SIZE  rcvd: 93

Name server yang baru saja anda buat sudah siap menerima permintaan resolving nama domain. Selamat!

Anda ingin melihat perbedaan antara permintaan nama domain yang belum di-caching dan yang sudah? mari.
Kita bisa menggunakan utilitas nslookup atau dig. Kali ini kita menggunakan utilitas dig.

# dig iwan.gotdns.org
; <<>> DiG 9.2.1 <<>> iwan.gotdns.org
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44527
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 0

;; QUESTION SECTION:
;iwan.gotdns.org.		IN	A

;; ANSWER SECTION:
iwan.gotdns.org.	14400	IN	A	202.137.7.53

;; AUTHORITY SECTION:
gotdns.org.		86400	IN	NS	ns3.dyndns.org.
gotdns.org.		86400	IN	NS	ns4.dyndns.org.
gotdns.org.		86400	IN	NS	ns5.dyndns.org.
gotdns.org.		86400	IN	NS	ns1.dyndns.org.
gotdns.org.		86400	IN	NS	ns2.dyndns.org.

;; Query time: 890 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Aug 27 16:28:39 2002
;; MSG SIZE  rcvd: 147

Coba jalankan program dig sekali lagi untuk domain iwan.gotdns.org.

# dig iwan.gotdns.org
; <<>> DiG 9.2.1 <<>> iwan.gotdns.org
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44750
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 1

;; QUESTION SECTION:
;iwan.gotdns.org.		IN	A

;; ANSWER SECTION:
iwan.gotdns.org.	14389	IN	A	202.137.7.53

;; AUTHORITY SECTION:
gotdns.org.		86389	IN	NS	ns3.dyndns.org.
gotdns.org.		86389	IN	NS	ns4.dyndns.org.
gotdns.org.		86389	IN	NS	ns5.dyndns.org.
gotdns.org.		86389	IN	NS	ns1.dyndns.org.
gotdns.org.		86389	IN	NS	ns2.dyndns.org.

;; ADDITIONAL SECTION:
ns1.dyndns.org.		86390	IN	A	66.37.215.43

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Aug 27 16:28:50 2002
;; MSG SIZE  rcvd: 163

Anda sudah lihat bahwa permintaan resolving domain yang kedua lebih cepat dari yang pertama (Query time), itu berarti hasil resolving dari permintaan pertama disimpan ke cache server DNS.
Ketika ada permintaan lagi untuk domain yang sama maka sang server DNS akan mengambil dari cache, tidak mencari lagi ke name-server yang bertanggung jawab terhadap domain iwan.gotdns.org, jadi lebih cepat.

Untuk informasi saja, setiap sistem operasi mempunyai standar C API yang mempunyai call gethostbyname dan gethostbyaddr. Call ini akan mencari dari sumber yang banyak. Pada sistem operasi Linux, call ini akan melihat konfigurasi berkas nsswitch.conf pada direktori etc (/etc/nsswitch.conf). Isinya kurang lebih sebagai berikut:

...
host:	files, dns
...

Pada konfigurasi nsswitch.conf di atas, resolver akan mencari nama domain pada berkas /etc/hosts kemudian baru server DNS yang ada pada berkas konfigurasi /etc/resolve.conf.
Sedang berkas /etc/hosts berisi pemetaan alamat IP ke nama host, digunakan pada saat komputer di-boot khususnya untuk jaringan kecil tanpa name-server/server DNS.

Forwarding

Untuk menghemat dan meringankan sumber daya server dan jaringan ada baiknya kita menggunakan forwarder biasanya server DNS ISP kita.
Setiap permintaan resolving domain dari jaringan lokal ke server DNS kita akan di-forward atau diteruskan terlebih dahulu ke server DNS yang ada pada options dalam /etc/named.conf. Misal server DNS ISP anda 202.155.5.1 dan 202.155.5.3 maka pada bagian options dalam berkas named.conf tambahkan baris:

     forward first;
     forwarders {
          202.155.5.1;
          202.155.5.3;
     };

Dengan forwarding permintaan resolving domain akan lebih cepat dan mengurangi beban pada server DNS dan jaringan lokal. Jadi server DNS kita tidak bekerja sendiri untuk menerima permintaan resolving domain.
Setelah menambahkan baris di atas restart named dan coba anda tes lagi dengan utilitas dig.

Semoga artikel ini dapat bermanfaat dalam pembuatan server DNS resolving-caching tanpa domain untuk jaringan lokal.
Artikel selanjutnya akan membahas pembuatan server DNS (BIND) dengan domain yang nantinya dapat diakses dari Internet.
Saran dan kritik dapat dialamatkan ke stwn[at]duniasemu[dot]org.

URL

Referensi