ICPæä¾›DNSæœåŠ¡,肯定需è¦ç”¨åˆ°å°†DNSæ•°æ®å…¥åº“管ç†,å¹¶ä¸”èƒ½åŠ¨æ€æ›´æ”¹çš„需求.在å°è¯•网上æµä¼ çš„<<bind-9.3.1 + mysql-4.1.9 + web管ç†è¯¦ç»†é…置全过程>>一文å‘现一个问题:
æ¯å¢žåŠ ä¸€ä¸ªåŸŸå°±è¦ä¿®æ”¹named.confæ–‡ä»¶åŠ å…¥
[CODE]zone "mydomain.com" {
type master;
database "mysqldb dnsdb mydomain localhost root passwd";
};[/CODE]
修改åŽä»éœ€é‡å¯named,没有实现真æ£çš„åŠ¨æ€æ·»åŠ ä¿®æ”¹DNS的目的.
采用BIND+DLZ则åšåˆ°äº†Dynamically Loadable Zones.
所谓DLZ (Dynamically Loadable Zones) is a patch for BIND version 9 that simplifies BIND
administration and reduces memory usage and startup time. DLZ allows you to store your zone
data in a database. Unlike using scripts, the changes in your database are immediately
reflected in BIND's response to DNS queries, so there is no need to reload or restart BIND.
You see, BIND "dynamically loads" the "zone" data it needs to answer a query from the
database.
1.下载BIND 9.3.2 æºç 包:
http://www.isc.org/sw/dl/?pkg=bind9/9.3.2/bind-9.3.2.tar.gz&name=BIND 9.3.2
2.下载DLZéžå®˜æ–¹(unofficial)è¡¥ä¸:
http://projects.navynet.it/DLZ/ctrix_dlz_9.3.2-1.patch.gz
3.安装
将补ä¸å’ŒBINDåŒ…ä¸Šä¼ è‡³åŒä¸€ç›®å½•
tar xvzf bind-9.3.2.tar.gz
mv ctrix_dlz_9.3.2-1.patch.gz bind-9.3.2/ctrix_dlz_9.3.2-1.patch
patch -p1 < ctrix_dlz_9.3.2-1.patch
./configure --with-dlz-mysql --enable-threads=no --prefix=/usr/local/bind-dlz
make
make install
4.é…ç½®
cd /usr/local/bind-dlz
mkdir etc
mkdir var/run -p
chown named.named var -R
创建named.conf文件,我的named.conf如下:
[CODE]
options {
version "microsea-ICP";
recursion no;
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
dlz "Mysql zone" { database "mysql {host=localhost dbname=dns_data ssl=tRue} {select zone from dns_records where zone = '%zone%'} {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"') when lower(type) = 'soa' then concat_ws(' ', data, resp_person, serial, refresh, retry, expire, minimum) else data end from dns_records where zone = '%zone%' and host = '%record%'}";};include "/usr/local/bind-932/etc/rndc.key";
[/CODE]
注: {host=localhost dbname=dns_data user=root pass=root}为mysql的链接串.
5.创建mysqlä¸ç›¸å…³æ•°æ®åº“和表,以åŠåˆ›å»ºç´¢å¼•,具体指令略:
å‚è§: http://bind-dlz.sourceforge.net/mysql_example.html
在数æ®åº“䏿’入测试记录:
[CODE]
mysql> INSERT INTO `dns_records` ( `zone` , `host` , `type` , `data` , `ttl` , `mx_priority`
, `refresh` , `retry` , `expire` , `minimum` , `serial` , `resp_person` , `primary_ns` )
VALUES (
'givingtree.com.cn', 'ilovefiona', 'A', '222.222.222.22', '800', NULL , NULL , '10', NULL ,
NULL , NULL , NULL , NULL
);
[/CODE]
5.测试
å¯åЍæœåС噍:
/usr/local/bind-dlz/sbin/named -u named -g -d1
æ–°å¼€ä¸€ä¸ªç™»å½•çª—å£æµ‹è¯•
[CODE]
nslookup
> server localhost
Default server: localhost
Address: 127.0.0.1#53
> ilovefiona.givingtree.com.cn
Server: localhost
Address: 127.0.0.1#53
Name: ilovefiona.givingtree.com.cn
Address: 222.222.222.22
> exit
[/CODE]
æœåŠ¡å™¨è¿”å›žä¿¡æ¯:
[CODE]
05-Apr-2006 11:27:00.747
Query String: select zone from dns_records where zone = 'ilovefiona.givingtree.com.cn'
05-Apr-2006 11:27:00.747
Query String: select zone from dns_records where zone = 'givingtree.com.cn'
05-Apr-2006 11:27:00.748
Query String: update data_count set count = count + 1 where zone ='givingtree.com.cn'
05-Apr-2006 11:27:00.748
Query String: select ttl, type, mx_priority, case when lower(type)='txt' then concat('"',
data, '"')
else data end from dns_records where zone = 'givingtree.com.cn' and host =
'ilovefiona'
and not (type = 'SOA' or type = 'NS')
05-Apr-2006 11:27:00.749
Query String: select ttl, type, mx_priority, case when lower(type)='txt' then concat('"',
data, '"')
else data end from dns_records where zone = 'givingtree.com.cn' and host = '@'
and not (type = 'SOA' or type = 'NS')
05-Apr-2006 11:27:00.749
Query String: select ttl, type, mx_priority, case when lower(type)='txt' then concat('"',
data, '"')
else data end from dns_records where zone = 'givingtree.com.cn' and host = '*'
and not (type = 'SOA' or type = 'NS')
05-Apr-2006 11:27:00.749
Query String: select ttl, type, mx_priority, data, resp_person, serial, refresh, retry,
expire, minimum
from dns_records where zone = 'givingtree.com.cn' and (type = 'SOA' or type='NS')
[/CODE]
注: named.confä¸å…¶ä»–内容å¯å‚考/etc/named.confæ·»åŠ ,如:
[CODE]
zone "." IN {
type hint;
file "named.ca";
};
zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
[/CODE]这些固定ä¸å˜,ä¸éœ€è¦è¯»åº“的内容å¯é¢„先设好,è¦å°†named.ca的内容入库也是å¯ä»¥çš„.
å‚考文献:
<<Bind DLZ Extended Tags> : http://team.lea-linux.org/prae/dlz/
Unofficial patchs for bind 9.3.1* : http://projects.navynet.it/
BIND DLZ Home: http://bind-dlz.sourceforge.net/