BIND 9を徹底活用するためのTips集:実用 BIND 9で作るDNSサーバ(最終回)(1/2 ページ)
BINDには、運用・管理に使える標準機能あるいは外部ツールがある。これらを利用して、BINDをとことん活用しよう。(編集局)
本連載を締めくくるに当たり、これまでに紹介し切れなかったことをTipsとして紹介します。
ゾーンデータをRDBMSで管理
DNSの規模が大きくなると、情報の追加や削除が簡単で、更新・検索を確実かつ高速に処理できるシステムへゾーン情報を移行する必要に迫られます。
sdbとは
BIND 9には、そのような事態を想定してsdbインターフェイス(Simplified Database Interface)が提供されています。sdbインターフェイスを利用することで、データベースに限らずさまざまなシステムをゾーン情報のバックエンドに利用できます。ソース中のcontrib/sdbには、Berkeley DBやLDAP、PostgreSQLなどのsdbドライバが用意されているので、規模や用途に合わせて適切なドライバを選択しましょう。
ただし、「Simplified」とうたっているように、通常のゾーンファイルでできていたことが、sdbインターフェイスを利用した場合でもそのまま実現できるとは限りません。ゾーン転送やDynamic DNS、DNSSECなど、いくつかの機能はドライバ依存のため実装されていません。
ここでは、sdbの使用例として、MySQLをバックエンドに利用する方法を紹介します。MySQLについては、インストール方法も含めてエンタープライズ市場に向かうMySQL 5.0や快速MySQLでデータベースアプリ!を参照してください。
なお、MySQLが動作しているホストにBINDをインストールする必要はありませんが、mysql.hやlibmysqlclient.soなどの開発環境を用意する必要があります。
MySQL用sdbドライバのインストール
BIND 9のソースアーカイブにMySQLのsdbドライバは含まれていないため、別途用意します。以前はBind-Mysql Project(http://gw.netbastards.org/bm/)で公開されているものが利用されていましたが、これはすでに開発を終了しています。同sdbはbind-9.2.3でも利用可能ですが、将来性も考えてMySQL BIND SDB Driver(http://mysql-bind.sourceforge.net/)を利用します。
パッチファイルが用意されていないため多少複雑な作業になりますが、順を追って見ていきましょう。
http://sourceforge.net/projects/mysql-bind/からmysql-bind-0-1.tgzをダウンロードし、展開します。また、展開されたディレクトリの実行権限が外れているので修正します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
次に、BIND 9のソースをダウンロードして展開します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
mysql-bind-0.1下のmysqldb.hとmysqldb.cを、それぞれbind-9.2.3/bin/named/includeとbind-9.2.3/bin/named下にコピーします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
bind-9.2.3/bin/named/Makefile.inファイルを修正します。「mysql_config」実行時の--cflagsの値をDBDRIVER_INCLUDESに、--libsの値をDBDRIVER_LIBSに記入します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
続いて、bind-9.2.3/bin/named/main.cファイルの以下の行を修正します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ここからはBIND 9の通常インストールと同様の作業です。configure、make、make install、namedユーザーの作成、/var/named、/var/run/namedの順に実行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ここまで終了したら、第2回を参考に、/etc/named.confと各ゾーンファイルをいったん用意します。
sdbの設定
example.jpのゾーン情報にMySQL sdbドライバを組み込みます。ここではMySQLサーバとDNSサーバが同一ホストであるという前提で紹介しています。ホストが異なる場合は、以降の「localhost」を適宜サーバのアドレスに置き換えます。
MySQLに次のデータベースとテーブルを作成し、namedユーザーへの権限を設定します。
MySQLサーバ | :localhost |
---|---|
データベース | :bind_mysql |
テーブル | :example_zone |
データベース接続ユーザー(パスワード) | :named(pass) |
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
example_zoneテーブルでは、キーやインデックスを作成していません。必要なら適宜作成します。
では具体的な手順です。まず、bind_mysqlデータベースを作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
次に、GRANTクエリー文でnamedユーザーへの権限を設定し、example_zoneテーブルを作成します。なお、作成に当たってはexample_zone.sqlファイルを使用することもできます。example_zone.sqlファイルを使用した場合、サンプルレコードも登録されます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
example_zone.sqlファイルを使用する場合は、
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
とします。
example_zoneテーブルを作成したら、example_zone.sqlファイルを参考にSOA、NS、Aなどのレコードをデータベースに登録します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
以上で、MySQL側の準備は終了です。
BIND 9側の設定は単純です。通常のゾーンファイルを使用した場合との違いは、named.confのexample.jpゾーンの記述のみです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
(1)の書式は、
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
です。mysqldbはMySQL用sdbドライバの指定です。
準備が整ったら、namedを起動します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
もし、
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
のようなエラーが出る場合は、ldconfigを使ってlibmysqlclient.soを共有ライブラリに登録します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
/var/log/messageにエラーが出力されていないかを確認します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
と表示される場合は、MySQLサーバとの接続を確認します。MySQLサーバ側のログを確認するには、快速MySQLでデータベースアプリ! 第13回中の「ロギング機能と動作ステータスの取得」を参照してください。
共有ライブラリのバージョンの問題でSegmentation faultを起こす場合は、各ライブラリを最新版に更新します。
sdbの動作チェック
正常に動作しているか否か、digを用い検証します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
MySQLをBINDのバックエンドにした利点を確認しましょう。BIND 9を介さず、直接MySQLに対してレコードの更新を行います。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記のように、ゾーン情報の変更が即座に反映されていることが分かります。
また、JDBCやDBIなど、データベースが使えるさまざまなインターフェイス利用することで、Webを介したゾーン情報の更新などに活用できます。ただし、MySQL sdbドライバではDyanmic DNSやDNSSECが使用できず、ゾーン転送にも制限が付くため、利用に当たっては十分な検討が必要です。
パフォーマンスは、ゾーン情報がどれだけキャッシュされるかが結果に大きく影響します。キャッシュされる割合が少ない場合はMySQL sdbドライバの方が効果的ですが、ゾーンレコードが数百、数千程度の場合は通常のゾーンファイルで管理した方が高速です。MySQL sdbドライバを使用した場合、named自体ではキャッシュが行われず、該当ゾーン情報のDNS問い合わせはすべてSQLクエリーに置き換わります。
sdbインターフェイスの詳細については、ソース中のdoc/misc/sdbファイルを参照してください。
Copyright © ITmedia, Inc. All Rights Reserved.