RHEL6/CentOS6 に bind をインストールする

RHEL6 に bind を入れて動くところまで設定したときのメモ。

まずはパッケージのインストール。

 

# yum install bind bind-chroot

 

IPv4 オンリーの環境なので /etc/sysconfig/named の末尾に以下を追記。

 

OPTIONS="-4"

 

/etc/named.conf を環境に合わせて更新。

最小限の設定をするなら、

  • linsten するインタフェースの指定
  • query を許可するネットワークの指定
  • 自分のゾーンファイルの指定

 

このあたりを指定すればよい。

全インタフェースで listen していいなら指定をコメントアウト

 

// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };

 

どこからでも問い合わせOKなら

 

allow-query     { any; };

 

これでとりあえず動く。

RHEL5/CentOS5 の手順例などを見ると、rndc.key ファイルの読み込み指定と rndc での制御許可指定を記述するようになっている。例えば以下のような記述。

 

controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
include "/etc/rndc.key";

 

これは RHEL6/CentOS6 では記述する必要が無い。リモートで操作するのならその指定は必要だが、ローカルからの操作だけなら不要である。また、rndc.key ファイルも初回起動時に生成されるため別途の生成は不要である。

Red Hat Enterprise Linux 6 移行計画ガイド の 4.6.BIND の項より引用

 

rndc 管理ユーティリティを使用している場合は、 /etc/named.conf 内で controls ステートメントを指定する必要がなくなります。 named サービスは自動的にループバックデバイスを介して制御の接続を許可し、 named と rndc の両方がインストール時に生成された同じシークレットキーを使用します (/etc/rndc.key 内にある)

 

ゾーンファイルについては構築する環境に合わせて用意する。サンプルはネット上にたくさんあるだろう。ここは個別のゾーンファイルを用意しなくても起動するだけなら起動できる。意味があるかは別として。

用意できたらこんな感じで起動。iptablesdns 用のポートを開けてから起動、再起動時にも自動起動の設定。

 

# iptables -I INPUT -p udp --dport 53 -j ACCEPT
# iptables -I INPUT -p tcp --dport 53 -j ACCEPT
# service iptables save
# service named start
# chkconfig named on

 

ただし、/etc/init.d/named に含まれる初回起動時の rndc.key 生成コマンドは、乱数のソースに /dev/random を使用するため非常に時間がかかる。ハングしたか?と不安になるくらいかかる。サーバ機上に作った仮想マシンでは 5分かかった。おうちのPCで VMware Player 上に作った仮想マシンでは 7分かかった。とにかく待てば良い。のんきな人ならわりと大丈夫だ。

そんなに待ってられるか!という短気な方は以下のようにして初回起動より先に rndc.key を生成しておけば良い。乱数のソースに /dev/urandom を使うと /dev/random より断然速い。

 

# rndc-confgen -r /dev/urandom > /etc/rndc.key

 

だいたいこんな感じでいけるはずだ。

近頃はディストリビューションが標準値として用意しているモノがそこそこいいかんじなので、とりあえず動けばいいやというのなら無理に細かいパラメータを指定しなくて良いように思う。もちろんシビアにチューニングするときは細かく指定していくのだろうけど。