ネームサーバリプレース

先日作ったDom-Uがネームサーバになるんだけど、、(なんでDom-0じゃないのか、という辺りがね、ntpはDom-0じゃなきゃダメなんだから、named(bind9)をDom-0に立ててなぜいけないか?
いや、特に理由は無いんですけど、Dom-0はxenいじりに徹したいということで)

で、問題は、とてつもなく古い(kernel2.2ぐらい)サーバからの設定引越しなので、結構穴があったということ。特にlocalからは普通にアクセスできているように見えたのに、いざ本番投入したら他所のサーバからぜんぜん引けない。
理由は、bind9の設定のviewのところ。ここがまともに設定できてなくて、外部からのリクエストを拒否していた。
たとえば外部からはこんな感じになってた。5行目の"status: REFUSED"に注目。

# dig サーバ名
; <<>> DiG 9.3.3rc2 <<>> サーバ名
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 27760
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;サーバ名.                        IN      A

;; Query time: 0 msec
;; SERVER: ネームサーバのIPアドレス#53(ネームサーバのIPアドレス)
;; WHEN: Wed Apr xx 18:53:01 2008
;; MSG SIZE  rcvd: 32

しかも、ローカルからアクセスしても、さっき行った変更がnamedを再起動しても反映されてない!
たとえば(chrootされた)/etc/named/ゾーンファイル を修正して、
hostname A 10.1.1.2

hostname A 10.1.1.3
にしたとして、それが反映されないのでした。SOAを引いてもシリアル番号が古いままです。

後者については、もともと (chrootされた)/etc/named.conf がキャッシュサーバの設定例から起こしたものなので、それがまずいんだろうと見当がついたのですが、前者の理由がわからなかった。
で、ちゃんとbind9の設定方法をしらべたら、、、ずいぶん昔とは変わってるんですねー。
アクセスコントロールが view というくくりで複数設定できるようになってました。
で、もともとはキャッシュサーバのサンプルだったから、localhostからだけアクセスできるような設定になってました。しかもそれは純然たるキャッシュサーバのみ。自分のサーバに設定ファイルが存在してもそれは使わず、セカンダリーに聞きに行って古い情報を取ってきてました。
正しくはこんな感じでしょうか。

options {
        listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { 鯖のグローバルIPアドレス; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source    port 53;
        allow-query     { any; };
};
//syslogに出します。デバッグモードは気にしません(汗
logging {
        channel default_syslog {
                syslog daemon;
                severity info;
        };
};
view localhost_resolver {
        match-clients      { localhost; };
        match-destinations { localhost; };
        recursion yes;
//      ↓これがキャッシュサーバ設定
        include "/etc/named.rfc1912.zones";

// localhostからアクセスできてうれしい情報をここに
// (下のglobal_resolverと同様の情報も必要です)

};

view global_resolver {
// 誰でも参照してくださいね、とやらないとREFUSEDになります。
// これを設定していなかったのが今回の敗因
        match-clients      { any; };

// 自前のドメインについて、自前のネームサーバを立てている場合
  zone "mydomain.jp" {
          type master;
          file "mydomain.jp";
          allow-transfer {セカンダリネームサーバのIPアドレスとか;};
  };

(大略)
// 逆引きを指定する場合=複数IPを持ってる場合
// zone名は上流のプロバイダから指定がくることがあります

  zone "1.1.10.in-addr.arpa" {
          type master;
          file "1.1.10.local";
  };
};