Recursor)の二種類がある。DNS専用リバースプロキシのdnsdistも組み合わせる事で、BIND相当の権威DNS・キャッシュDNSの同居DNSサーバを構築する事も出来る。PowerDNSはAPIも用意されており、スクリプトで直にAPIを叩いたり、WebGUIから間接的に操作する事も出来る。BINDのテキストゾーンファイルを読み込んだりTinyDNSとの連携もでき、他の権威DNSサーバとの親和性も高い。WebGUIでゾーン編集ができる事から、PowerDNSをHiddenPrimaryにして実クエリは別の権威DNSで処理させる構成が多い。他ディストリビューションでも同様の手順で構築する事が出来る。今回は下記構成のPowerDNSをchrootモードで構築する。バックエンドにはMySQLを利用するので事前にビルドしておく。インストール最近のOSはsystemdを使っている事が多いので、systemdモジュールを有効化する。今回はバックエンドにMySQLを使うのでDBモジュールもビルドする。luaは使う時が来そうなので一応ビルド。必要なければconfigureオプションから外す。コンフィグ作成PowerDNSのコンフィグはテキストで作成する必要がある。APIはPowerDNS単体では使わないので無効化しておき、APIを利用する外部ツールを使う時に有効化する。DB接続は別ファイル化して必要に応じてパーミッションを絞っておく。起動スクリプトについては、ソースコード同梱の物が上手く動かないので自作する。TCPリモート参照に応答させる。ログをsyslog出力する。TCPクエリにも応答させる。PowerDNSのバックエンドプログラム。詳細ログの出力を停止。DNSクエリログを出力。出力ログのsyslog-facility番号。1~3は基本的に使わない。DNSのバージョン応答。起動準備chrootディレクトリの作成、パーミッション設定、DBスキーマの流し込みを行う。PowerDNSはログ出力をsyslog経由でしか出来ない為、ログを書き出せる様にsyslogサーバの設定も変更する。chroot環境下でPowerDNSのログをsyslog出力させるには、PowerDNSのログをsyslog側でフックさせる為に、ソケット(ログ出力デバイス)を作成する必要がある。†バックエンドにMySQLを使っている場合、SQLコマンドでDNSゾーンを流し込むか、BINDテキスト形式でゾーンを作った後に変換しながらDBに登録する方法がある。今回はテスト用にDNSゾーンを登録する為、SQLコマンドで登録を行う。起動テストを行う場合、『pdns_server』コマンドをそのまま実行するとログが出てくる。コンフィグを書き換えれば、ログを標準出力にしながらdaemon起動させる事も出来る。pdnsPowerDNSに登録したゾーン情報の書式確認を行う場合、チェックユーティリティを利用する。セカンダリサーバへのゾーン転送が出来ない時は、書式間違いが多いので都度確認すること。†PowerDNSをGUIで操作するフロントWebアプリケーション。PHPで出来ているので、LAMPを構築してあれば大抵の環境で動作する。他にもWebアプリを動かしている環境下では、VirtualHostで別FQDNにホスティングする必要がある。Manager用に作り直す必要があるので注意。頑張れば、DB設定を直書きしたり個別にInsertすれば既存DBでも動くが説明は割愛。Managerからスキーマを流し込め無くなる。既存のデータベースを一度削除した上で再登録を行う。今回設定したFQDNを用いて、Webブラウザで『h++p://pdnsmanager.example.com:10080/setup』を開く細かい設定内容は公式ドキュメントを確認しつつ設定する事。