書式がわかったところで、具体的なゾーン設定例を挙げる。
ルートサーバの定義ファイル。 ftp://ftp.rs.internic.net/domain/named.root をダウンロードしてリネーム。運用開始後も、時々シリアルナンバーを比較して、必要なら更新。
localhost => 127.0.0.1 の解決をする正引き。
$TTL 86400 @ IN SOA localhost. root.hoge.cxm. ( 2004040101 ;serial 28800 ;refresh 8h 14400 ;retry 4h 604800 ;expire 1w 10800 ) ;nttl 3h IN NS localhost. IN A 127.0.0.1
127.0.0.1 => localhost の逆引き。
$TTL 86400 @ IN SOA localhost. root.hoge.cxm. ( 2004040101 ;serial 28800 ;refresh 8h 14400 ;retry 4h 604800 ;expire 1w 10800 ) ;nttl 3h IN NS localhost. 1 IN PTR localhost.
ゾーン "hoge.cxm" の正引き。サーバが2台 (ローカルでの名前 host1 と host2)
あり、それぞれにメールと WWW を提供しているとする。加えて、ゲイトウェイであるルータ (rt0) も登録してある。
もし、データ部だけが異なる同一のレコードがあった場合、named はクエリを受ける度にいずれかをランダムに返す。このメカニズムは、同じ内容を持つWEB サーバを複数置き、負荷分散を行う場合などに利用される。
$TTL 86400 @ IN SOA ns.hoge.cxm. root.hoge.cxm. ( 2004040101 ;serial 28800 ;refresh 8h 14400 ;retry 4h 604800 ;expire 1w 10800 ) ;nttl 3h IN NS ns.hoge.cxm. IN MX 10 mail.hoge.cxm. IN MX 20 mail2.hoge.cxm. host1 IN A 192.168.0.1 mail IN A 192.168.0.1 ns IN A 192.168.0.1 www IN CNAME host1 host2 IN A 192.168.0.2 mail2 IN A 192.168.0.2 www2 IN CNAME host2 rt0 IN A 192.168.0.254
ゾーン "0.168.192.in-addr.arpa" の逆引き。
$TTL 86400 @ IN SOA ns.hoge.cxm. root.hoge.cxm. ( 2004040101 ;serial 28800 ;refresh 8h 14400 ;retry 4h 604800 ;expire 1w 10800 ) ;nttl 3h IN NS ns.hoge.cxm. 1 IN PTR host1.hoge.cxm. 2 IN PTR host2.hoge.cxm. 254 IN PTR rt0.hoge.cxm.
RedHat系では、named の起動スクリプト /etc/init.d/named の中で、起動オプションを /etc/sysconfig/named ファイルから拾うようにできている。なかなか良くできていて、特に次章の chroot の際に実感。敢えて編集する必要はないが、例えばログをもっと詳細にしたいなら、
OPTIONS="-d 1"
としておけば、起動時の初期デバグレベルが 1 になる。その他の主なオプションは以下:
-u user | named を user 権限で動かす。ソケットの作成など root 権限の必要な処理が完了後 user へ setuid する仕組み |
-p port | 通常は 53 となる named のポートを変えることができる |
-t dir | dir へ chroot する。 chroot 環境への移行を参照のこと |
named.conf で syslogd を経由しないログを定義した場合には、それに合わせてカスタムログファイルを作っておく。 /var/log/ ディレクトリは named にとって書き込み権限がないため、このようにディレクトリを一段挟む必要がある。この例における /var/log/named/ ディレクトリのパーミションは named.named の 700 が妥当。
root# touch /var/log/named/named_custom.log root# chown named.named /var/log/named/named_custom.log root# chmod 600 /var/log/named/named_custom.log
syslogd を通じて書き出すログファイルは、特に作っておく必要はない。パーミションに関しては PID ファイルにも同様なことが言えるが、 PID ファイルそのものは勝手にできるので放っておけばよい。
rndc は、named を操作するためのユーティリティ。デフォルトでは TCP の 953 ポートを使って named と通信を行う。 named との通信を成立させるためには、 named
と rndc が同じ定義名の同じキーフレーズを使わなければならない。同一のファイルである必要は無い。
いろいろと意地悪なテストをしてみたところ、named は named.conf の "controls"
および "key" (今回の設定では別ファイルでinclude) セクションで定義したキーファイルを起動時に 1 度だけ読み込むが、rndc は呼び出す度に rndc.conf
で定義したキーファイルを読み込む。 rndc ユーティリティは root にしか使わせないので、 rndc.conf
と rndc.key のパーミションは root.root の 600
にする。
rndc.conf と rndc.key を作るには、BIND に付属するツール rndc-confgen を使用する。
-a | /etc/rndc.key ファイルだけ生成し、rndc.conf は作らない |
-b byte | キー長。生成されるキーは HMAC-MD5。最大長の 512 を指定すべき。デフォルトは128 |
-k name | キーの定義名。デフォルトは "rndc-key" |
やり方は好みによるが、BIND のインストール時に作られた /etc/rndc.conf (好みによっては rndc.key も) をとっておくならリネームしておき、
root# rndc-confgen -b 512 -k rndckey > /etc/rndc.conf
出来上がった rndc.conf を下記のように編集。赤字部分は、切り取って rndc.key ファイルに貼り付ける。文末に吐き出される named.conf の設定のサンプルも、参考に見るだけ見ておくとためになる。なお、 rndc は今のところ HMAC-MD5 の対称鍵しか使えない。本当は RSA 非対称鍵が使えるといいのだが...
key "rndckey" { # 切り取ってrndc.keyへ
algorithm hmac-md5;
secret "***********************************************************";
};
options {
default-key "rndckey";
default-server localhost;
default-port 953;
};
server localhost {
key "rndckey";
};
include "/etc/rndc.key"; # 追加する
options セクションは、rndc をオプション無しで起動したときのデフォルト動作を定義する。
server セクションは、接続先ごとに、使うキーを指定する。別のサーバへの接続用に server セクションを複数記述することもできるが、今回はやらない。
key "rndckey" { algorithm hmac-md5; secret "***********************************************************"; };
最後に /etc/rndc.key を複製して /etc/named.key を作る。必要なパーミションが異なるので注意。
named に設定とゾーンを再読込させる。ゾーンを指定するとそのゾーンのみ | |
reconfig | 設定と、新たに増えたゾーンだけ読み込む |
flush | DNSキャッシュをクリア |
デバグレベルを level にする。level を省略するとデバグレベルをひとつ上げる | |
notrace | デバグレベルを 0 にする |
querylog | クエリもログ出力するかどうかのオン/オフを切り替える |
dumpdb | 現在のキャッシュデータを named のワーキングディレクトリに named_dump.db として書き出す。ダンプ先を恒常的に変更したい場合は named.conf の options セクションで `dump-file "file_path";' を定義すればよい |
status | named のステータスを stdout に出力 |
stats | named のステータスを named のワーキングディレクトリに named.stats として書き出す |
他にもあるが、マスターサーバだけなら主に使うのはこのあたり。詳しくは man を。
なお、named の停止や再起動は、PID ファイルやロックファイルの処理がきちんとされる service コマンド (つまり rc スクリプトの `stop')
で行ったほうが間違いない。再起動と "rndc reload" の違いは、
このへんを押さえて使い分ける。