DNSサーバを立ち上げる


DNS

DNSは Domain Name System のことです。DNSは、インターネットでは必須の情報を 提供します。主な役割としては、ネットワークに存在するマシンのホスト名を IPアドレスに変換する事、メールアドレスとメールサーバを対応づける事などが あります。電子メールもWWWも、DNSが無ければ、まともに使用することは できません。

BIND

DNSサーバを実現するためには、BINDと呼ばれるソフトウェアを使用します。 BINDの開発は ISC(Internet Software Consortium) というところが行っています。
LinuxやFreeBSDなどのPC-UNIXなどでは、BINDは通常、バイナリパッケージとして 用意されていますので、通常はそちらを使った方が便利です。 ここでは、ソースファイルから BIND をインストールする手順について 説明します。
なお、ここでは、インストールは FreeBSD-2.2.8Release が動作している計算機で 行います。

以下のURL
ftp://ftp.kyushu-u.ac.jp/pub/Net/Bind/mirror/
ftp://core.ring.gr.jp/pub/net/bind/src/
より、できるだけ最新のバージョンの BIND のソースファイルを入手します。
また、Bind8の最新版は以下の URL より入手できます。
ftp://ftp.kyushu-u.ac.jp/pub/Net/isc/bind/src/cur/bind-8/

ここでは、bind-8.2.2-P5 を入手します。以下のファイルを入手し、 適当なティレクトリに置きます。
bind-src.tar.gz
bind-doc.tar.gz
bind-contlib.tar.gz
入手後、作業用のディレクトリを作成し、その中で解凍・展開します。
% mkdir bind-8.2.2-P5 (任意)
% mv bind-src.tar.gz bind-doc.tar.gz bind-contlib.tar.gz bind-8.2.2-P5
% cd bind-8.2.2-P5
% tar xvfz bind-src.tar.gz
% tar xvfz bind-doc.tar.gz      (必要に応じて)
% tar xvfz bind-contlib.tar.gz  (必要に応じて)
% cd src
srcディレクトリにある INSTALL というファイルを読みます。このファイルには、 サポートするOS、インストールの手順などが書いてあります。
サポートするOSについては、makeでコンパイルを行うときに、makeがOSを自動認識し 必要な設定をしてくれます。コンパイル、およびインストールは以下の手順で 行います。
% make clean
% make depend
% make
% su
Password:
# make install
以上で BIND のインストールは終了です。インストールするときは、 どのディレクトリにどういうファイルがインストールされたか分かるように ログを取っておくと便利です。

設定

ここでは、研究室内の内部ネットワークを DNSで管理することを前提として、 以下のような設定方針で DNSサーバの設定を行う方法について説明します。
DNSマスターサーバのホスト ns1
DNSスレーブサーバのホスト ns2
DNSマスターサーバのIPアドレス 192.168.0.1
DNSスレーブサーバのIPアドレス 192.168.0.2
管理するドメイン(架空のドメイン) funalab.ac.jp
管理するネットワーク 192.168.1.0/255.255.255.0 のクラスC
クライアント 192.168.0.3 〜 192.168.0.254

BIND8 の named を起動して運用するには、起動時に読み込まれる設定ファイル (/etc/named.conf)と、他のネームサーバを探すために最初に必要なルートサーバの 一覧、公開したい自ドメインの情報を格納したファイル(ゾーンファイル)が必要です。 以下に、それぞれの設定ファイルについて説明します。

/etc/named.conf

named起動時に読み込まれる設定ファイルは、BIND4の時は /etc/named.boot でしたが、 BIND8では /etc/named.conf に変更され、書式も異なっています。
既に BIND4 の運用経験があって、BIND4用の /etc/named.boot が手元にある場合は、 src/bin/named ディレクトリにある named-bootconf.pl という Perl スクリプト により、BIND8用の /etc/named.conf ファイルに変換できます。
# perl named-bootconf.pl < /etc/named.boot > /tmp/named.conf
# mv /tmp/named.conf /etc/
念のため、/tmp に変換したものを作成し、内容を確認してから /etc に移動する
BIND8で初めて DNSサーバを立ち上げる場合には、このファイルを新規作成します。 DNSのマスターサーバ、スレーブサーバでファイルの内容が少し異なります。 以下に、マスターサーバ用のサンプルを示します。
// sample named.conf for sub-domain Funada-Lab
// マスターサーバ用

// アクセス制御リスト
acl funalab {
        192.168.1.0/24;
        127.0.0.1;
};

// 動作設定
options {
        directory "/var/named";    # 管理するドメインの情報を格納したディレクトリを指定
        allow-transfer {
                funalab;
        };
};

// ルートサーバ設定
zone "." {
        type hint;
        file "named.root";      # ルートネームサーバの一覧を保持したファイル名を指定
};

// 正引き設定
zone "funalab.ac.jp" {
        type master;            # ドメインのマスターサーバである指定
        file "funalab.zone";    # funalab.ac.jpドメインの正引きを定義するファイル名を指定
};

// 逆引き設定
// アドレスの数字が逆順になっている事に注意
zone "1.168.192.in-addr.arpa" {
        type master;              # ドメインのマスターサーバである指定
        file "192.168.1.rev";     # 192.168.1.* の逆引きを定義するファイル名を指定
};

// ローカルホスト設定
zone "localhost" {
        type master;               # ドメインのマスターサーバである指定
        file "localhost.zone";     # localhostの正引きを定義するファイル名を指定
};

zone "0.0.127.in-addr.arpa" {
        type master;        # ドメインのマスターサーバである指定
        file "127.rev";     # localhostの逆引きを定義するファイル名を指定
};
// sample slave named.conf for sub-domains in eg.t.kanazawa-u
// スレーブサーバ用

// アクセス制御リスト
acl funalab {
        192.168.1.0/24;
        127.0.0.1;
};

// 動作設定
options {
        directory "/var/named";     # 管理するドメインの情報を格納したディレクトリを指定
        allow-transfer {
                funalab;
        };
};

// ルートサーバ設定
zone "." {
        type hint;
        file "named.root";     # ルートネームサーバの一覧を保持したファイル名を指定
};

// 正引き設定
zone "funalab.ac.jp" {
        type slave;                 # ドメインのスレーブサーバである指定
        file "bak/funalab.zone";     # funalab.ac.jpドメインの正引きを定義するファイル名を指定
        masters {
                192.168.1.1;
        };
};

// 逆引き設定
zone "1.168.192.in-addr.arpa" {
        type slave;                 # ドメインのスレーブサーバである指定
        file "bak/192.168.1.rev";     # 192.168.1.* の逆引きを定義するファイル名を指定
        masters {
                192.168.1.1;        # マスターサーバのIPアドレスを指定
        };
};

// ローカルホスト設定
zone "localhost" {
        type master;               # ドメインのマスターサーバとして設定
        file "localhost.zone";     # localhostの正引きを定義するファイル名を指定
};

zone "0.0.127.in-addr.arpa" {
        type master;        # ドメインのマスターサーバとして設定
        file "127.rev";     # localhostの逆引きを定義するファイル名を指定
};

ルートサーバ一覧ファイル

ネームサーバが自分の知らないドメインの情報を入手する場合、まず最初に ルートサーバと呼ばれるサーバに接続して、次に質問を投げるべきサーバの場所を 聞きます。その最初に聞きに行くべきサーバの一覧はファイルとして用意しておき、 ネームサーバが起動する際に読み込ませます。最新の一覧は ここに置いておきます。このファイルを、上記の 設定の場合、/var/named/named.root として置きます。実際には、起動時に この一覧の中に書かれているサーバのどれかにアクセスして、最新の ルートサーバ一覧を入手するようになっています。常に最新版に更新する必要は ありません。

ゾーンファイル

ネームサーバの保持するデータの管理単位をゾーンと呼びます。一般に、1つの ゾーンの中には複数のドメインを含むことができます。また、1つのサーバで複数の ゾーンを受け持つことができます。しかし、逆に1つのドメインを複数のゾーンに 分けて管理することはできません。例えば、funalab.ac.jp の 半分をサーバAに、もう半分をサーバBに分けて管理することはできません。 /etc/named.conf ファイルで記述した以下のゾーンファイルを /var/named/funalab.zone に用意します。簡単なサンプルを以下に示します。

正引き(funalab.zone)

; SOA
@       IN      SOA     ns1.funalab.ac.jp.       hostmaster.funalab.ac.jp. (
                        1999010101      ; Serial
                        28800           ; Refresh     8 hours
                        7200            ; Retry       2 hours
                        604800          ; Expire      7 days
                        86400 )         ; Minimum TTL 1 day
; ネームサーバの設定
        IN      NS      ns1.funalab.ac.jp.
        IN      NS      ns2.funalab.ac.jp.
; メイルサーバの設定
        IN      MX 10   mail.funalab.ac.jp.
        IN      MX 20   ns.funalab.ac.jp.
; IPアドレスの設定
ns1     IN      A       192.168.1.1
ns2     IN      A       192.168.1.2
mail    IN      A       192.168.1.3
host1   IN      A       192.168.1.4
host2   IN      A       192.168.1.5
host3   IN      A       192.168.1.6
host4   IN      A       192.168.1.7
host5   IN      A       192.168.1.8
host6   IN      A       192.168.1.9
host7   IN      A       192.168.1.10
.....
; 別名の設定
www     IN      CNAME   mail
ftp     IN      CNAME   host1
proxy   IN      CNAME   host2
  • SOA
    ここから数行は、SOAレコードと呼ばれる情報の定義が記述されています。 行頭の「@」は、/etc/named.confで指定した、このファイルの受け持つ ドメイン名を意味します。ここでは「funalab.ac.jp」と書いたのと同じ意味に なります。次の「IN」はクラスと呼ばれ、プロトコルを表します。 通常は「IN」にします。次の「SOA」はレコードの種類を表します。 他に「NS」「A」「MX」があります。それ以降はレコードの種類によって書き方が 異なります。
    SOAレコードでは、「マスターサーバ名」「管理者メールアドレス」「パラメータ」を 列挙します。「管理者メールアドレス」は「@」を「.」に直すことに注意します。 なお、DNS管理者のメールアドレスとして、「hostmaster」というメールエイリアスを 用いることが推奨されています。
    • Serial
      通し番号の意味ですが、ここでは、このファイルに変更があったかどうかの判断を するために使われます。このファイルに変更を加えたら、必ずこの数値を前より 大きな数値にします。スレーブサーバ等は、自分が持っているデータより シリアル番号が大きいデータをマスターサーバが持っていれば、内容が更新されたと 判断して再度、データを取得します。変更の度に数値を順に1ずつ増やす必要は無く、 前の数値より大きくすればOKです。推奨する記法は、「変更年月日+2桁の通し番号」 です。例えば、2000年8月11日に変更したら、2000081100とし、同じ日にもう一度 変更したら、最後の数字を1にします。
    • Refresh
      この値は、スレーブサーバがマスターサーバにシリアル番号の変更があったか どうかをチェックしに行く時間間隔を指定します。単位は秒です。 マスターサーバの内容を一早くスレーブサーバに反映したいならば、小さめの値に 設定しますが、その場合はネットワークの帯域を多く使用するようになります。
    • Retry
      この値は、スレーブサーバがマスターサーバにシリアル番号を確認しに行って 接続に失敗した時、再度アクセスに行くまでの時間間隔を指定します。単位は秒です。
    • Expire
      この値は、スレーブサーバがマスターサーバにアクセスできない時、どの程度の期間、 今持っているデータのコピーを正当なものとして扱うかを指定します。単位は秒です。 この値は、「Retry」や「Minimum TTL」の値より大きくする必要があります。 この期間を越えてマスターサーバにアクセスできなかった場合、スレーブサーバは マスターサーバへのアクセスは続行するものの、そのゾーンの情報は捨てて、提供 しないようにします。
    • Minimum TTL
      この値は、このゾーンで提供される各データがどのくらい他のネームサーバの キャッシュに保存されるかを指定します。単位は秒です。この値は、このゾーンが 変更される頻度から考えて、できるだけ大きな値に設定します。
  • ネームサーバの設定
    ここでは、このゾーンを担当するネームサーバを指定します。ネームサーバを 検索するためのレコードの種類は、「NS」です。「IN」の前に何も書いていない 場合は、前のレコードの値をそのまま使います。従って、これらの行では 「funalab.ac.jp」のネームサーバを定義していることになります。 設定時にマスターとスレーブの区別はなく、両方とも同じ情報を保持していると 考え、対等に扱われます。
  • メールサーバの設定
    ここでは、宛先が例えば「sakai@funalab.ac.jp」の形のメールを 受け取れるホストを指定しています。メールサーバを検索するためのレコードの種類は 「MX」です。「IN」の前には何も書かれていないため、 「@funalab.ac.jp」宛のメールを受け取れるホストを指定している ことになります。「MX」の後に記述されている数値は、「preference」と呼ばれ、 この数値が小さい方から優先的にアクセスされます。 「preference」の数値が一番小さいメールサーバは、「@funalab.ac.jp」宛ての メールを自分宛として処理できるように設定しておく必要があります。
  • IPアドレスの設定
    ここでは、各ホストの名前からIPアドレスを引くための設定をします。 IPアドレスを検索するためのレコードの種類は「A」です。ホスト名で「.」で 終わらない名前には、このファイルが受け持つドメイン名が補完されます。 複数の名前を同じIPアドレスに割り当てる事も可能です。またその逆も可能です。 同じ名前で複数のAレコードがある場合、検索する度に順に違う値が返ってくる ことになります。
  • 別名の設定
    あるドメイン名に別名をつけて、その別名を検索すると、もとの名前が引けるように したい時に、この「CNAME」レコードを使います。この例では、 「www.funalab.ac.jp」という別名を定義し、 「mail.funalab.ac.jp」を指すように指定しています。 右辺でも、「.」で終わらないホスト名には、現在のドメイン名が補完されます。 特定の機能を持つサーバに名前をつけたい時などに利用します。

逆引き(192.168.0.rev)

; SOA
@       IN      SOA     ns.funalab.ac.jp.       hostmaster.funalab.ac.jp. (
                        1999010101      ; Serial
                        28800           ; Refresh     8 hours
                        7200            ; Retry       2 hours
                        604800          ; Expire      7 days
                        86400)          ; Minimum TTL 1 day
; nameservers
        IN      NS      ns1.funalab.ac.jp.
        IN      NS      ns2.funalab.ac.jp.
; addresses
1       IN      PTR     ns1.funalab.ac.jp.
2       IN      PTR     ns2.funalab.ac.jp.
3       IN      PTR     mail.funalab.ac.jp.
4       IN      PTR     host1.funalab.ac.jp.
5       IN      PTR     host2.funalab.ac.jp.
6       IN      PTR     host3.funalab.ac.jp.
7       IN      PTR     host4.funalab.ac.jp.
8       IN      PTR     host5.funalab.ac.jp.
9       IN      PTR     host6.funalab.ac.jp.
10      IN      PTR     host7.funalab.ac.jp.
.....
  • SOAレコード、NSレコード
    この部分は正引きと同じです。
  • 逆引きアドレス
    ここでは、各IPアドレスに対応するホスト名を指定します。 IPアドレスからホスト名を検索するためのレコード情報は「PTR」です。 このゾーンファイルは 1.168.198.in-addr.arpa. ゾーンを担当しているため、例えば 行頭の「1」は「1.1.168.198.in-addr.arpa.」を意味します。つまり、最初の行は 「192.168.1.1」に対応するホスト名は「ns1.funalab.ac.jp.」 に対応します。また、このファイルでは、右辺に書くドメイン名を省略することは できません。また、最後に「.」をつけるのを忘れないように注意します。
  • ローカルホスト正引き(localhost.zone)

    @       IN      SOA     ns1.funalab.ac.jp.    hostmaster.funalab.ac.jp. (
                            1999010101      ; Serial
                            172800          ; Refresh     2 days
                            7200            ; Retry       2 hours
                            1728000         ; Expire      20 days
                            172800 )        ; Minimum TTL 2 days
    
            IN      NS      localhost.
            IN      A       127.0.0.1
    
    ループバック用のローカルホスト localhost の正引きをするための 設定ファイルです。

    ローカルホスト逆引き(127.rev)

    @       IN      SOA     ns1.funalab.ac.jp.    hostmaster.funalab.ac.jp. (
                            1999010101      ; Serial
                            172800          ; Refresh     2 days
                            7200            ; Retry       2 hours
                            1728000         ; Expire      20 days
                            172800 )        ; Minimum TTL 2 days
    
            IN      NS      localhost.
    
    0       IN      PTR     loopback.
    1       IN      PTR     localhost.
    
    ループバック用のローカルホスト localhost の逆引きをするための 設定ファイルです。

    スレーブサーバ

    スレーブサーバは、マスターサーバからゾーン転送によってその内容をコピーし、 マスターサーバと同じ内容を提供するサーバです。ネームサーバが停止すると、 様々なサービスに影響を与えるため、信頼性を高めるために用意されます。 上位のサーバからみた場合、マスターとスレーブは区別されません。同じドメイン への質問が複数来た時には、交互に利用されます。マスターとスレーブは 同じ内容のデータを保持している必要があり、そうでないと質問の度に 違う答えが返ってくることになってしまいます。

    起動

    namedの起動は、引数を何も指定せずに、以下のようにして行います。
    # /usr/sbin/named
    
    namedは、何も出力せずに起動します。設定ファイルにミスがあっても画面には 何も出力せずに、syslog を通してログファイルに書き込まれます。 /etc/syslog.conf ファイルに syslog の設定が記述されています。

    動作確認

    ログで起動が確認できたら、実際に質問を投げかけてみて、動作確認を行います。 DNSへの問い合わせをするコマンドがいくつかインストールされていますので、 それを使うか、nslookup などを使って動作確認をします。

    起動設定

    システムの起動時に、自動的に named が起動するように設定します。 SunOS や FreeBSD では /etc/rc.local に、Linux では /etc/rc.d/rc.local に 以下のような起動スクリプトを追加します。
    #
    # Starting Name Server
    #
    if [ -f /usr/sbin/named -a -f /etc/named.conf ]; then
         echo -n 'Starting Internet Domain Name Server:'
         /usr/sbin/named
         echo ' BIND.'
    endif
    
    また、FreeBSDでは、/etc/rc.conf ファイルを以下のように編集します。
    named_enable="YES"               # Run named, the DNS server (or NO).
    named_program="/usr/sbin/named"  # path to named, if you want a different one.
    named_flags=""                   # Flags for named
    
    Vine Linxu では、スーパーユーザでログインして、ntsysv コマンドを実行し、 システム起動時に実行したいデーモンを選択します。 編集後、再起動し、namedが起動していることを確認します。

    運用管理


    戻る

    sakai@oak.eg.t.kanazawa-u.ac.jp
    Last modified: Tue Nov 7 18:03:50 JST 2000