2.03.2011

Membuat DNS Server

Yang biasa akses internet pasti sering berurusan dengan dns minimal men”set” dns yang sesuai yang biasanya diberitahukan oleh provider sehingga bisa mengakses internet.
DNS adalah ...
DNS merupakan singkatan dari Domain Name Service, fungsi utamanya adalah menerjemahkan alamat ip komputer dengan alamat yang lebih manusiawi atau bahasa daerahnya “humanable”. Seperti yang kita ketahui, setiap komputer yang terhubung ke internet harus punya ip address. Namun tidak semua orang bisa menghapalkan 66.94.234.13 (saya saja cuma copy paste,hehehe), lebih mudah menghapalkan www.yahoo.com.

Siapa yang butuh DNS?
Seperti yang disinggung sebelumnya, setiap pengakses internet membutuhkan DNS kecuali sanggup menghapal sebanyak 256*256*256*256 ip address, Salah satu pengguna DNS adalah pengakses internet, tapi pengakses internet tidak perlu membuat DNS Server karena bisa menggunakan DNS server yang disediakan oleh ISP.
Pengguna DNS selanjutnya tentu saja adalah ISP, dan mereka yang mengelola domain dan webserver. Pengguna DNS yang lainnya lagi adalah orang iseng yang pengen DNS Server sendiri, soalnya ndak ada kerjaan hehehe.

BIND
Ada banyak program untuk membuat DNS server, berhubung yang default terinstall di slackware adalah bind9 maka kita akan menggunakan itu saja. Jika bind9 terinstall maka akan terdapat beberapa file – file instalasi default seperti :

var/named/caching-example/named.ca
var/named/caching-example/named.local
var/named/caching-example/localhost.zone
etc/rc.d/rc.bind
etc/named.conf


Tiga file awal adalah contoh dari konfigurasi bind9, file selanjutnya adalah init script ( rc.bind ) dan konfigurasi dari bind ( named.conf ).
Berikut adalah isi dari file named.conf yang masih perawan :

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 "caching-example/named.ca";
};

zone "localhost" IN {
type master;
file "caching-example/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "caching-example/named.local";
allow-update { none; };
};


Kita akan bahas per blok, dan apa saja modifikasi yang akan kita buat.
Blok pertama

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;
};

Blok ini merupakan global setting dari bind, directory “/var/named” adalah direktory kerja dari bind, di direktory tersebut di tempatkan file – file konfgurasi domain yang biasa di sebut zone. Tidak disarankan untuk mengutak – atik blok ini kecuali Anda tahu apa yang Anda kerjakan. Atau dengan kata lain, biarkan mi saja begitu.
Blok Kedua

zone "." IN {
type hint;
file "caching-example/named.ca";
};


Blok ini merupakan blok root zone atau kasarnya alamat – alamat dari domain – domain internasional. Kita membutuhkan blok root zone ini. Biasanya saya melakukan perubahan dengan menghilangkan “caching-example/” pada baris file sehingga hanya berbentuk seperti ini :
file "named.ca";
Ini soal kebiasaan saja, saya lebih senang melihat semua file – file zone berada di bawah direktori /var/named, jadi tinggal ganti saja baris file tersebut dan pindahkan filenya :

# mv /var/named/caching-example/* /var/named

Blok Ketiga

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};


Blok ini adalah forward localhost, Dalam artian jika dns server mendapatkan perintah untuk mengetahui alamat ip dari localhost maka bagian blok ini yang mengurusnya.
saya sarankan untuk tetap menyimpan blok ini tapi berhubung sudah memindahkan file /var/named/caching-example/ jadi bari filemenjadi :
file "localhost.zone";
Blok Keempat

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};


Blok ini merupakan kebalikan dari blok localhost atau biasa disebut reverse, karena kebalikan reverse kerjanya juga terbalik yaitu mencari nama dari ip yang di”query”kan ke DNS server.
Semua konfigurasi diatas jika betul (termasuk nama filenya dan direktorinya) maka DNS server kita sudah bisa digunakan, kita tinggal mengaktifkannya mengeksekusi file rc.bind

# /etc/rc.d/rc.bind start

Jika tidak ada error maka kita bisa meng”query” domain – domain luar misalnya yahoo, google dll dengan syarat kita terhubung ke internet. Perintah untuk megquery domain bisa menggunakan dig atau nslookup :

codotx@oridecon:~$ dig yahoo.com

; <<>> DiG 9.4.1 <<>> yahoo.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14210 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 7, ADDITIONAL: 2 ;; QUESTION SECTION: ;yahoo.com. IN A ;; ANSWER SECTION: yahoo.com. 300 IN A 66.94.234.13 yahoo.com. 300 IN A 216.109.112.135 ;; AUTHORITY SECTION: yahoo.com. 162027 IN NS ns6.yahoo.com. yahoo.com. 162027 IN NS ns8.yahoo.com. yahoo.com. 162027 IN NS ns1.yahoo.com. yahoo.com. 162027 IN NS ns2.yahoo.com. yahoo.com. 162027 IN NS ns3.yahoo.com. yahoo.com. 162027 IN NS ns4.yahoo.com. yahoo.com. 162027 IN NS ns5.yahoo.com. ;; ADDITIONAL SECTION: ns6.yahoo.com. 162027 IN A 202.43.223.170 ns8.yahoo.com. 76086 IN A 202.165.104.22 ;; Query time: 415 msec ;; SERVER: 192.168.10.254#53(192.168.10.254) ;; WHEN: Wed Aug 8 17:25:00 2007 ;; MSG SIZE rcvd: 217


Jika keluar seperti diatas berarti dns kita sudah berfungsi, kita juga bisa menggunakan nslookup

codotx@oridecon:~$ nslookup
> server localhost

Ketikkan perintah server localhost untuk memastikan bahwa dns server yang digunakan oleh nslookup adalah dns server yang kita buat, karena secara default nslookup menggunakan dns server sesuai dengan entry pada file /etc/resolv.conf

Default server: localhost
Address: 127.0.0.1#53


Dengan ini maka nslookup menggunakan server localhost. Selanjutnya tinggal masukkan saja domain yang akan kita query misalnya yahoo.com

> yahoo.com
Server: localhost
Address: 127.0.0.1#53

Non-authoritative answer:
Name: yahoo.com
Address: 216.109.112.135
Name: yahoo.com
Address: 66.94.234.13


Jika keluarnya seperti ini maka dns kita sudah siap untuk di oprek lagi.
Untuk menambahkan domain lain (jika kita punya domain yang terdaftar atau sekedar iseng saja) kita bisa mengcopy konfigurasi dari localhost.zone.
Misalnya kita ingin membuat domain codotx.com dengan ip 192.168.1.1 maka kita buat entry dari codotx.zone seperti ini :

zone "codotx.com" IN {
type master;
file "codotx.zone";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone";
allow-update { none; };
};

Yang perlu diperhatikan adalah :
zone "codotx.com" IN {
Ini kita sesuaikan dengan nama domain yang kita buat. Jika kita membuat domain kingkong.com maka baris zone itu juga berisi “kingkong.com”, selanjutnya adalah jenis dari domain tersebut apakah merupakan domain master atau slave, untuk lebih detil tentang master dan slave dari domain silahkan baca dokumentasi tentang dns. Baris berikut adalah file dari domain. File bisa kita namakan terserah kita namun yang pasti sama dengan yang ada pada blok zone, dalam hal ini kita menggunakan nama file “codotx.zone”, saya sarankan nama file yang digunakan representatif sehingga untuk administrasi ataupun trouble shooting tidak lagi pusing soal nama file dan domain.
Blok terakhir yang kita buat adalah reverse dari domain codotx.com, berhubung karena kita dalam tahap belajar maka kita menggunakan ip address lokal saja, dalam hal ini kita defenisikan adalah 192.168.1.X, yang perlu diperhatikan pada pendefenisian reverse, penulisan alamat ip itu ditulis terbalik (namanya juga reverse) jadi jika kita menggunakan ip 192.168.1.X maka yang dituliskan di zone reverse adalah “1.168.192.in-addr.arpa”, demikian juga halnya jika menggunakan ip - ip yang lain atau ip publik. Baris selanjutnya sama dengan forward dari codotx.com yaitu type domain dan file zone, dalam hal ini kita menset “192.168.1.zone” untuk file dari reverse kita.
File – file zone
Setelah file named.conf kita acak – acak sekarang kita berurusan sama yang berwajib, eh file – file zone. Seperti kita definisikan sebelumnya di file named conf bahwa direktory dari bind berada di /var/named/ :

directory "/var/named";

Karena kita juga sudah memindahkan file di /var/named/caching-example/, sekarang di direktori /var/named terdapat file – file berikut :

codotx@oridecon:~$ ls /var/named/ -l
total 12
-rw-r--r-- 1 root root 195 2007-06-08 13:42 localhost.zone
-rw-r--r-- 1 root root 2517 2007-06-08 13:42 named.ca
-rw-r--r-- 1 root root 433 2007-06-08 13:42 named.local


Seperti yang kita sudah defenisikan sebelumnya pada file named.conf terdapat tiga file zone dari instalasi default. File named.ca adalah file dari root zone, kita bisa saja membuat file ini tapi sebaiknya gunakan saja file dari instalasi default. File localhost.zone adalah file dari domain “localhost” sedangkan “named.local” adalah reverse dari domain “localhost”.
Untuk lebih jelasnya kita lihat saja langsung kedua file tersebut.

codotx@oridecon:/var/named$ cat localhost.zone
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

1D IN NS @
1D IN A 127.0.0.1


Yang perlu diperhatikan adalah dua baris terakhir. Baris kedua dari terakhir, entry tenang NS, ns inilah yang akan digunakan pada pencarian sebuah domain. Entry pada kolom terakhir yaitu “@”, yang menunjuk ke A record. Pada baris terakhir menentukan alamat ip yang digunakan pada domain dalam hal ini adalah “localhost” dengan ip 127.0.0.1.
Selanjutnya adalah file reversed dari localhost yaitu named.local :

codotx@oridecon:/var/named$ cat named.local
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.

1 IN PTR localhost.


Perhatikan pada baris terakhir yang entry pada kolom pertama adalah “1”, berarti reverse mempunyai ip 127.0.0.1 karena telah disebutkan di file named.conf.
Yang juga perlu diperhatikan adalah entry serial, jika mengunakan dns slave setiap kali mengganti entry dari file zone kita juga harus mengganti serial (formatnya biasanya sesuai dengan tanggal) sehingga server dns slave bisa menyesuaikan setiap perubahan seperti yang di dns master.
Domain Kita
Setelah file localhsot dan reversenya kita intip sekarang kita mo buat domain buat kita, seperti yang disinggung diatas kita bisa membuat domain untuk kita, seperti contoh kita diatas “codotx.com” dengan ip 192.168.1.1, tambahkan bari berikut di named.conf

zone "codotx.com" IN {
type master;
file "codotx.zone";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone";
allow-update { none; };
};


Saya sarankan untuk mengcopy saja entry dari localhost dan reversenya, untuk menghindari kesalahan pengetikan kecuali anda termasuk orang yang teliti dan suka buang waktu :P.
Setelah membuat perubahan pada file named.conf sekarang kita buat filenya, seperti yang telah di defenisikan bahwa file yang digunakan oleh domain “codotx.com” adalah “codotx.zone” dan reversenya adalah “192.168.1.zone”. Saya juga menyarankan untuk mengcopy saja dari file zone localhost.

# cp localhost.zone codotx.zone
# cp named.local 192.168.1.zone


Selanjutnya adalah menyesuaikan dengan domain kita, ganti semua kata localhost dengan codotx.com pada file tersebut seperti ini :

$TTL 86400
$ORIGIN codotx.com.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

1D IN NS dns.codotx.com.
1D IN A 192.168.1.1

dns 1D IN CNAME @
www 1D IN CNAME @
dody 1D IN A 192.168.1.99


Pada konfigurasi ini kita juga menambahkan subdomain, yaitu dns.codotx.com, www.codotx.com dan dody.codotx.com. Untuk dns.codotx.com dan www.codotx.com menunjuk pada ip yang sama yaitu 192.168.1.1 . Kita bahas baris yang menurut saya penting.

$ORIGIN codotx.com.

Biasanya berisikan nama domain yang digunakan. Pada kasus kita codotx.com.

1D IN NS dns.codotx.com.

Bagian ini merupakan entry dari NS server dari domain kita. Jika kita menggunakan lebih dari satu NS untuk domain kita tinggal tambahkan saja NS entry berikutnya. Umumnya jika kita mendaftarkan domian di registrant domain dibutuhkan lebih dari satu NS.

1D IN A 192.168.1.1

Baris merupakan alamat ip dari domain yang digunakan, yaitu 192.168.1.1.

www 1D IN CNAME @
dody 1D IN A 192.168.1.99


Baris pertama merupakan subdomain www yang menunjuk pada A record, jadi jika mengakses www.codotx.com maka yang ip address yang di tuju adalah 192.168.1.1. Untuk baris berikutnya adalah sebuah sub domain dengan nama “dody” yang menunjuk ke ip 192.168.1.99, baris ini tidak lagi menggunakan CNAME melainkan A karena ip yang digunakan adalah berbeda dengan ip dari default domain yaitu codotx.com. Jika kita mengakses dody.codotx.com sebetulnya mengakses ke 192.168.1.99. Hal yang sama juga kita buat untuk membuat domain dengan ip public. Silahkan menambahkan sub – sub domain yang lain lagi jika memang dibutuhkan.
Selanjutnya adalah reverse dari codotx.com.

$TTL 86400
@ IN SOA codotx.com. root.codotx.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS codotx.com.

1 IN PTR codotx.com.
99 IN PTR dody.codotx.com.


Seperti halnya reverse dari localhost kita juga hanya mengisikan ip dari daftar domain dan sub domain yang kita buat.
Jika sudah selesai, silahkan merestart bind :

# /etc/rc.d/rc.bind restart

Jika tidak ada kesalahan (sebaiknya periksa /var/log/message) maka kita sudah bisa mengquery domain yang kita buat.

Read More......

Load Balancing Koneksi

Mempunyai koneksi internet lebih dari satu saat ini sudah biasa, terlebih bagi pengusaha warnet, hal ini juga didukung dengan semakin mudah dan murahnya koneksi internet.

Untuk menggunakan kedua koneksi tersebut secara bersamaan kita bisa memanfaatkan fasilitas load balancing. Kita membutuhkan iproute2 untuk melakukan hal tersebut.

Untuk kasus yang saya hadapi adalah, dua koneksi kedua – duanya menggunakan telkom speedy, dialnya via modem. Eth0 adalah jaringan LAN, eth1 dan eth2 interface untuk koneksi speedy.

Split Access
Yang pertama sekali dilakukan adalah mendefenisikan keluar masuknya akses dari jalur yang sama. Untuk itu kita butuhkan sedikit modifikasi di file /etc/iproute2/rt_tables
Tambahkan saja di bagian bawah dari file tersebut baris berikut ini :

10 speedy1
20 speedy2


Simpan dan keluar :D.

Berikut adalah beberapa variable yang digunakan untuk kepentingan load balancing script :D

$T1 = speedy1
$IF1 = eth1
$IP1 = 192.168.1.253
$P1_NET = 192.168.1.0/24
$GW1 = 192.168.1.254


demikian juga untuk interface berikutnya :

$T2 = speedy2
$IF2 = eth2
$IP2 = 192.168.2.253
$P2_NET = 192.168.2.0/24
$GW2 = 192.168.2.254

$T1, $T2 adalah nama tabel yang telah didefenisikan di file rt_tables
$IF1, $IF2 adalah interface dari koneksi yang akan diload balancingkan
$IP1, IP2 ip dari interface $IF1 dan IF2 dalam hal ini 192.168.1.253 dan 192.168.2.253
$P1_NET, $P2_NET ip network dari kedua interface
$GW1, $GW2 gateway dari IP $IP1 dan $IP2 sesuaikan dengan keperluan, untuk kondisi yang saya gunakan adalah 192.168.1.254 dan 192.168.2.254

Selanjutnya adalah menambahkannya di routing table seperti ini :

ip route add $P1_NET dev $IF1 src $IP1 table $T1
ip route add default via $GW1 table $T1
ip route add $P2_NET dev $IF2 src $IP2 table $T2
ip route add default via $GW2 table $T2


Selanjutnya adalah mengeset main routing table :

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

Selanjutnya mengeset routing rules

ip rule add from $IP1 table $T1
ip rule add from $IP2 table $T2


Load Balancing
Tugas berikutnya adalah menentukan gateway, biasanya kita mengeset gateway hanya untuk satu buah ip / interface namun kali ini kita akan menggunakan dua ip (kalau cuma satu ngapain pake dua koneksi internet :P )
Perintahnya seperti ini :

ip route add default scope global nexthop via $GW1 dev $IF1 weight 1 \
nexthop via $GW2 dev $IF2 weight 1


Pengecekan
Setelah melakukan setting, selanjutnya adalah memastikan bahwa load balancing yang kita buat berfungsi. Cek gateway dengan perintah :

ip r l

Jika menampilkan hasil seperti dibawah ini, maka kemungkinan load balancing sudah berhasil di set.

default
nexthop via 192.168.10.254 dev eth1 weight 1
nexthop via 192.168.20.254 dev eth2 weight 1


Untuk memastikannnya silahkan gunakan iptraf dan pilih general interface statistics, akses ke internet (sebaiknya dengan banyak window terbuka) dan lihat activity dari interface yang digunakan untuk keluar, jika berhasil, terdapat activity pada kedua interface tersebut.

Script lengkap loadbalancing :

#!/bin/sh

# Parameter
- parameter

# Koneksi ke modem adsl via eth1
T1 = speedy1
IF1=eth1
IP1=192.168.10.253
GW1=192.168.10.254
P1_NET=192.168.10.0/24


# Koneksi ke modem adsl via eth2
T2 = speedy2
IF2=eth2
IP2=192.168.20.253
GW2=192.168.20.254
P2_NET=192.168.20.0/24

ip route add $P1_NET dev $IF1 src $IP1 table $T1
ip route add default via $GW1 table $T1
ip route add $P2_NET dev $IF2 src $IP2 table $T2
ip route add default via $GW2 table $T2

ip route del default

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

ip rule add from $IP1 table $T1
ip rule add from $IP2 table $T2

ip route add default scope global nexthop via $GW1 dev $IF1 weight 1 \
nexthop via $GW2 dev $IF2 weight 1

#end of script
:D

Read More......