Lima langkah mudah membuat Realtime DNS server untuk bisnis domain hosting dengan Mysql record sebagai zone record Seringkali kita susah melakukan konfigurasi Name server bind dimana konfigurasinya adalah file texts misalnya yang berada pada /var/named. Kasus lainnya adalah ketika melakukan perubahan pada record NS (misalnya pada sebuah environment DOmain Hosting) dimana reabilitas & realtime sangat perlu kita harus merestart DNS/nameserver kita, dan hal ini tentu saja membuat problem yang fatal misalnya saat kita melakukan restart DNS dan ketika itu ada query maka NDS tidak akan mereply query domain name, akibatnya error pointing domain atau alamat domain tidak diketahui. DLZ (Dinamilcy Loadable Zone) merupakan solusi terbaik untuk saat ini untuk mengkonfigurasi sebuah nameserver dalam environtment domain hosting. Dengan menggunakan DLZ solusi baru didapat yaitu : 1. data NS record disimpan dalam database record (bukan test based) 2. perubahan terhadap record DNS dalam database mysql akan langsung diload oleh BIND tanpa perlu restart dns server. 3. pembuatan interface domain akan lebih mudah dicustomize sendiri karena hanya sebatas insert dan update record dalam database, sisanya akan dilakukan otomatis oleh BIND-DLZ Untuk experiment ini saya memakai versi bind-9.4.1 dan dlz-patch versi DLZ-0.7 dan mysql versi 5.0.37 pada lingkungan zendwalk/zendcafe yang masih 1 jenis distro slackware dan kernel 2.6.21.3 Marilah langsung saja ke teknis instalasi: ##0.Download extrack source dari bind dan dlz misalnya ke home/compile, kemudian lakukan patch mkdir /home/compile/cd /home/compile/wget http://ftp.isc.org/isc/bind/cur/9.4/bind-9.4.1.tar.gz wget http://optusnet.dl.sourceforge.net/sourceforge/bind-dlz/DLZ-0.7.0.tar.gztar -xzf bind-9.4.1.tar.gz cd bind-9.4.1tar -xzf /home/compile/DLZ-0.7.0.tar.gz##1. option compile bind ./configure --with-dlz-mysql=yes make && make install##2. tambahan untuk named.conf agar meload dlz dlz "Mysql zone" { database "mysql {host=localhost dbname=dns user=dns pass=PasswordHere ssl=false port=3306 socket=/mysql/mysql.sock} {SELECT zone FROM resource_records WHERE zone = '%zone%'} {SELECT ttl, type, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data FROM resource_records WHERE zone = '%zone%' AND host = '%record%' AND type <> 'SOA' AND type <> 'NS'} {SELECT ttl, type, data, primary_ns, resp_contact, serial, refresh, retry, expire, minimum FROM resource_records WHERE zone = '%zone%' AND (type = 'SOA' OR type='NS')} {SELECT ttl, type, host, mx_priority, IF(type = 'TXT', CONCAT('\"',data,'\"'), data) AS data, resp_contact, serial, refresh, retry, expire, minimum FROM resource_records WHERE zone = '%zone%' AND type <> 'SOA' AND type <> 'NS'}";};###3. untuk memasukkan record 1 buah dns, nameserver ke mysql mysql -u root -e "create database dns"mysql -u root dns -e "INSERT INTO dns.resource_records ( zone, ttl, type, host, primary_ns, resp_contact, serial, refresh, retry, expire, minimum ) VALUES ( 'xmedia.com', 86400, 'SOA', '@', 'ns1.xmedia.com.', 'hostmaster.xmedia.com.', 2007112201, 10800, 7200, 604800, 86400 );INSERT INTO `resource_records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`) VALUE (101, 'xmedia.com', 86400, 'NS', '@', NULL, 'ns1.xmedia.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `resource_records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`) VALUE (102, 'xmedia.com', 86400, 'NS', '@', NULL, 'ns2.xmedia.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `resource_records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`) VALUE (103, 'xmedia.com', 86400, 'MX', '@', 10, 'mail.xmedia.com.', NULL, NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `resource_records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`) VALUE (104, 'xmedia.com', 86400, 'A', '@', NULL, '192.168.1.50', NULL, NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `resource_records` (`id`, `zone`, `ttl`, `type`, `host`, `mx_priority`, `data`, `primary_ns`, `resp_contact`, `serial`, `refresh`, `retry`, `expire`, `minimum`) VALUE (105, 'xmedia.com', 86400, 'A', 'www', NULL, '192.168.1.50', NULL, NULL, NULL, NULL, NULL, NULL, NULL);"###4. start dns dalam mode debug agar bisa dilihat errornya killall namednamed -c /var/named.conf -g###testing nameserver , harusnya keluar jawaban alamat NS & IP dari host dig soa xmedia.com @localhostnslookup xmedia.com localhost# Bahan Bacaan tambahan Setting up a BIND DLZ Nameserver with MySQL Replication, http://www.zazzybob.com/bind_dlz.html
| |