2011/07/16 CentOS5.5





プライマリサーバを構築する(CentOS5)

BIND、つまりDNSです。その役割に今更説明は必要ないでしょう。
DNSには基本的に三種類のタイプがあります。

・プライマリDNSサーバ
セカンダリDNSサーバ
・キャッシュオンリーサーバ

これらはゾーン単位でなら同居させることが可能です。
※ゾーン、つまりそのサーバが管理しているドメインの一つ一つの範囲のことです。
 ファイルパスで言えば、個々のエントリをファイルとするなら、ゾーンはフォルダに相当するのでしょうか。


一台のDNSサーバが複数のゾーンを管理していることも珍しくありません。
自社のexample.comドメイン(ゾーン)に関しては責任を持つ立場(プライマリ)、サブドメインに当たる子会社の child.example.comドメイン(ゾーン)については冗長化を兼ねた立場(セカンダリ)、インターネット系ドメインの解決については要求を転 送するだけ(キャッシュオンリーサーバ)、などという具合に。

なおプライマリ、セカンダリという名称はBIND4以前のころで、BIND8からはマスター、スレイブという呼び方をします。
けれど世間的には相変わらずプライマリ、セカンダリと呼ぶことが多いです。

CentOSのDNSクライアントの設定
BINDのインストール
named.confの編集
ゾーンファイルの作成
ルートヒントのダウンロード
ファイアウォールの開放
試験

CentOSのDNSクライアントの指定
OSのDNSクライアントの設定と。DNSサーバの動作は関係ありません。
ですがとりあえず、混乱が無いように指定の仕方を紹介しておきます。

GUI上の設定


コマンドラインからの設定
/etc/resolv.confを編集(各環境のDNS、もしくはDNSである自分自身)

  nameserver 192.168.1.254
  search localdomain




BINDのインストール
ここではBINDはchrootしたものを使用します。
最近のCentOSやFedoreなどは、セキュリティ上の考えからインターネット公開に適したchroot版BINDを推奨しているようです。普通のBINDを使用した場合でも、ファイルパスをわずかに読み替えるだけなので、参考になると思います。

※chroot

 BINDが使用するファイルの構成を/(ルート)から考えて、/var/named/chroot配下に再配置した仕組み。
 例 /etc/named.conf → /var/named/chroot/etc/named.conf
 BINDにとってchrootディレクトリ以上へは辿れなくなることで、侵入者がBINDから侵入してもシステムへアクセスできなくなります。
 一旦chrootをすると、OS上からそれを解除する方法はありません。

インストール自体は相変わらずです。yumから、chrootタイプのbindをインストールします。

#yum install bind-chroot

この時点でインストールされたバージョンは「bind-9.3.6-16.P1.el5」でした。
実運用、とくに公開する場合BINDの最新バージョンを使用するほうが良いです。

なおセキュリティを重視するインターネットサーバ、攻撃が予想されやすい大規模環境、非常にスキルの高いエンジニアなどはソースコンパイルにこだわったりします。
細かな調整を加えることが可能なこと、伝統、単に思想の問題など理由はさまざまです。


named.confの編集
インストールが完了すれば、named.confファイルを作成します。
Fedoreなら5以降、CentOSなら3以降、named.confはデフォルトでは添付されなくなり、自分で記述する必要があります。

named.confにはどんなゾーンを、どんな性質(プライマリ、セカンダリ、キャッシュオンリー)で、どんなファイル名で運用するかということが記述されています。他にもBINDの動作について不用と言えるほど細かい動作を指定できます。

ここでは必要最低限の記述のみ行っています。
chrootを採用しているので、named.confのパスは以下になります。

/var/named/chroot/etc/named.conf

options {
  directory "/var/named";
  // forwarders { DNS-Addr;};
  // forward only;
};

//正引きゾーンの定義
zone "example.com" {
  type master;
  file "example.com.zone";
  allow-update {none;} ;
};

//逆引きゾーンの定義
zone "1.168.192.in-addr.arpa" IN {
  type master;
  file "example.com.rev";
  allow-update {none;} ;
};

//インターネットルートヒント
//zone "." {
// type hint;
//  file "named.ca";
//  allow-update { none; };
//};

この設定では、自身がホストするexample.comゾーンの正引き、逆引き、そしてインターネットドメインのルートサーバへの問い合わせです。
ルートヒントは起動時に自動的ダウンロードしてメモリ上に格納されることと、デフォルトで再帰問い合わせが有効になっているため、インターネットゾーンの設定は無くてもインターネットドメインの解決をすることができます。
でもできることなら最新のルートヒントをファイルで与えるほうが伝統的です。明示的に設定した場合ファイル「named.ca」が必要になります。

ゾーンファイルの作成
受け皿となるファイル(example.com.zoneとexample.com.rev)を作成します。
#cd /var/named/chroot/var/named/
#touch example.com.zone
#touch example.com.rev

空ファイルが出来たら、編集してゾーン情報を加えます。
NSには適当なサーバ名、対応するAレコードにDNSサーバのアドレスを与えます。
host1は、LAN内の適当なホストです。
各FQDNの末尾の「.」に注意しましょう。

example.com.zone

$TTL 86400
@    IN   SOA   bind-sv.example.com.   root.example.com. (
    2011070901 ;Serial
    3600           ;ゾーン転送の間隔 秒
    300             ;転送失敗時のリトライ間隔 秒
    360000       ;ゾーンファイルの保持時間 秒
    86400   )    ;他サーバでキャッシュされる時間 秒

            IN   NS          bind-sv.example.com.
bind-sv  IN   A            192.168.1.99
host1    IN   A            192.168.1.100


example.com.rev

$TTL 86400
@    IN   SOA   bind-sv.example.com.   root.example.com. (
    2011070901 ;Serial
    3600           ;Refresh sec(Transfer span)
    300             ;Retry sec(in failure retry)
    360000        ;SecondaryExpire sec
    86400   )    ;Minumum TTL sec(zone expired time)

            IN   NS          bind-sv.example.com.
99        IN   PTR        bind-sv.example.com.
100      IN   PTR        host1.example.com.


ファイルを作成したら、bindを起動します。
#service named start
#chkconfig named on
正常に起動できない場合は、各ファイルの記述をチェックします。末尾のセミコロンやカッコに気を付けましょう。


ルートヒントのダウンロード
named.confの中でルートヒントを明示的に記述するのは伝統的なことです。
named.conf、以下の情報を有効にします。

zone "." {
  type hint;
  file "named.ca";
  allow-update { none; };
};

明示的に記述した場合、指定したnamed.caファイルがディレクトリに存在してないとサービスの起動に失敗します。
配布サイトからnamed.rootファイルをダウンロードして、名前を変えて配置します。
ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/

よく最新のものを使うとか、起動時にダウンロードするとかあります。
頻繁に更新されるものではありませんが、アチラさんの都合で勝手に変更されるものです。
ルートヒントが変更されたとき、最新のリストを自動で得るには再起動せねばなりません。
なのでDNSサーバとして一瞬たりとも停止できない環境や、ゾーンが大規模で再起動に時間がかかる環境だと再起動は困難です。
リストファイルを編集してリロードすればサービスを停止せずルートリストを更新できるという利点があります。


ファイアウォールの開放
試験の前に、ファイアウォールを開放します。ファイアウォールが有効なら、おそらくUDPの53番は閉じられているでしょう。
自身はともかく、LAN内の端末からはアクセスできません。
GUIかコマンドラインか、いずれかで開放します。

GUIからの開放



コマンドラインからの開放

/etc/sysconfig/iptablesへ、udp 53の行を追加します。


ファイルを編集後、iptablesを再起動します。
#service iptables restart

試験
LAN内の端末から、nslookupで名前解決の試験をしてみます。

#nslookup
>server 192.168.1.99
>host1.example.com

Server: [192.168.1.99]
Address: 192.168.1.99

Name;  host1.example.com
Address: 192.168.1.100

>set type=ptr
>192.168.1.100

Server:  [192.168.1.99]
Address:  192.168.1.99

100.1.168.192.in-addr.arpa      name = host1.example.com
1.168.192.in-addr.arpa  nameserver = bind-sv.example.com
bind-sv.example.com     internet address = 192.168.1.99

無事、回答が帰ってくれば成功です。
タイムアウトする場合は、ファイアウォールで53番が開放されていない、named,confやゾーンファイルの記述が間違っていることが考えられます。

細かい調整を加える場合は、別項の「named.confを調整する」を参照してください。






prev.gif