書式がわかったところで、具体的なゾーン設定例を挙げる。
ルートサーバの定義ファイル。 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" の違いは、
このへんを押さえて使い分ける。