Rabu, 25 Juni 2014

Menggunakan rsync

sumber : http://repo.unnes.ac.id/v2/?p=764

Artikel ini memperkenalkan rsync dan sedikit mempromosikan kelebihan-kelebihan dan fitur-fiturnya yang mudah-mudahan akan menarik pembaca untuk lebih banyak menggunakan rsync dalam pekerjaan sehari-hari.

Rsync adalah tool untuk transfer dan sinkronisasi file atau tree (struktur direktori dan file) secara satu arah, baik transfer lokal (di sistem yang sama) maupun remote (jaringan/internet). Fungsi rsync mirip/identik dengan tool-tool ini: cp, mv, scp, FTP client. Rsync biasanya digabungkan dengan SSH sebagai metode transpor remotenya, walaupun dapat juga disetup untuk menjadi daemon sehingga tidak membutuhkan SSH. Dalam kasus-kasus tertentu rsync juga dapat digunakan menggantikan HTTP client (seperti wget).Untuk apa rsync?

Apa keunggulan rsync?

Irit bandwidth. Jika di sisi penerima, file yang ingin dikirimkan sudah ada, tapi belum tentu sama (misalnya ukurannya lebih kecil/besar atau terdapat perbedaan karena versinya lebih lama), maka rsync dapat melakukan serangkaian pengecekan perbandingan checksum terhadap blok-blok dalam file di kedua sisi, untuk meminimalisasi jumlah data yang harus ditransfer. Algoritma ini disebut algoritma rsync. Bahkan sebetulnya rsync bermula dari sebuah paper yang menjelaskan algoritma ini.
Jadi, misalnya Anda memiliki 2 buah versi file berukuran kurang lebih 100MB di dua tempat, dengan rsync Anda mungkin Anda hanya membutuhkan transfer data sebesar 50MB, 10MB, atau bahkan di bawah 1MB untuk menyamakan kedua buah versi file ini, bergantung pada seberapa mirip kedua file tersebut sebelumnya.
Atau, misalnya Anda sedang mentransfer file besar lalu putus di tengah jalan. Anda dapat jalankan kembali rsync dan rsync akan melanjutkan kembali transfer dari posisi putus dan memastikan hasil akhirnya nanti sama.
Cepat. Rsync cepat salah satunya karena algoritma rsync yang disebutkan di atas. Selain itu rsync dapat melakukan kompresi data saat transfer. Dibandingkan FTP pun rsync lebih cepat karena dapat melakukan pipelining, sementara transfer menggunakan FTP boros koneksi TCP/IP untuk setiap file yang ditransfer. Ini akan semakin kentara untuk tree berisi file kecil-kecil yang jumlahnya banyak (misalnya file-file website yang umumnya berisi banyak file HTML dan gambar), di mana rsync dapat beberapa kali hingga belasan kali lebih cepat dari FTP.
Fleksibel. Rsync tidak hanya bisa mentransfer file tunggal, tapi juga direktori dan tree secara rekursif. Anda bisa memilih untuk menghapus file/direktori yang sudah tidak ada dari sisi pengirim tapi masih ada di sisi penerima. Anda bisa memilih untuk mensinkronisasi juga metadata file seperti permission, kepemilikan, tanggal, ACL, dll. Rsync dapat menangani link simbolik, hardlink, device, dll. Dan ada banyak opsi lainnya, termasuk yang sering juga dijumpai di tool lain seperti tar, cp, dll.

Sintaks dasar

Pada umumnya sintaks-sintaks berikut ini yang paling sering digunakan. Untuk transfer lokal ke lokal:
$ rsync -av -P PATHSUMBER PATHTUJUAN
Untuk transfer lokal ke remote:
$ rsync -e ssh -av -P -z PATHSUMBER USER@HOST:PATHTUJUAN
Untuk transfer remote ke lokal, cukup kebalikan perintah sebelumnya:
$ rsync -e ssh -av -P -z USER@HOST:PATHSUMBER PATHTUJUAN
Opsi -a (archive) adalah untuk mensinkronkan segala sesuatu, termasuk file/direktori secara rekursif dan metadata (seperti tanggal, kepemilikan, permission) dan file-file spesial seperti link simbolik. Umumnya ini yang kita mau, tapi dalam kasus-kasus tertentu di mana Anda tidak ingin rekursif atau tidak ingin mensinkronkan salah satu dari tanggal/kepemilikan/dll, opsi -a dapat dihilangkan dan/atau diganti dengan opsi-opsi lain seperti -r, -g, -o,
Opsi -v (verbose) membuat rsync memperlihatkan ke layar nama-nama file yang sedang ditransfer. Opsi -P membuat rsync lebih verbose lagi, yaitu menampilkan juga progres/persentasi saat sebuah file sedang ditransfer. Jika kita menggunakan rsync dalam skrip noninteraktif, bisa jadi output yang dihasilkan terlalu banyak. Maka dalam kasus tersebut kita dapat menghilangkan opsi -v dan -P.
Opsi -z (compress) membuat rsync mengkompresi data yang ditransfer. Ini menghemat bandwidth. Untuk transfer remote, gunakanlah selalu opsi ini, kecuali jika Anda berada di intranet yang amat cepat bahkan lebih cepat dari bandwidth harddisk (mis: di lingkungan gigabit ethernet).

Akhiran garis miring

Poin berikut ini perlu benar-benar dipahami oleh pengguna rsync karena seringkali menjebak dan membuat bingung. Tidak seperti shell Unix yang pengampun, rsync membedakan keberadaan garis miring penutup dalam spesifikasi path.
Keberadaan garis miring di akhir path sumber berarti menghindari pembentukan level direktori tambahan. Contoh:
$ rsync -av /home/steven/mirrors/debian /backup/
maka hasilnya adalah /backup/debian karena path sumber tidak diakhiri garis miring. Tapi jika kita menambahkan garis miring:
$ rsync -av /home/steven/mirrors/debian/ /backup/
maka isi dari direktori debian-lah yang akan tersalin ke /backup/ (kemungkinan ini bukan hal yang Anda inginkan, karena direktori /backup/ mungkin saja berisi hal-hal lain). Jika Anda ingin mengganti nama debian di path tujuan, maka sintaks berikut ini yang benar:
$ rsync -av /home/steven/mirrors/debian/ /backup/mirror-debian
Sebagai salah satu patokan yang bisa dipakai, jika Anda ingin mengganti nama direktori di tujuan, gunakan akhiran garis miring. Jika tidak, sebaiknya tidak usah gunakan.

Beberapa pertanyaan umum dari pemula

Bagaimana jika transfer putus di tengah-tengah? Tidak masalah. Justru inilah manfaat utama rsync. Rsync akan meneruskan proses sinkronisasi dari titik terakhir sebelum putus. Bahkan Anda dapat sengaja menghentikan dulu perintah rsync yang sedang berjalan (mis: dengan menekan Ctrl-C di shell), lalu melanjutkannya lagi di lain waktu dengan perintah yang sama (mis: dengan menekan tekan panah atas untuk mengambil histori shell, lalu menekan Enter).
Ini juga berarti dalam mentransfer sebuah tree yang berukuran lumayan besar, Anda tidak perlu repot-repot membuat tarball-nya (.tar.gz) dulu, atau bahkan melakukan split agar ukuran file menjadi kecil-kecil. Cara ini hanya memboroskan ruang disk dan waktu. Cukup rsync langsung tree ke tujuan. Jika putus di tengah-tengah, jalankan kembali perintah rsync yang sama, sampai selesai. Rsync dapat melakukan kompresi transfer (opsi -z) sehingga membuat tarball terkompresi (.gz) tidak begitu bermanfaat.
Kenapa rsync diam dulu sebelum menampilkan daftar file yang ditransfer? Kenapa rsync lambat? Kadang saat melakukan transfer file besar yang terputus di tengah-tengah, rsync akan tampak diam dulu. Ini karena rsync sedang membangun ulang file temporer. Ada opsi-opsi seperti --append, --inplace, dan --whole-file untuk mempercepat ini, tapi kelakukan default rsync menggunakan file temporer adalah untuk alasan keselamatan.
Juga, saat melakukan transfer tree besar (tree dengan ribuan file ke atas) rsync akan membutuhkan sejumlah waktu untuk membangun daftar file. Cara kerja rsync memang membangun daftar file lengkap dulu di kedua sisi pengirim dan penerima agar bisa dibandingkan. Kadang jika filenya banyak sekali, misalnya ratusan ribu hingga jutaan, rsync membutuhkan waktu bermenit-menit atau lebih untuk membangun daftar file ini. Opsi -P akan memperlihatkan progres pembangunan daftar file ini, sehingga rsync tidak tampak diam begitu saja.
Kenapa hasilnya salah? Jika hasil transfer berada 1 level lebih dalam dari yang Anda harapkan (tree "terbungkus" satu level direktori lebih dalam dari yang seharusnya) atau sebaliknya 1 level lebih luar dari yang Anda harapkan (file-file/direktori di level teratas tree "meledak" atau "terbuka"), maka Anda mungkin masih belum memahami kelakuan garis miring di akhir path (lihat bagian sebelumnya).
Jika pengecekan checksum MD5 atau SHA1 terhadap hasil transfer ternyata tidak identik untuk file besar (kadang-kadang terjadi, walau amat jarang), maka Anda bisa menambahkan opsi -c (checksum) untuk memperteliti pengecekan kesamaan, walaupun ini berakibat jumlah waktu yang diperlukan bertambah. Umumnya opsi ini tidak diperlukan karena rsync sudah melakukan juga checksum selama transfer, di samping pembandingan tanggal dan ukuran file.

Tips dalam mirroring

Menghapus file yang sudah tidak ada di sumber. Secara default, rsync tidak akan menghapus file di sisi penerima. Misalnya Anda memiliki:
dir/file1
dir/file2
Lalu di-rsync ke tujuan. Kemudian di sisi sumber terjadi perubahan:
dir/file1 dihapus
dir/file2 dimodifikasi
dir/file3 ditambah
maka rsync akan mengirimkan file2 dan file3, tapi tidak akan menghapus file1 yang ada di tujuan.
Dalam mirroring, biasanya kita ingin mirror yang sama persis, dengan kata lain file1 ingin dihapus juga di tujuan. Untuk itu tambahkanlah opsi --del --force. (Sebetulnya ada berbagai pilihan opsi untuk melakukan penghapusan, misalnya --delete-before, --delete-after, tapi sebagai permulaan, Anda cukup menghafal --del --force saja).
Menghindari kecelakaan. Sebagai pengaman, Anda bisa juga menambahkan opsi --max-delete, misalnya --max-delete 1000. Dalam melakukan mirroring dari sebuah sumber remote yang di luar kekuasaan kita, bisa saja di pihak sumber tersebut terjadi perubahan path atau salah konfigurasi sesaat atau reorganisasi sehingga menyebabkan tree sumber menjadi kosong. Tanpa --max-delete, rsync akan dengan senang hati mengosongkan pula mirror Anda sehingga menghapus bergiga-giga file yang dengan susah payah dan mahal didownload. --max-delete akan membatasi jumlah maksimum file yang bisa didelete, sehingga jika tiba-tiba ada kejadian banyak delete seperti ini Anda bisa mendeteksinya dan mengganti sumber mirror lain misalnya.
Atomik. Dalam memaintain mirror yang besar, biasanya proses mirroring bisa memakan waktu yang lama, berjam-jam bahkan berhari-hari dengan keterbatasan bandwidth. Jika mirrornya sedang dipakai juga, maka bisa jadi proses rsync yang lama ini akan menyebabkan isi mirror menjadi tidak konsisten karena "setengah-setengah" (misalnya, untuk mirror Debian, direktori dists/ yang berisi indeks Releases dan Packages sudah terupdate, tapi di pool/-nya belum, menyebabkan proses apt-get yang memanfaatkan mirror kita menjadi gagal). Rsync menyediakan opsi seperti --delay-updates atau --link-dest untuk membantu proses updating lebih atomik. Pembahasan detilnya di luar cakupan artikel ini, silakan lihat manpage rsync.

Tips dalam melakukan backup

Selain opsi -av -P, dalam melakukan backup filesystem biasanya opsi -H dan -A juga berguna. Opsi -H untuk mempertahankan hubungan hardlink (contoh: /usr/bin/sudo dan /usr/bin/sudoedit di Debian adalah hardlink. Hanya ada satu salinan saja untuk kedua file tersebut. Tanpa opsi -H maka saat ditransfer akan menjadi dua salinan, menghabiskan ruang disk.
Opsi -A untuk menyalin juga metadata ACL, berguna jika Anda menggunakan ACL.
Sebuah contoh aplikasi rsync dalam membuat backup harian dengan histori backup akan dibahas dalam kesempatan lain.

Berbagai tips lainnya

Selektif. Rsync menyediakan berbagai cara yang sangat fleksibel agar kita dapat memilih-milih file mana yang ingin disinkronkan dan mana yang ingin diabaikan (exclude). Beberapa contoh:
Jangan ikut sertakan file-file backup:
$ rsync -av --exclude '*~' --exclude '*.bak' SUMBER TUJUAN
Jangan ikut sertakan direktori metadata .svn (berguna untuk mentransfer direktori source code dari direktori kerja langsung):
$ rsync -av --exclude '.svn' SUMBER TUJUAN
Jika kita menyebutkan path absolut di --exclude, maka itu akan berarti posisinya relatif terhadap SUMBER. Keberadaan garis miring di akhir SUMBER akan lagi-lagi menentukan apakah titik awal yang dianggap akar (root) adalah selevel dengan SUMBER atau satu level di dalam SUMBER. Contoh:
$ rsync -av --exclude '/.*' /home/steven/ /backup/steven/
Perintah di atas akan membackup direktori home saya, tapi tanpa mengikutsertakan "dotfiles" yang ada tepat di bawah home (umumnya berisi file konfigurasi). Tapi seandainya ada dotfiles di bawah direktori lain, misalnya, /home/steven/proj1/.config maka file tersebut tidak akan di-exclude karena kita hanya menginstruksikan meng-exclude dotfiles yang berada di "root" (/.*).
Opsi --exclude dan pasangannya --include dapat disebutkan berselingan dan berulang kali. Terdapat pula opsi --filter yang lebih fleksibel lagi. Terdapat juga opsi --delete-excluded untuk menghapus file-file yang diexclude di sisi tujuan. Berguna misalnya untuk menghapus file-file backup (*~, *.bak) yang mungkin berserakan di sisi tujuan.
Sebuah contoh yang agak lengkap, dari potongan skrip backup yang pernah saya gunakan untuk membackup direktori home saya. Untuk mengirit waktu dan ruang disk, saya meng-exclude berbagai "sampah" seperti cache browser, trash, direktori temporer, file-file backup, dll. Anda mungkin bisa mengembangkan sendiri opsi favorit Anda.
$ nice -n19 \
  rsync -av --del --force --delete-excluded \
    --exclude '*~' --exclude '*.bak' \
    --exclude '*/cache*' --exclude '*/Cache*' \
    --exclude '*/Trash' --exclude */tmp' \
    /home/steven /backup/
Batasi bandwidth. Rsync dapat diinstruksikan untuk hanya menggunakan bandwidth tidak lebih dari yang kita spesifikasikan. Berguna jika rumah atau kantor kita memiliki bandwidth internet yang terbatas dan tidak ingin proses mirroring regular mengganggu aktivitas lainnya. Tambahkan opsi --bwlimit K, di mana K adalah angka dalam KB/s (kilobyte per detik).
Hemat CPU. Untuk mempercepat dan mengirit resource CPU dalam transfer remote, gunakan opsi -e "ssh -c arcfour" atau -e "ssh -c blowfish" sebagai pengganti opsi -e ssh. Cipher default ssh adalah 3des, dan ini lebih lambat daripada blowfish atau arcfour, sehingga kadang menghabiskan terlalu banyak CPU dan mengakibatkan transfer tidak bisa memanfaatkan kecepatan penuh fast ethernet (100Mbps).
Mengirit bandwidth lebih lagi. Opsi --fuzzy membuat rsync berusaha mencari file di sisi penerima yang mungkin dulunya adalah file yang ingin ditransfer, dari kemiripan ukuran dan/atau nama. Misalnya, jika terjadi perubahan penamaan file, maka tanpa opsi --fuzzy ini rsync akan mentransfer ulang file secara keseluruhan, karena tidak ditemukan file sebelumnya dengan nama yang sama di sisi penerima. Opsi-opsi lain seperti --compare-dest (bisa disebutkan berulang kali), --copy-dest, --link-dest juga berhubungan dengan pengiritan bandwidth dengan berusaha mencari kemiripan/file sumber di sisi penerima jika ada.
Coba-coba dulu. Opsi --list-only akan membuat rsync hanya menampilkan daftar file yang akan diproses. Atau gunakan opsi -n (--dry-run) untuk proses simulasi, mencoba-coba dulu tanpa benar-benar melakukan transfer dan penghapusan. Berguna jika Anda pemula atau jika mencoba kombinasi opsi baru. Siapa tahu pilihan opsi Anda tidak tepat dan Anda justru menghapus atau mengkopi file ke tujuan yang salah! Opsi -i (--itemize-changes) dapat dikombinasikan dengan -n untuk melihat perubahan apa saja yang akan dilakukan pada file. Arti simbol-simbol pada output -i ini dapat dilihat di manpage rsync.

Keterbatasan rsync

Meskipun merupakan swiss-army knife dalam urusan transfer dan sinkronisasi tree, namun rsync tidaklah sempurna. Dua kelemahan utama rsync adalah sifat sinkronisasi yang 1 arah dan lambat jika ukuran tree sudah terlalu besar.
Hanya 1 arah. Sinkronisasi rsync hanya bersifat satu arah, dari pengirim (P1) ke penerima (P2). Jika misalnya baik tree di P1 maupun di P2 berubah secara independen oleh pihak ketiga, lalu P1 dan P2 ingin bertukar perubahan secara 2 arah, maka rsync tidak dapat digunakan. Ada opsi -u untuk melewati file-file di P2 yang lebih baru daripada P1, Anda bisa menggunakan opsi ini pada kasus-kasus tertentu, tapi secara umum, untuk melakukan sinkronisasi 2 arah, sebaiknya digunakan tool lain seperti unison (atau mungkin Anda butuh tool version control seperti subversion atau git).
Lambat untuk tree superbesar. Cara kerja rsync adalah dengan mula-mula membangun daftar file lengkap baik di sisi pengirim maupun penerima untuk kemudian dibandingkan. Untuk tree yang sudah amat besar proses ini akan memakan waktu dan juga memori amat besar. Misalnya direktori backup lokal di beberapa server shared hosting di tempat kerja saya yang isinya lebih dari 20 juta file, karena berisi histori backup menggunakan hardlink. Meng-rsync tree ini sekaligus membuat proses rsync memakan memori lebih dari 2-3GB untuk menyusun daftar file, sehingga menghabiskan memori dan mengganggu proses lain.
Kebutuhan memori dalam pembangunan daftar file lengkap di awal proses rsync ini juga membuat para penyedia situs mirror agak enggan menyediakan layanan via rsync. Atau setidaknya membatasi jumlah koneksi simultan rsync, misalnya hanya 1-5.
Diharapkan revisi program dan/atau algoritma rsync berikutnya dapat membuat inovasi dalam hal sinkronisasi tree superbesar, misalnya dengan membentuk daftar file secara paralel atau sambil jalan.

Kamis, 19 Juni 2014

How to upgrade FreeBSD 8.2 to FreeBSD 9.0 with Virtio

Step 1: The upgrade

Let’s get right to it. Here’s the first step in the upgrade process:
freebsd-update upgrade -r 9.0-RELEASE
Once all files have been fetched, you will be asked a number of questions about merging config-files. They all seemed reasonable to me, so I just answered ‘y’ to all of them, but it might differ for you. Make sure you read the diff before accepting it.
If you get the following error:
The update metadata is correctly signed, but failed an integrity check.
Cowardly refusing to proceed any further.
Then simply patch your freebsd-update using the following command (source):
sed -i '' -e 's/=_/=%@_/' /usr/sbin/freebsd-update
and then re-run the upgrade command again.
If that went fine, it’s time to update the actual system. To do that, run:
freebsd-update install
Onde the update is done, reboot your system:
shutdown -r now
When it comes back up, make sure you run the install-again to install again to intall the userland updates:
freebsd-update install
Once you’ve run this, you’ll get the message:
Completing this upgrade requires removing old shared object files.

Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run 
"/usr/sbin/freebsd-update install"  again to 
finish installing updates.
This is of course a massive pain in the butt, but you need to do this nonetheless. Depending on how many packages from ports you have installed, this may take everything from a few minutes to a long time.
The easiest way to do this is to run portupgrade (if you don’t have portupgrade, install it from ‘sysutils/portupgrade’):
rm /var/db/pkg/pkgdb.db && pkgdb -Ffuv && portupgrade -afp
I added the ‘p’-flag, as this allows you to run ‘portupgrade -afP’ on other nodes (assuming you have a shared ports-tree) and just install the packages without having to re-compile them.
Finally, when you’ve done this, you can run (for the last time):
freebsd-update install

Step 2: Installing Virtio

Nowadays, Virtio is available in ports. That’s of course great, as that reduces the burdan of installing it. All you need to do is to run:
cd /usr/ports/emulators/virtio-kmod && make clean install
Once the kernel-module is installed, add the following to /boot/loader.conf:
virtio_load="YES"
virtio_pci_load="YES"
virtio_blk_load="YES"
if_vtnet_load="YES"
virtio_balloon_load="YES"
Next, we need to tell the system to actually use Virtio. The above commands assume that you are using ‘emX’ as your network-interface and /dev/daX or /dev/adX as your harddrive. It also that you’re using /etc/pf.conf as your firewall config, and that you have coded it to use the NIC’s name and not just IP-address. If you’re not using PF or use a different setup, simply skip the last command.
cp /etc/fstab /etc/fstab.bak && cat /etc/fstab.bak | perl -pe "s/ad/vtbd/g; s/da/vtbd/g;" > /etc/fstab
cp /etc/rc.conf /etc/rc.conf.bak && cat /etc/rc.conf.bak | perl -pe "s/em/vtnet/g;" > /etc/rc.conf
cp /etc/pf.conf /etc/pf.conf.bak && cat /etc/pf.conf.bak | perl -pe "s/em/vtnet/g;" > /etc/pf.conf
Now power off the system to make the changes to the host:
shutdown -p now
When the system stops, update all network drivers to Virtio and change the primary disk to block-driver.
You should now be able to boot into the new system with Virtio and enjoy a lot better (and more reliable) speed.

source: http://viktorpetersson.com/2012/01/16/how-to-upgrade-freebsd-8-2-to-freebsd-9-0-with-virtio/

BIND dan DNS Server DNS Resolving-Caching


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 daricache 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 bindbind-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 (hintmasterslave). 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 directoryZone 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 digunakanhost 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 gethostbyaddrCall ini akan mencari dari sumber yang banyak. Pada sistem operasi Linux, callini 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 resolvingdomain.
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

  • DNS HOWTO, Nicolai Langfeldt, Jamie Norrish and others
  • DNS and BIND, Third Edition, Cricket Liu & Paul Albitz
  • Halaman manual (man pages)
  • Server Linux, Ahmad Sofyan