次のページ 前のページ 目次へ

8. メンテナンス

動作を維持するために

named には、ただ走らせる以外にも一つ保守作業があります。 root.hints ファイルを最新の状態に保つ作業です。 一番簡単なのは dig を使うやり方です。まず引き数なしで dig を動かすと、現在サーバで使っている root.hints の内容が表示されます。 次にリストされているルートサーバのいずれかに対して dig @rootserver のように問い合わせを行います。 出力結果は root.hints の内容にとてもよく似ているはずです。 この結果を dig @e.root-servers.net . ns > root.cache.new のように保存して、古い root.hints と置き換えます。

キャッシュファイルを入れ替えた後には named に再読み込みさせるのをお忘れなく。

Al Longyear がスクリプトを送ってくれました。自動的に root.hints を更新してくれるものです。 これを月に一度起動する crontab のエントリをインストールすれば、 後は全部おまかせです。スクリプトでは、メールがちゃんと動作していて、 メールエイリアスとして `hostmaster' が定義されていることを前提としています。 あなたの設定にあわせてハックする必要があります。


#!/bin/sh
#
# Update the nameserver cache information file once per month.
# This is run automatically by a cron entry.
#
# Original by Al Longyear
# Updated for BIND 8 by Nicolai Langfeldt
# Miscelanious error-conditions reported by David A. Ranch
# Ping test suggested by Martin Foster
# named up-test suggested by Erik Bryer.
#
(
 echo "To: hostmaster <hostmaster>"
 echo "From: system <root>"

 # Is named up? Check the status of named.
 case `rndc status 2>&1` in
    *refused*)
        echo "named is DOWN. root.hints was NOT updated"
        echo
        exit 0
        ;;
 esac

 PATH=/sbin:/usr/sbin:/bin:/usr/bin:
 export PATH
 # NOTE: /var/named must be writable only by trusted users or this script 
 # will cause root compromise/denial of service opportunities.
 cd /var/named 2>/dev/null || {
    echo "Subject: Cannot cd to /var/named, error $?"
    echo
    echo "The subject says it all"
    exit 1
 }

 # Are we online?  Ping a server at your ISP
 case `ping -qnc 1 some.machine.net 2>&1` in
   *'100% packet loss'*)
        echo "Subject: root.hints NOT updated.  The network is DOWN."
        echo
        echo "The subject says it all"
        exit 1
        ;;
 esac

 dig @e.root-servers.net . ns >root.hints.new 2> errors

 case `cat root.hints.new` in
   *NOERROR*)
        # It worked
        :;;
   *)
        echo "Subject: The root.hints file update has FAILED."
        echo
        echo "The root.hints update has failed"
        echo "This is the dig output reported:"
        echo
        cat root.hints.new errors
        exit 1
        ;;
 esac

 echo "Subject: The root.hints file has been updated"
 echo
 echo "The root.hints file has been updated to contain the following   
information:"
 echo
 cat root.hints.new

 chown root.root root.hints.new
 chmod 444 root.hints.new
 rm -f root.hints.old errors
 mv root.hints root.hints.old
 mv root.hints.new root.hints
 rndc restart
 echo
 echo "The nameserver has been restarted to ensure that the update is complete."
 echo "The previous root.hints file is now called   
/var/named/root.hints.old."
) 2>&1 | /usr/lib/sendmail -t
exit 0

訳注: 訳者はまだ BIND 8 なのでこのスクリプトを試していないのですが、 rndc restart というコマンドは rndc stop; named で置き換えないといけないような気がします。

root.hints は Internic から ftp でも入手できる、 と言うことをすでにご存じの方もいるかもしれません。 ですが root.hints の更新に ftp は使わないようにしてください。 上記の方法のほうが、ずっと「ネット (と Internic) に優しい」のです。


次のページ 前のページ 目次へ