Мне нужно настроить авторитетный DNS для зон 500K. Около 90% зон идентичны (конечно, кроме доменного имени).
Я нашел только PowerDNS, подходящий для этой задачи - использование Pipe Backend со скриптом Perl, который отвечает на статический ответ для любого домена в качестве вторичного Backend.
Есть ли другие альтернативы?
Другой вариант - создать файл зоны по умолчанию, как показано ниже:
$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
, вы можете добавить такие записи зоны, как:
zone "domain1.com" { type master; file "/etc/bind/default.zone"; }; zone "domain2.com" { type master; file "/etc/bind/default.zone"; };
В этом случае, если вы запросите domain1.com или domain2.com, вы получите информацию из зоны по умолчанию.
Однако имейте в виду, что я делал это только в небольшом масштабе, и он не тестировался с зонами на 500 КБ, поэтому я не уверен, что теперь Bind будет структурировать его в памяти. Так, например, я не уверен, загрузит ли он только один файл зоны и укажет на него все зоны, или он загрузит один и тот же файл зоны 500 КБ раз!
В конце концов я использовал PowerDNS, но с серверной частью SQL. Я изменил операторы SQL и добавил откат к домену «по умолчанию», если запрошенный домен не был найден.
Прекрасно работает. Задержка почти никогда не превышает 5 (требуются некоторые дополнительные настройки).
для 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;