Technical information

ジョブフローの簡単な例 DNSのゾーンファイルを編集する

ネットワークに新規のサーバーを追加した場合や、サーバーの入れ替えをした時など、DNSの設定を変更する場合があります。追加・変更する際にはbindのゾーンファイルを書き換えるのですが、管理者権限が必要になり、設定項目も注意が必要であり、運用上は気を使う作業の一つです。ここではKompiraを利用してDNSの登録情報の変更を行ってみましょう。今回の記事はnamedの設定とpythonの簡単な知識が前提となります。

 
事前準備

単純にサーバーの追加であれば、ゾーンファイルにAレコードを追加するのみですが、既存登録の変更となると単純ではありません。
ここではpythonの”dnspython”モジュールを利用しています。(動作確認にはバージョン1.15.0を使用しました。)

流れとしては以下の様になります。
* DNSサーバーから、ゾーンファイルをKompiraサーバーに転送
* Kompiraサーバーで、dnspythonの機能を使って編集
* 編集したファイルをDNSサーバーに再転送

 
dnspythonのインストール

Kompiraサーバーにシェルログインを行った後、管理者権限のアカウントで以下の様にモジュールをインストールしてください。

(追記) Kompira1.5以降では、以下のようにパッケージをインストールします。

 
ライブラリの作成

Kompiraからdnspythonを利用するためのラッパーライブラリを作成していきます。ここでは「DNSレコード編集」という名前の「ライブラリ型」のオブジェクトを作成します。以下の様なpythonのコードを記載します。

これで指定したドメイン名、キーに該当するレコードのIPアドレスを変更して、新しいゾーンファイルに保存する”change_A_record”というメソッドが利用できるようになります。

 
ジョブフローの作成

次にライブラリを利用するジョブフローを作成します。

まず get() を利用して、DNSサーバーからゾーンファイルをKompiraサーバーにダウンロードします。
続いて、先に作成したchange_A_record()を呼び出して、ゾーン情報の編集を行います。結果はnewzoneに保存されます。
最後に変更後のゾーンファイル$newzoneをDNSサーバーに再アップロードして終了です。
(必要に応じてrndcコマンドでゾーン情報の再読み込みを行わせるなどの対応が必要です。)

このようにしてdnspythonの機能を利用して既存のゾーン情報内のレコードの編集を行いましたが、他にもTTLの変更、ドメインの追加、ホストの追加・削除などを行う事が出来ます。上記と同様にライブラリにメソッドを追加してジョブフローから利用する事ができますが、詳細に関してはdnspythonのサイトを参照してください。

また、上記の例ではKompiraサーバー上にpythonライブラリをインストールしましたが、DNSサーバー上にインストールする事が可能であれば、Kompiraからはコマンド発行のみでゾーン情報の変更が出来るため、get/putのようなファイル転送は不要になります。DNSサーバーの認証情報についても「ノード情報」型オブジェクトを使用しても結構です。