DNS サーバー用の MySQL バックエンドが必要になったため、MySQL バックエンドの方が若干便利な Bind から PowerDNS に切り替えることにしました。
基本的に、ユーザーは Web フロントエンドを使用してドメインをデータベースに追加し、それらのドメインは登録されて PowerDNS で使用できるようになります。これらのドメインについて DNS サーバーにクエリを実行すると、有効な応答が返されます。うまく機能します。
実際のところ、自分のドメインとゾーンを DNS レジストリに追加する必要があり、それらをデータベースに追加するとアプリケーションのロジックが壊れてしまいます (このアプリケーションのユーザーのみがドメインを追加する必要があります)。追加のドメインとゾーンをデータベースに直接追加せずに、PowerDNS に追加したいと考えています。
たとえば、MySQL クエリが実行される前に読み込まれるファイルに追加のドメインを登録する方法はありますか? または、MySQL レコードに何も見つからない場合に備えて、フォールバック ファイルを用意する方法はありますか?
答え1
解決策が見つかりました。PowerDNS ランチパッドの奥深さ! MySQL バックエンドを使用する前に DNS データ ファイルを読み取る方法があります。それは、2 つのバックエンドを使用することです。引用:
記載の通りhttp://doc.powerdns.com/modules.html- 言葉が多すぎるのはよくありません ;) - PowerDNS は、launch ステートメントを使用して、任意の数の異なるバックエンドまたは同じバックエンドを起動できます。通常は、コマンドラインではなく、構成ファイル pdns.conf で実行します。これらのバックエンドは、launch ステートメントで指定された順序で DNS クエリへの回答を探し出されます。つまり、最初のバックエンドが質問に答えられる場合は、そのバックエンドが質問に答えますが、4 番目のバックエンドだけが質問に答えられる場合は、PowerDNS が答えを送信するまで、最初の 3 つのバックエンドをループする遅延が発生します。したがって、バックエンドが質問に答えることを確認することが不可欠です。十分に速い受信と応答が 1 秒未満であれば、ほとんどの再帰ネームサーバーと互換性があるはずですが、もちろん速いほど良いです。
私の問題では、以下を使用することを選択しました:
- 優先的なファイルベースのバックエンドとして機能する Bind バックエンド。
- 2番目に来るMySQLバックエンド。
基本的に、必要なのは、以下の設定を少し変更することだけですpdns.local
。
launch=bind,gmysql
(バックエンドに名前を割り当てる) を使用すると、さらに具体的に指定できると聞きました:
launch=bind:first,gmysql:second
次に、両方のバックエンドにパラメータを追加します。
# Bind backend configuration
bind-config=/path/to/your/zones/file
# MySQL configuration
gmysql-host=localhost
gmysql-port=
gmysql-dbname=db
gmysql-user=user
gmysql-password=passwd
gmysql-dnssec=no
必要なのは、zone{}
ドメイン固有のファイル (SOA、A、MX、NS、... レコードを含む) を参照する Bind ゾーン ファイル (ブロック) を作成することだけです。
再起動 !