Kadangkala DNS server yang dibekalkan oleh ISP tak begitu reliable atau mengambil masa yang agak lama untuk translate domain name ke ip.
Keadaan ini boleh jadi bottleneck kepada web browser sewaktu melayari internet.
Ada pelbagai cara untuk kita membina local DNS caching seperti menggunakan bind dan sebagainya. Tetapi untuk setup bind bagi pengguna biasa agak memeningkan.
Kerana itu, pengguna Debian dan Debian based ada option untuk menggunakan dnsmasq. Portal ini ada menyentuh sedikit berkaitan dnsmasq dalam tutorial.
Kembali pada local DNS caching.
Apa yang perlu dilakukan ialah install dnsmasq.
# apt-get install dnsmasq
Kemudian edit file /etc/dnsmasq.conf dan tambah baris berikut di bahagian atas sekalii:
File /etc/resolv.conf juga perlu diubah dengan meletakkan nameserver 127.0.0.1 pada bahagian atas sekali.
Contoh:
nameserver 127.0.0.1
nameserver 202.188.1.5
nameserver 202.188.0.133
nameserver 208.67.220.220
Kemudian start service dnsmasq:
# /etc/init.d/dnsmasq start
atau start tiap kali boot:
# update-rc.d dnsmasq defaults
Kita gunakan dig untuk menguji keberkesanan local DNs caching.
Tanpa dnsmasq:
# dig google.com
; <<>> DiG 9.3.4 <<>> google.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16415
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 188 IN A 64.233.167.99
google.com. 188 IN A 72.14.207.99
google.com. 188 IN A 64.233.187.99
;; AUTHORITY SECTION:
google.com. 102215 IN NS ns3.google.com.
google.com. 102215 IN NS ns1.google.com.
google.com. 102215 IN NS ns4.google.com.
google.com. 102215 IN NS ns2.google.com.
;; ADDITIONAL SECTION:
ns3.google.com. 274499 IN A 216.239.36.10
ns4.google.com. 274507 IN A 216.239.38.10
ns1.google.com. 274522 IN A 216.239.32.10
ns2.google.com. 274489 IN A 216.239.34.10
;; Query time: 919 msec
;; SERVER: 202.188.1.5#53(202.188.1.5)
;; WHEN: Thu Mar 20 10:38:03 2008
;; MSG SIZE rcvd: 212
Dengan dnsmasq buat kali pertama:
# dig google.com
; <<>> DiG 9.3.4 <<>> google.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12206
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 167 IN A 72.14.207.99
google.com. 167 IN A 64.233.187.99
google.com. 167 IN A 64.233.167.99
;; Query time: 136 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Mar 20 11:01:30 2008
;; MSG SIZE rcvd: 76
Dengan dnsmasq buat kali ke dua:
# dig google.com
; <<>> DiG 9.3.4 <<>> google.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19014
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 164 IN A 64.233.167.99
google.com. 164 IN A 64.233.187.99
google.com. 164 IN A 72.14.207.99
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Mar 20 11:01:33 2008
;; MSG SIZE rcvd: 76
Sila perhatikan perbezaan bahagian Query time. Query kali kedua untuk dns menggunakan dnsmasq hampir-hampir instantenously kerana telah berada dalam local cache.
Jika anda menggunakan dhcp server pada router atau lain lain, anda perlu ubah configurasi dhcpclient anda supaya file resolv.conf tidak diubah oleh dhcp client.
Contoh untuk dhcp3 client. edit file /etc/dhcp3/dhclient.conf :
prepend domain-name-servers 127.0.0.1, 202.188.0.133, 202.188.1.5, 208.67.222.222, 208.67.220.220;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope;
* Bahagian prepend domain-name-servers memadai jika anda menggunakan 127.0.0.1 sahaja.
Aku sengaja menggunakan 127.0.0.1 dan ip dns server ISP serta ip dns server opendns.
* Perlu di ingatkan bahawa dnsmasq bukanlah content caching seperti squid, tetapi cuma dns caching.
* dns yang berada dalam cache bukanlah permanent. Jika anda inginkan permanent caching, pdnsd adalah pilihan terbaik.
Sila cuba dan nikmati hasilnya.