具有默认响应的权威 DNS

具有默认响应的权威 DNS

我需要为 500K 个区域设置权威 DNS。大约 90% 的区域是相同的(当然域名除外)。

我发现 PowerDNS 只适合这项任务 - 使用管道后端和 Perl 脚本来回答任何域的静态响应作为辅助后端。

还有其他选择吗?

答案1

另一个选择可能是创建一个如下所示的默认区域文件:

$TTL 3600
@ 在 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

@ 在 192.0.2.1
www 192.0.2.2

假设上面调用了/etc/bind/default.zone,那么您可以添加区域条目,例如:

区域“domain1.com”{
    類型主屬;
    文件“/etc/bind/default.zone”;
};
区域“domain2.com”{
    類型主屬;
    文件“/etc/bind/default.zone”;
};

在这种情况下,如果您查询 domain1.com 或 domain2.com,您将从默认区域获取信息。

但是,请注意,我只是在小规模上进行了此操作,并且尚未对 500K 个区域进行测试,因此我不确定 Bind 是否会在内存中构建它。例如,我不确定它是否只加载一个区域文件并将所有区域指向它,或者它是否会加载相同的区域文件 500K 次!

答案2

我最终使用了 PowerDNS,但使用了 SQL 后端。我更改了 SQL 语句,并添加了如果未找到请求的域则回退到“默认”域的功能。

运行完美。延迟几乎从未超过 5(需要进行一些额外的配置调整)。

答案3

对于 powerdns 设置默认为空名称的记录

纳米/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;

相关内容