500Kゾーンに権限のあるDNSを設定する必要があります。ゾーンの約90%は同一です(もちろんドメイン名を除く)。
PowerDNSがこのタスクに適していることだけがわかりました-セカンダリバックエンドとして任意のドメインの静的応答に応答するPerlスクリプトでパイプバックエンドを使用します。
他に選択肢はありますか?
私は最終的にPowerDNSを使用しましたが、SQLバックエンドを使用しました。 SQLステートメントを変更し、要求されたドメインが見つからなかった場合の「デフォルト」ドメインへのフォールバックを追加しました。
完璧に動作します。レイテンシーが5を超えることはほとんどありません(いくつかの追加の構成調整が必要です)。
別のオプションは、次のようなデフォルトのゾーンファイルを作成することです。
$ 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" { タイプマスター; ファイル "/etc/bind/default.zone"; };
この場合、domain1.comまたはdomain2.comのいずれかにクエリを実行すると、デフォルトゾーンから情報が取得されます。
ただし、これは小規模でのみ行っており、500Kゾーンまでのテストは行われていないため、Bindがメモリ内で構造化するかどうかはわかりません。したがって、たとえば、1つのゾーンファイルのみをロードしてすべてのゾーンをそのゾーンに向けるのか、それとも同じゾーンファイルを500K回ロードするのかはわかりません。
powerdnsの場合、デフォルトで空の名前のレコードを設定します
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;