(ヽ´ω`) < 助けてほしいマン

わからないことを助けてほしいマンが書くブログ

(ヽ'ω`) < CentOS6でBINDの起動中に止まる

(ヽ'ω`) < メモで残してたけど、バージョンの記録が無かった…

(ヽ'ω`) < Generating /etc/rndc.key:...

BINDの設定を行なって、初回起動時に

"Generating /etc/rndc.key:"

という表示が出てから、起動プロセスが止まってしまう

(ヽ'ω`) < 何が原因なの?

/etc/init.d/namedの112行付近の処理

  if [ ! -s /etc/rndc.key ]; then
    # Generate rndc.key if doesn't exist
    echo -n $"Generating /etc/rndc.key:"
    if /usr/sbin/rndc-confgen -a > /dev/null 2>&1; then
      chmod 640 /etc/rndc.key
      chown root.named /etc/rndc.key

つまり、/etc/rndc.keyが存在しない場合に

/usr/sbin/rndc-confgen -a

を呼び出して新たに生成しようとするのだが、適切な量の乱数が無いと処理が止まってしまう。 で、止まってしまったまま何の出力もされずに待機状態になっている。

http://www.mail-archive.com/bind-users@lists.isc.org/msg00197.html http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=130372

(ヽ'ω`) < どうすりゃいいのさ?

rndc-confgenに-rオプションを与えることで、乱数のソースを指定できる。 デフォルトでは/dev/randomが使われるが、このファイルが発行する乱数が取得できなくて止まってしまう。 代わりに、以下の2つのどちらか渡すことで解決することができる

擬似乱数

"/dev/urandom"を渡す。出力は早いが/dev/randomと比べるとエントロピーのなんとかが小さい

# rndc-confgen -r /dev/urandom

以下のコマンドを実行してみると、その出力スピードの違いがわかる。

# cat /dev/random
# cat /dev/urandom

/dev/randomについては以下が詳しい http://ja.wikipedia.org/wiki//dev/random

キーボード入力

"keyboard"キーワードを渡すことで、キーボードからの入力を乱数として使う

# rndc-confgen -r keyboard

残りの処理

どちらもコマンドラインで実行することで/etc/rndc.keyが生成される。 あとは、/etc/init.d/namedの該当箇所の残りの処理

chmod 640 /etc/rndc.key
chown root.named /etc/rndc.key
[ -x /sbin/restorecon ] && /sbin/restorecon /etc/rndc.key

を実行しておくことで、次回の実行時からはこの処理はスキップされる ちなみにrestoreconはSELinux関連のコマンドで、security contextをリセットする。

(ヽ'ω`) < 参考URL

http://www.mail-archive.com/bind-users@lists.isc.org/msg00197.html http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=130372