具有默认响应的权威DNS

我需要为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;