DNS caching menggunakan pdnsd


agar kita bisa menjelajahi internet, ada fungsi paling dasar yang pasti selalu terpakai: DNS, Domain Name Service. DNS ini yang bertugas menerjemahkan nama domain (misalnya ryosaeba.wordpress.com) ke dalam bentuk IP address, yang lebih dimengerti oleh lapisan jaringan. biasanya jika kita berlangganan ke sebuah ISP, Internet Service Provider, kita akan menggunakan fasilitas DNS yang disediakan oleh ISP tersebut. bisa juga kalau kita ingin membatasi akses internet untuk internet yang aman buat anak-anak misalnya, kita menggunakan OpenDNS atau DNS Nawala.
sebenarnya proses meminta terjemahan nama domain ke IP address ini dari komputer kita ke DNS server ISP tidak lama, rata-rata memakan waktu 500 milidetik, alias setengah detik. namun bayangkan jika DNS server ISP itu bisa kita pindahkan ke dalam jaringan lokal di rumah, maka proses penerjemahan nama domain tadi bisa disingkat sampai cuma tinggal 1 milidetik. jika seharian kita melakukan ratusan permintaan penerjemahan nama domain, banyak waktu yang bisa dihemat jika DNS server-nya ada di jaringan lokal.
untuk mengetahui berapa lama proses yang dibutuhkan untuk melakukan penerjemahan nama domain ini, di linux maupun mac bisa digunakan perintah dig. berikut jika saya meminta google DNS (8.8.8.8) menerjemahkan malesbanget.com:
[sourcecode language=”bash”]
$ dig @8.8.8.8 malesbanget.com
; <<>> DiG 9.7.0-P1 <<>> @8.8.8.8 malesbanget.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3619
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;malesbanget.com. IN A
;; ANSWER SECTION:
malesbanget.com. 4471 IN A 65.98.16.186
;; Query time: 471 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Jun 12 07:40:01 2010
;; MSG SIZE rcvd: 49
[/sourcecode]
lama kueri bisa dilihat dari Query time. dari hasil di atas terlihat hasilnya adalah 471 milidetik. ketika saya ulangi lagi sebanyak 3 kali, hasilnya berturut-turut adalah 239, 312, dan 757 milidetik.
untuk keperluan DNS caching ini, saya memilih menggunakan pdnsd, dan supaya efektif, saya akan menggunakan ipkungfu agar semua kueri DNS yang terjadi di jaringan lokal saya akan selalu dilewatkan ke pdnsd, walaupun komputer klien tersebut secara eksplisit meminta server DNS yang lain.
unduh paket pdnsd:
[sourcecode language=”bash”]
# aptitude install pdnsd
[/sourcecode]
sunting berkas /etc/pdnsd.conf; konfigurasi saya adalah pdnsd bisa dipergunakan oleh mesin lain dalam jaringan lokal di rumah, lalu DNS server yang saya pergunakan adalah google DNS dan OpenDNS serta pilihan terakhir adalah DNS speedy, lalu blokir beberapa situs iklan.
[sourcecode]
global {
perm_cache=1024;
cache_dir="/var/cache/pdnsd";
run_as="pdnsd";
server_ip = eth0; // Use eth0 here if you want to allow other
// machines on your network to query pdnsd.
status_ctl = on;
paranoid=on;
// query_method=tcp_udp; // pdnsd must be compiled with tcp
// query support for this to work.
min_ttl=15m; // Retain cached entries at least 15 minutes.
max_ttl=1w; // One week.
timeout=10; // Global timeout option (10 seconds).
// Don’t enable if you don’t recurse yourself, can lead to problems
// delegation_only="com","net";
}
// This section is meant for resolving from root servers.
server {
label = google;
ip = 8.8.8.8; // google DNS
ip = 208.67.222.222; // OpenDNS
ip = 4.4.4.4; // google DNS
ip = 208.67.220.220; // OpenDNS
ip = 202.134.0.61; // speedy
ip = 203.130.196.5; // speedy
timeout = 5;
uptest = query;
interval = 30m; // Test every half hour.
ping_timeout = 300; // 30 seconds.
purge_cache = off;
exclude = .localdomain;
policy = included;
preset = off;
}
source {
owner=localhost;
// serve_aliases=on;
file="/etc/hosts";
}
rr {
name=localhost;
reverse=on;
a=127.0.0.1;
owner=localhost;
soa=localhost,root.localhost,42,86400,900,86400,86400;
}
neg {
name=doubleclick.net;
types=domain; // This will also block xxx.doubleclick.net, etc.
}
neg {
name=edgesuite.net;
types=domain; // This will also block xxx.doubleclick.net, etc.
}
neg {
name=predictad.com;
types=domain; // This will also block xxx.doubleclick.net, etc.
}
neg {
name=widgetbucks.net;
types=domain; // This will also block xxx.doubleclick.net, etc.
}
neg {
name=yieldmanager.com;
types=domain; // This will also block xxx.doubleclick.net, etc.
}
[/sourcecode]
lalu sunting berkas /etc/default/pdnsd dan buat baris ini: START_DAEMON=yes. setelah itu, aktifkan pdnsd:
[sourcecode language=”bash”]
# service pdnsd start
[/sourcecode]
silakan menguji pdnsd yang sudah dipasang dengan perintah dig, misalnya “dig @192.168.0.1 malesbanget.com”. untuk kueri DNS yang pertama akan terlihat masih normal, sekitar 500 milidetik, namun jika diulangi, maka kueri berikutnya akan menjadi lebih cepat, cuma 1 atau 2 milidetik.
langkah berikutnya adalah mengubah konfigurasi dhcp3-server agar komputer klien mengacu ke DNS server yang telah dibuat, dengan menyunting berkas /etc/dhcp3/dhcpd.conf, lalu mengubah bagian domain-name-servers sesuai dengan IP address DNS server tadi (dalam hal ini 192.168.0.1):
[sourcecode]
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;
option domain-name-servers 192.168.0.1;
option domain-name "mshome.net";
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
default-lease-time 600;
max-lease-time 7200;
}
[/sourcecode]
setelah itu, restart dhcp3-server:
[sourcecode language=”bash”]
# service dhcp3-server restart
[/sourcecode]
ini adalah hasil uji coba di komputer klien, terlihat kueri DNS berikutnya cuma 1 milidetik:
[sourcecode language=”bash”]
eko@epia800:~$ dig malesbanget.com
; <<>> DiG 9.7.0-P1 <<>> malesbanget.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45235
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;malesbanget.com. IN A
;; ANSWER SECTION:
malesbanget.com. 14400 IN A 65.98.16.186
;; Query time: 422 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Fri Jun 11 23:30:21 2010
;; MSG SIZE rcvd: 49
eko@epia800:~$ dig malesbanget.com
; <<>> DiG 9.7.0-P1 <<>> malesbanget.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 886
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;malesbanget.com. IN A
;; ANSWER SECTION:
malesbanget.com. 14398 IN A 65.98.16.186
;; Query time: 1 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Fri Jun 11 23:30:23 2010
;; MSG SIZE rcvd: 49
[/sourcecode]
namun bagaimana untuk klien yang “bandel”, yang suka menentukan sendiri DNS server apa yang mau dipakai? ini bisa ditangani dengan membelokkan outgoing request di port 53 TCP/UDP ke pdnsd memanfaatkan fasilitas redirection yang ada di ipkungfu. sunting berkas /etc/ipkungfu/redirect.conf, lalu tambahkan 2 baris berikut:
[sourcecode]
udp:53:53:internal # dns
tcp:53:53:internal # dns
[/sourcecode]
jalankan ipkungfu kembali agar dia mendeteksi perubahan konfigurasi.
[sourcecode language=”bash”]
# ipkungfu
[/sourcecode]
sekarang walaupun klien menentukan sendiri DNS server yang dia pakai, akan selalu dibelokkan ke pdnsd. optimasi berikutnya yang bisa dilakukan adalah membuat squid caching proxy.

, ,

7 responses to “DNS caching menggunakan pdnsd”

  1. Jadi inget buku “The Whole Internet”-nya jadul dari O’Reilly, penulisan “bisa juga kalau kita ingin membatasi akses internet untuk internet yang aman buat anak-anak” kudunya jadi “bisa juga kalau kita ingin membatasi akses Internet yang aman buat anak-anak” 🙂

  2. itu memang disengaja, supaya senada dengan “internet sehat” yang dikampanyekan kemkominfo dan awari. lagipula, “membatasi akses internet yang aman buat anak-anak” malah bisa diartikan “internet aman”-nya dibatasi.

Leave a Reply

Your email address will not be published. Required fields are marked *