Dec 07
作者: 肖建彬 | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://www.xiaojb.com/archives/it/mydns-notify.shtml
网址:http://www.xiaojb.com/archives/it/mydns-notify.shtml
MyDNS实现备份DNS服务器有2种方法:
- 安装2台MyDNS服务器,数据通过MySQL同步实现;
- 靠DNS-based zone transfers和Bind9同步。
我比较倾向第二种,但是第二种需要改造MyDNS,因为MyDNS的架构决定了它无法向slave发notify。有人出注意,给MySQL加一个触发器,我看了一下MySQL的文档,都是说触发MySQL语句,在MyDNS的maillist里边要了一个perl的程序实现给slave发notify,我用php改写了一下。
<?php
// Jianbin Xiao(xjb@xiaojb.com)
require_once('Net/DNS.php');
$zone = 'abc.com';
$res = new Net_DNS_Resolver();
$res->nameservers = $slaves_ns;
$packet = new Net_DNS_Packet();
$packet->header = new Net_DNS_Header();
$packet->header->id = $res->nextid();
$packet->header->qr = 0;
$packet->header->opcode = 'NS_NOTIFY_OP';
$packet->question[0] = new Net_DNS_Question($zone, ‘SOA’, ‘IN’);
$packet->header->qdcount = count($packet->question);
$response = $res->send($packet, $packet->data());
if (isset($response->header->rcode) && $response->header->rcode != “NOERROR”) {
echo $response->header->rcode;
}
?>
补:根据网友的建议,做了修改,用$res->send函数替换$res->send_tcp,send函数可以根据packet的包大小,选择使用UDP协议还是TCP协议。

July 7th, 2007 at 09:19
[...] mydns是一个类似产品。 [...]