我需要为500K区域设置一个权威的DNS。 大约90%的区域是相同的(当然域名除外)。
我只发现PowerDNS适合这个任务 – 使用pipe理后端Perl脚本,作为辅助后端回答任何域的静态响应。
还有其他的select吗?
另一个选项可能是创build一个默认区域文件,如下所示:
$ TTL 3600
@ IN SOA ns1.company.com hostmaster.company.com(
2011010101;
3600;
1800;
604800;
3600;
)
@ IN NS ns1.company.com
@ IN NS ns2.company.com
@ IN MX 10 mail.company.com
@ IN A 192.0.2.1
www IN A 192.0.2.2
假设上面的文件名为/etc/bind/default.zone ,那么你可以添加如下的区域条目:
区域“domain1.com”{
型主人;
文件“/etc/bind/default.zone”;
};
区域“domain2.com”{
型主人;
文件“/etc/bind/default.zone”;
};
在这种情况下,如果您查询domain1.com或domain2.com,您将从默认区域获取信息。
但是,请注意,我只是做了这个小规模,并没有被testing的500K区域,所以我不确定现在绑定将它的内存结构。 因此,例如,我不确定它是否只加载一个区域文件并将其指向所有区域,或者是否将加载相同的区域文件500K次!
也许像这样或这样的BIND?
我最终使用PowerDNS,但与SQL后端。 如果找不到请求的域,我已经更改了SQL语句并将回退添加到“默认”域。
完美的作品。 延迟几乎不会超过5(需要一些额外的configuration调整)。
为powerdns设置默认空名称的logging
nano /etc/pdns/pdns.conf
gmysql-any-query=select COALESCE(b.content,c.content,d.content,e.content,f.content) content, \ COALESCE(b.ttl,c.ttl,d.ttl,e.ttl,f.ttl) ttl, \ COALESCE(b.prio,c.prio,d.prio,e.prio,f.prio) prio, \ COALESCE(b.type,c.type,d.type,e.type,f.type) type, \ COALESCE(b.domain_id,c.domain_id,d.domain_id,e.domain_id,f.domain_id) domain_id, \ a.mydomain name \ from \ (select '%s' mydomain) a \ left outer join records b on b.name = SUBSTRING_INDEX(a.mydomain, '.', -4) and b.type = 'A' \ left outer join records c on c.name = SUBSTRING_INDEX(a.mydomain, '.', -3) and c.type = 'A' \ left outer join records d on d.name = SUBSTRING_INDEX(a.mydomain, '.', -2) and d.type = 'A' \ left outer join records e on e.name = SUBSTRING_INDEX(a.mydomain, '.', -1) and e.type = 'A' \ left outer join records f on f.name = SUBSTRING_INDEX(a.mydomain, '.', 0) and f.type = 'A' \ limit 1;