このエントリーをはてなブックマークに追加
スポンサーリンク

BINDの設定

BINDのインストール

まずBINDのソースをコンパイルします・・・といいたい所ですが、今回は特にコンパイルオプションを変更する必要がないので、LinuxのCDに最初からついてくるものをそのまま使いましょう。インストールする時に「DNSサーバー」を選択していればOKです。選択しなかった時は、RPMコマンドでインストールしてください。

mount /media/cd-rom
rpm -ivh /media/cd-rom/RedHat/bind-9.2.0-8.i386.rpm
※マウントポイント、ディレクトリ名、バージョン番号はお持ちのディストリビューションに合ったものに読み替えてください。

インストールしたら、起動します。
/etc/rc.d/init.d/named restart

また、サーバー起動時に自動的に起動するようにします。
chkconfig named on

named.confの設定

まずは、/etc/named.confを設定します。

最初から入っているものをそのまま使い、ゾーンファイルのみ追加する事にします。しかし、最初から入っているファイルを壊してしまうとBINDをインストールしなおしになってしまうので、named.confはオリジナルをバックアップしておきましょう。

cd /etc
cp named.conf named.conf_backup

ゾーンファイルを追加します。ゾーンファイルは、元々
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
のように、ローカルホストに対する設定が入っているので、この後ろに追加するのが良いでしょう。例えば、aufheben.netのドメインを設定するのであれば、
zone "aufheben.net" IN {
        type master;
        file "named.aufheben.net";
};
のように設定します。
逆引きを設定する場合、ゾーン指定は
zone "ネットワークアドレスの逆.in-addr.arpa" IN {
        type master;
        file "named.aufheben.net.rev";
};
のようになります。ネットワークアドレスの逆とは、例えばネットワークアドレスが219.166.53.192なら192.53.166.219.in-addr.arpaのように逆から記述します。

グローバルアドレスに対する逆引きサーバーは通常プロバイダのサーバーに設定されていますので、逆引きサーバーを設置する際にはプロバイダから逆引き権を貸与してもらう必要があります。その際に所有してないドメインを詐称しないようにしましょう。

ゾーンファイルの設定

ゾーンファイルを設定します。ゾーンファイルとは、つまり、各サブドメインのIPアドレスを説明したファイルです。また、逆に各IPアドレス(最後の1バイト目)からサーバー名の逆引きを説明したファイルです。

・正引きファイル /var/named/named.aufheben.net
$TTL 86400
@       IN      SOA    www.aufheben.net. root.aufheben.net. (
                                      2004081601 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Negative TTL
              IN      NS      ns
              IN      A       xxx.xxx.xxx.xxx
              IN      MX 10   www
ns            IN      A      xxx.xxx.xxx.xxx
www           IN      A      xxx.xxx.xxx.xxx
/var/named/named.aufheben.netというファイルを作成します。

$TTL 86400・・・このドメインにアクセスしたネームサーバーが、結果を保存する期間を秒数で指定します。86400秒つまり1日になります。
IN SOA ・・・・ このドメイン名と管理者のアドレスを入れます。管理者のアドレスは@で区切らず全て.(ピリオド)で区切ります。
Serial・・・・通し番号を入れます。ここが増えるとセカンダリーDNSが変更があった事を認識します。日付+連番という形式にする事が多いです。
Refresh・・・セカンダリーサーバーが更新チェックをすべきタイミングを秒数で示します。
Rerty・・・セカンダリーサーバーが読み込みに失敗した際にリトライするタイミングを秒数で示します。
Expire・・・マスターサーバーがダウンしている時のセカンダリーの有効期限を秒数で示します。
Negative TTL ・・・このドメインにアクセスしたネームサーバーが、正引き(または逆引き)に失敗したときに、「失敗しました」という情報を保存しておく期間を秒数で指定します。
IN NS・・・このドメインのネームサーバー名を指定します。
IN A・・・このサブドメインのIPアドレスを指定します。
IN MX ・・・このサブドメイン宛にメールが届いた場合に、どこへメールを転送するかを指定します。

最初の、何も書いてないと所にあるIN Aレコードは、アクセスする側がサブドメインをつけないでアクセスした場合(http://aufheben.net/みたいに)のアドレスを示します。

また、ns とか www は、アクセスする側がサブドメイン付きでアクセスした場合(http://www.aufheben.net/みたいに)のアドレスを示します。使いたいサブドメインの数だけ指定を書いてください。

IN MX とは、メールの@の後ろ、つまり@aufheben.net宛てに送られたメールをどのサブドメインが処理するかを示しています。MXレコードがない場合は、サブドメインなしのAレコードの所に送られますが、相手サーバーによってはメール自体を送らない場合もありますので、MXレコードは記述するようにします。この例では、メールはサブドメインwwwに送られます。

MXレコードは複数記述する事ができます。それにより、メールサーバーがダウンしている場合に、予備のメールサーバーにメールを送るという事ができます。複数記述した場合、MXの後ろの数字の若い方が優先的に転送されます。

・逆引きファイル
$TTL 86400
@       IN      SOA    www.aufheben.net. root.aufheben.net. (
                                      2004081601 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
       IN      NS      www

113    IN      PTR     ns
114    IN      PTR     www
115    IN      PTR     www2
逆引きファイルも前半は正引きと同じです。ただし、後半は、IN PTRレコードがあります。これは、IPアドレスの下1バイトがどのサブドメインに対応しているかを記入します。

wwwとサブドメインだけ書くと、www.aufheben.netのようにドメインが続いてついている事になります。フルドメイン名で記述する時は、www.aufheben.net.のように最後にピリオドを書きます。フルドメイン名を書いた上で最後のピリオドを忘れてしまうと、www.aufheben.net.aufheben.netという意味になってしまいます。

セカンダリーDNS

セカンダリーDNSを設置する場合、マスターDNSと全く同じものを書いておけばいいのですが、それだと、もし何かIPアドレス等に変更があった場合にいちいちセカンダリーも直さないといけなくなり、面倒です。

そこで、セカンダリー専用の設定をすることで、自動的にマスターDNSから設定を読み込む事ができます。

・/etc/named.conf
zone "aufheben.net" {
        type slave;
        file "named.aufheben.net.slave";
        masters { xxx.xxx.xxx.xxx; };
};
セカンダリーの/etc/named.confには、このようなゾーンファイルを指定します。mastersにはマスターDNSのIPアドレスを指定します。そうすると、定期的にマスターDNSから設定をロードして/var/named/named.aufheben.net.slaveというファイルを作ってくれます。

また、定期的にマスターDNSのゾーンファイルのシリアル番号を見て、シリアル番号が更新されていたら自動的に設定をリロードします。

動作確認

以上で設定は完了です。ネームサーバーを再起動させてみましょう。
/etc/rc.d/init.d/named restart

bindの場合、一箇所でも設定ミスがあると常駐自体しなくなりますので、他にそのネームサーバーを使っているドメインも含めて全部IPが引けなくなってしまいます。なので、ネームサーバーの再起動には慎重になる必要があります。

バージョンによっては途中にエラーがあっても[OK][OK]と表示されてしまうので、1秒ぐらい間を置いて2回リスタートさせてみます。2回目に[Failed][OK](もしくは[失敗][成功])と表示された場合は、常駐が解除できない=常駐していないという事になります。

リスタートしたら念のためpsコマンドによる確認もしてみます。
ps ax | grep named
これでnamedというプロセスが常駐してなければどこかにエラーがあると思った方が良いでしょう。

もしnamedプロセスが常駐してない場合は、どこかに記入ミスがありますので、よく確認してください。
/usr/sbin/named-checkconf /etc/named.conf

とする事で/etc/named.confの文法違反をチェックする事ができます。同様に、
/usr/sbin/named-checkzone ドメイン名 /var/named/ゾーンファイル名

とすることで、ゾーンファイルの文法違反をチェックする事ができます。これらは、できればリスタートする前にチェックしておいてください。

また、自サーバーから正しくIPが引けても、よそのサーバーから引けないかもしれません。例えば、IPTABLESやファイアウォール装置でDNSの使うポートが塞いである場合などです。そのような事がないかどうか確認する場合は、まず別のネットワークにある(遠方にあるのが望ましい)サーバーにログインした上で、
nslookup フルドメイン名 ネームサーバーのIP
のように、nslookupコマンドの第二引数としてネームサーバーのIP(つまり今設定したサーバーのIP)を指定します。それで、正しくIPが引ければ、少なくとも遠方から正引きは正しくできているという事になります。

また、nslookupコマンドは将来的にサポートが終了する事がアナウンスされていますので、digコマンドも覚えておきましょう。
dig フルドメイン名 @ネームサーバーのIP
スポンサーリンク