はじめに
以前はDNSサーバと言えば、BINDとdjbdnsくらいしかありませんでしたが、現在ではさまざまなDNSサーバが利用できるようになりました。
DNSはサイト固有の要件が増えることが多く、またテキストファイルによる管理では不都合もなにかとでてきます。このため、RDBMSでレコードを管理できると便利です。BINDをRDBMSに対応させるパッチも存在します。
PowerDNSとは
ここでは、RDBMSを利用でき、容易な管理をサポートする機能が豊富なPowerDNSを紹介します。
PowerDNSは豊富なバックエンドをサポートするDNSサーバです。コンテンツDNSサーバとキャッシュDNSサーバの両方をサポートしており、それぞれは別のプロセスとして実行されます。すでに大規模なサービスプロバイダでも採用されており、実績も十分あるとされています。バックエンドにはLDAP、PostgreSQL、MySQL、Oracle、BINDのzoneファイルなどが使用でき、移行も容易です。GPL v2のオープンソースソフトウェアですが、開発元による商用サポートも提供されており、DNS管理の商用ソフトウェアとして、ASP向けのPowerDNS Expressという製品もあります。
前提
ここではOSにGentoo/Linuxを使いますが、他のdistributionでも必要な作業は同じです。各distributionに応じて適宜読みかえてください。バックエンドにPostgreSQL以外を使用する場合は、マニュアルを参照してください。
- 使用するバックエンドはPostgreSQL
- ドメインはexample.org
- example.orgのauthoritativeなDNSサーバはns.example.org
- PostgreSQLサーバはpostgres.example.org
- PowerDNSは127.0.0.1でlisten
- 既存のBINDから移行
PostgreSQLへデータの移行
BINDの設定をデータベースに移行します。移行には付属のzone2sqlコマンドを使用します。
既存のBINDの設定ファイルが利用できない場合は、サンプルのnamed.confおよび設定ファイルを作成します。example.orgは管理下のドメイン名に置き換えてください。
PostgreSQLにユーザを作成します。
テーブルを作成します。
データをPostgreSQLにインポートします。
PowerDNSのインストールと設定
PostgreSQLを使用するので、USEフラグでpostgresを有効にします。
PowerDNSをemergeします。
127.0.0.1でlistenし、PostgreSQLの接続に必要な設定をします。
PowerDNSの起動
起動時にPowerDNSを起動するように、defaultのrun levelに追加します。
BINDが起動している場合は停止します。
PowerDNSを起動します。
状態を確認します。pdns_controlは実行中のPowerDNSを管理するコマンドで、設定の変更や状態の確認などに使用します。詳しくはpdns_control(8)をご覧ください。通信にはUnix socketを使用しますので、適切な権限が必要です。
``pdns_control show''の出力はMRTGなどのツールに渡すことで長期的なトレンドを把握するのにも使えます。
各種統計データをブラウザから参照することもできます。以下の設定を追加します。
PowerDNSを再起動します。
ブラウザでhttp://ip.add.re.ss:8081/を開きます。Basic認証のダイアログボックスが表示されますので、ユーザ名には任意の文字列、パスワードにはwebserver-passwordで指定したpasswordを入力します。
SSLには対応していませんので、別途apacheなどを手前に配置して適切な認証と暗号化をはかる必要があります。
レコードとドメインの追加
レコードを追加するには、次のようなSQLを実行します。
ドメインを追加するには、次のようなSQLを発行します。
おまけ:Catalystアプリケーション
PowerDNSにはRDBMSのデータを管理するためのUIがありませんので、おまけとして、Catalystでレコードを表示するだけの、とても簡易なCatalystアプリケーションを作成します。Catalystについての解説は割愛します。詳しくはWebサイトを参照してください。以下のPerlモジュールが必要です。distributionのパッケージ管理システムもしくはCPANなどでインストールします。
- Catalyst
- Catalyst::Model::DBIC::Schema
- Catalyst::View::TT
- DBD::Pg
執筆時点で、いくつかの依存関係が足りません。依存関係でインストールされないモジュールをインストールします。
必要なモジュールをインストールします。
アプリケーションを作成します。
modelを作成します。
controllerを作成します。
viewを作成します。
ドメインの一覧を表示するテンプレートを作成します。
ドメインのレコード一覧を表示するテンプレートを作成します。
アプリケーションを起動します。
ブラウザでhttp://localhost:3000/catにアクセスします。
おわりに
サイト固有の要件をフロントエンドに実装すれば、きわめて柔軟性の高いDNS管理が可能です。また、すでに公開されているフロントエンドもありますので、試してみてはいかがでしょうか。
今回は紹介しませんでしたが、PowerDNSにはキャッシュDNSサーバとして動作するpdns_recursorもあります。インストールも設定も簡単ですので、ぜひお試しください。