ネームサーバリプレース
先日作った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"; }; };