2004年10月24日
NSレコードの役割とプライマリ・セカンダリの理解
正しいDNSの設定には、NSレコード、プライマリ・セカンダリの正しい理解が必要不可欠である。また、理解を深めておくと設定が気楽になる。
・NSレコード
ネームサーバを複数指定することができる。これには冗長化と負荷分散の両方の意味がある。NSレコードに複数のサーバが指定されている場合、問い合わせ元がどのサーバを利用するかを自由に選択することになっている。指定されたアドレスにネームサーバが正しく動作していなければ、名前解決処理に遅延が発生することになる。よって、正しく設定されていないアドレスをネームサーバに指定してはいけない。この間違いが非常に多く、lame delegationと呼ばれている。
また、NSレコードは自らのゾーンファイルに登録すると同時に、上位ゾーンを保持するネームサーバにも登録される。原理的には、上位ゾーンに保持されているNSレコードが参照され、名前解決処理に使われるサーバが選択される。自ゾーンファイルに記載されているNSレコードがこの処理で使われることはなく、NSレコードは2重に登録されていることになる。ただし、自ゾーンファイルに登録されているNSレコードが権限のある正規のNSレコードとして扱われる。また、自ゾーンのNSレコードを設定せずに、bindを動作させることはできない。
・プライマリとセカンダリ
ネームサーバにはプライマリサーバとセカンダリサーバの区別がある。この区別は、主にサーバ管理に用いられるものであり、名前解決処理で利用されることはない。プライマリサーバとセカンダリサーバの問い合わせに対する振る舞いはまったく同じであり、問い合わせ元からサーバがプライマリかセカンダリであるかを区別することはない。その証拠にNSレコードにはプライマリかセカンダリかを区別する記述がつかず、また記述されている順番は意味を持たない。bindのtype slaveを使わず、すべてのネームサーバをtype masterで準備しても良い。なお、問い合わせ元からSOAレコードに示されているアドレスを参照することでプライマリサーバを判断することができる。ダイナミックDNSでは、この値をみて、レコード更新の要求を送るサーバを選択している。
ゾーンファイルの詳細については、すべての基礎、マスター・ゾーンサーバの設定が参考になる。
また、個人でサーバを設置してドメインを運用している場合は、複数のネットワークにまたがったサーバを準備することが難しい。そこで、友達同士で相互にセカンダリサーバを請け負って助け合ったりする。私も、そうしている。この時、上に書いたように、セカンダリサーバといえども、プライマリサーバと同等の権限を持っていることに注意が必要だ。仮にその気になれば、レコードの値を書き換え、気づかれずに転送されるメールを覗き見したり、Webアクセスを他のサイトに誘導したりすることができる。つまり、NSレコードのセカンダリを預けるということは、人質を預けるに匹敵する行為であり、きちんと信頼のおける相手でなければならない。セカンダリサーバを単なるゾーンファイルの中継サーバと考えてはいけないのである。