WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

DNS サーバーの構築 : サーバーのインストール

さて、今日からは心機一転(?)各種サーバーソフトウェアをインストールしていきたいと思います。まずは最も基本的なサービスとして DNS を提供する BIND をインストールします。DNS サーバーを立てておくと他のサーバーもより便利に使えます。また、外部のドメイン名解決をキャッシュするので、ネットワーク負荷も減りますよ(^^)v

なお、今回構築する DNS サーバーは LAN 内でのみ使用することを前提にしていて、インターネットへの公開は考えていません。マスター DNS サーバー1台のみの構成で、セキュリティーもさほど高くないのでご注意ください。

BIND のインストール

GentooLinux で使える DNS サーバーにはいくつかありますが、ここでは Internet Systems Consortium が開発する BIND を使用します。BINDPortage で簡単にインストールできます。

emerge bind

/etc/bind/named.conf の作成

BIND の最も基本的な設定ファイルが "/etc/bind/named.conf" です。記述できる内容は多岐に渡っており、そのすべてを説明するのは困難です。よって、まず私が使用した "named.conf" の内容を示し、そこで使用している記述のみを説明しようと思います。詳細は BIND 9 Administrator Reference Manual などを参照してください。

以下が、今回私が使用した "/etc/bind/named.conf" です。

options {
    directory "/var/bind";

    listen-on-v6 { none; };
    allow-transfer { none; };
    pid-file "/var/run/named/named.pid";

    allow-query {
        192.168.0.0/24;
        127.0.0.1;
    };
};

zone "." IN {
    type hint;
    file "named.ca";
};
zone "localhost" IN {
    type master;
    file "pri/localhost.zone";
    allow-update { none; };
    notify no;
};
zone "127.in-addr.arpa" IN {
    type master;
    file "pri/127.zone";
    allow-update { none; };
    notify no;
};
zone "sourcewalker.com" IN {
    type master;
    file "pri/sourcewalker.com.zone";
    allow-update { none; };
    notify no;
};
zone "0.168.192.in-addr.arpa" IN {
    type master;
    file "pri/0.168.192.zone";
    allow-update { none; };
    notify no;
};

基本的な文法

"named.conf" は、C 言語に似た独特の文法で記述します。大まかに、以下の形式のステートメントが並んでいると考えられます。

<コマンド> [オプション...] [ { ブロック } ] ;
コマンド
指示内容を表す文字列です。使用できるコマンドは場所ごとにあらかじめ決められています。
オプション
コマンドのパラメータです。どのようなパラメータが指定できるかは、コマンドによって異なります。
ブロック
コマンドによっては、さらに詳細なオプションを指定するためにブロックを指定する場合があります。ブロックの中身もやはり上記の形式のステートメントを複数並べることができます。

IP アドレスの指定方法

コマンドによっては、ブロック内にコマンドとして IP アドレスを指定できるものがあります。その際は以下の記述が使用できます。

単体のアドレスを指定
普通に IP アドレスを記述すれば、その IP アドレスが単体で指定されます。
ネットワーク全体のアドレスを指定
"192.168.0.0" のようにホスト部を 0 にしたアドレスを指定すると、そのネットワーク全体のアドレスが指定されたとみなします。
サブネット全体を指定
"192.168.0.0/24" のようにネットワーク部のビット数とともに指定すると、そのサブネット全体が指定されたとみなします。

さらに、以下のシンボルも使用できます。

anyすべてのアドレス
noneまったく指定しない場合
localhost自ホストの指定
localnets自分自身を含むネットワーク上の全ホスト

ゾーンの指定方法

ゾーンとは、ひとつのゾーンファイルで管理する範囲を言います。通常、ひとつのドメインは正引き(ホスト名から IP アドレスへのマッピング)と逆引き(IP アドレスからホスト名へのマッピング)の 2 つのゾーンで構成されます。

正引きゾーンの指定は、単にドメイン名を指定すれば OK です。今回の場合、私が取得しているドメイン名である "sourcewalker.com" を指定しています。

逆引きゾーンの指定はちょっと複雑です。その DNS サーバーで管理する IP アドレスのネットワーク部を逆の順番で記述し、最後に ".in-addr.arpa" を付加します。私の自宅 LAN はクラス C の 192.168.0.0 〜 192.168.0.255 を使用していますので、"0.168.192.in-addr.arpa" となります。

ルートに記述できるコマンド

ルートに記述できる主なコマンドには以下のものがあるようです。

コマンド内容
aclIP アドレスのリストを定義
controlsrndc コマンドで使用するコントロールチャンネルの宣言
include他のファイルの内容を挿入
loggingログの記録方法の指定
optionsグローバルオプションの指定
server個々のサーバーごとのオプションを定義
trusted-keysDNSSEC で使用する鍵の定義
zone各ゾーンの情報

今回使用した options、zone のコマンドについて以下で説明していきます。

"options" ルートコマンド

"options" コマンドは BIND 全体の動作を制御するコマンドです。パラメータは特になく、ブロック内にさまざまなサブコマンドを並べることで動作を制御します。使用できるサブコマンドは多数ありますが、以下に今回使用したものを列挙します。

directory
"named.conf" 以外の設定ファイルが存在するパスを指定します。GentooLinux の場合、"/var/bind" を指定することになっています。
listen-on-v6
BIND が問い合わせに答えるネットワークポートを IPv6 のアドレスで指定します。今回は IPv6 は使用しないので、"none;" を指定しています。
allow-transfer
スレーブ DNS サーバーが存在する場合、転送を許可する IP アドレスを指定します。今回はマスターサーバーのみの構成なので、"none;" を指定しています。
allow-query
どのクライアントからの問い合わせに返答するかを指定します。
pid-file
サーバーの起動制御に使用するファイルを指定します。GentooLinux の場合、"/var/run/named/named.pid" を指定します。

"allow-query" の指定だけネットワーク構成にあわせて変更すれば、あとはこのままで動作するはずです。

"zone" ルートコマンド

"zone" ルートコマンドは、BIND で管理するゾーンを指定するコマンドです。以下のように指定します。

zone "<ゾーン名>" IN { サブコマンド... } ;

ゾーン名は、前述の書式で記述してください。ダブルクォーテーションで囲むのを忘れずに。今回は以下のサブコマンドを使用しています。

type
そのゾーンでどのような役割を果たすかを指定します。具体的な指定は後述。
file
そのゾーンのデータベースファイル(ゾーンファイル)を指定します。
allow-update
DynamicDNS の機能を有効にする場合に、更新要求を受け付ける IP アドレスを指定します。今回はこの機能は使わないので、"none;" を指定しています。
notify

type コマンドのパラメータは以下のいずれかです。

hintルート DNS サーバーのヒント情報の指定
masterマスターサーバーとして動作
slaveスレーブサーバーとして動作
stubよくわかりません(^^;
forward他のサーバーに処理を委譲する

ルートゾーン(".")は原則的に "type hint; file "named.ca"" を指定します。"localhost""127.in-addr.arpa" はローカルループバックアドレスに対するゾーンで、ゾーンファイルもあらかじめ用意されていますので、このままで動くはずです。その他のゾーンは、ネットワーク構成にあわせて変更してください。ゾーンファイルも新たに作成する必要があります。

文法チェック

"named.conf" ファイルを作成したら、文法チェックをしておきましょう。以下のコマンドを実行し、エラーが表示されなければ OK です。

named-checkconf /etc/bind/named.conf

以上で基本的な設定が終わりました。明日からはゾーンファイルの作り方を説明していきます。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles