■DNSの健全な運用のために 〜Lame Delegation編〜 2003/05/20(Tue)


▼はじめに

DNSは、インターネットの基盤を支える大規模な分散データベースです。 DNSが全体として正しく動作することは、それぞれのゾーンが正しく運用され ているかどうかにかかっています。

DNSの設定が正しくないと、そのゾーンの情報を正しく参照することができな いだけでなく、トラフィックの増大など、他のネットワークに悪影響を及ぼす ことがあります。DNSのオペレータはこのことを十分に認識し、正しいDNSの運 用を行う必要があります。

本文書では、DNSの運用の上で特に注意する必要がある「Lame Delegation」と 呼ばれる設定誤りについて解説しています。

本文書は、DNSに関する基礎的な知識を持ったDNSオペレータを対象としていま す。また、具体的な設定に関する記述は、BIND 9およびBIND 8での記述方法を 例としています。

▼1. Lame Delegationとは

DNSは、上位ゾーンから下位ゾーンへのdelegation(委任)により、階層化さ れて構築されます。ゾーンのdelegationは、ドメインに対するNSレコードの指 定によって行われ、下位ゾーン側ではNSレコードによって指定されたDNSサー バホストを正しく動作させることが必要です。

 例:.jpゾーンからexample.jpゾーンのdelegation
 +- .jp zone ------------------------------------+
 |                                               |
 |  example.jp. IN  NS  ns1.example.jp.          |
 |                                               |
 +-----------------------------------------------+
 .jpのネームサーバ              example.jpのネームサーバ
 +---------------+  delegation  +----------------+
 | ns0.nic.ad.jp |  ----------> | ns1.example.jp |
 +---------------+              +----------------+

この例では、.jpのゾーンから、example.jpのゾーンをdelegationしています。 delegationにあたっては、example.jpゾーンのNSをns1.example.jpとして登録 しています。このDNSサーバが正しく動作していることが、example.jpゾーン の正常なdelegationの条件です。

Lame Delegationとは、delegationの際に上位ゾーンに登録したDNSサーバが、 何らかの理由によりそのドメインのDNSサーバとして正しく動作していない状 態を指します。

▼2. Lame DelegationがDNSに及ぼす悪影響

Lame Delegationとなった状態では、そのゾーン内の情報に対する名前解決が 行われても、DNSサーバが正しく動作していないために正しい応答を返すこと ができません。また、それだけでなく、インターネット全体への悪影響を引き 起こしてしまいます。

(1) 無駄なトラフィックの発生

DNSはルートサーバからの階層構造を順に辿って目的の名前解決を行いますが、 上位ゾーンに対するアクセス集中を緩和するため、DNSにはキャッシュ機構が 用意されています。キャッシュには、名前解決を行った際に参照したDNSサー バの情報などが保存され、無駄なトラフィックを削減することに役立っていま す。

DNSのキャッシュには2種類あり、「○○の検索結果は△△である」という情報 以外に、「○○の検索結果は得られなかった」という情報も保持しています。 これをネガティブキャッシュと言います。ネガティブキャッシュによって、検 索しても答えが得られないようなクエリはそもそも行わない、という制御がさ れます。

ネガティブキャッシュは、名前解決の中で「そのレコードは存在しない」とい う応答を得た時に作られますが、Lame Delegationの場合にはDNSサーバが正し い応答を返さないために、ネガティブキャッシュが作られません。このため、 Lame Delegation状態にあるゾーンの中の名前解決が行われた場合、毎回不要 なDNSクエリが発生し、インターネット上で無駄なトラフィックを増加させる ことになります。

また、キャッシュされていない名前に対するDNSクエリは上位ゾーンのDNSサー バから探索しなおすことになり、これらのDNSサーバにも負荷を与えることに なります。example.jpがLame Delegationになっていると、ルートサーバや.jp ゾーンのDNSサーバに影響を及ぼすことになります。

(2) パケットストーム

Lame Delegationのように、DNSの設定が正しくない場合に、DNSサーバやクラ イアントなどのソフトウェアが異常な動作を起こすことがあります。これらは 不具合ですが、DNSが正しく運用されていれば発生しないものです。

現に、2002年1月にリリースされたBIND 8.3.0では、指定されたホスト名が所 属するドメイン名がLame Delegationであった場合の処理に不備があり、その ような名前に対する名前解決リクエストを処理しようとした場合に、上位のサー バに対して膨大なクエリパケットを発生させてしまう問題がありました。この 時には実際に異常な数のクエリが発生し、JPRSが管理する.jpゾーンのDNSサー バでもそれを検出しました。

 関連文書:「BIND ネームサーバの更新に関するお願い」(2002年2月7日)
            http://jpinfo.jp/topics/020207.html

このような事象はパケットストームと言われています。パケットストームが発 生するとネットワークトラフィックが爆発し、帯域を占有してしまうために、 他の通信ができなくなったり、過大なクエリに耐えられずにサーバがダウンし てしまうことがあります。

▼3. Lame Delegationの原因と対策

Lame Delegationを引き起こす原因は様々ですが、代表的な原因は以下のよう なものです。

 (1)delegation先DNSサーバでのnamed.confファイルの設定ミス
 named.confにおける文法誤り等の理由でDNSサーバが正しく起動していない
 場合や、あるいは該当するゾーンに関する設定が記述されていない場合に
 Lame Delegationとなります。
 (2)ゾーンファイルの設定ミス
 NSレコードで設定するネームサーバホスト名のピリオドのつけ忘れなど、ゾー
 ンファイルに文法的な誤りがある場合、DNSサーバはそのゾーンに関する情
 報を正しく提供することができません。この場合もLame Delegationとなり
 ます。
 (3)上位のゾーンへのネームサーバ登録ミス
 CNAMEレコードで設定した別名をDNSサーバとして上位ゾーンに登録していた
 り、ゾーン中で指定しているDNSサーバと上位ゾーンに登録したDNSサーバが
 一致していないなど、ゾーンのDNSサーバが、上位のゾーンにおいて正しく
 登録されていないとLame Delegationとなります。
 また、上位ゾーンにDNSサーバを登録しても、そのDNSサーバでゾーンの設定
 がされていない場合にもLame Delegationとなります。
 (4)セカンダリへのゾーン転送の障害による影響
 何らかの理由で、プライマリDNSサーバとセカンダリDNSサーバの間のゾーン
 転送が正しく行われていない場合、Lame Delegationとなる場合があります。
 ゾーン転送が正しく行われなくなると、セカンダリサーバはそのゾーンに設
 定されたゾーンそのものの情報を保持する期間に従い、ゾーン情報を維持し
 ます。この期間を過ぎるとDNSサーバはゾーン情報を破棄し、問い合わせに
 答えられなくなります。
 またゾーン転送が正しく行われなくなることにより、プライマリDNSサーバ
 とセカンダリDNSサーバが持つゾーン情報の内容に差異ができることで、情
 報の不一致を招き、例えば新たに更新したNSレコードがセカンダリDNSサー
 バのゾーン情報に反映できず、Lame Delegationとなる場合などがあります。
 ゾーン転送が正しく行われなくなる原因としては、該当ゾーンのSOAレコー
 ドのバージョン番号の上げ忘れや、セカンダリにおけるディスク溢れ等によ
 るゾーンファイルの転送の失敗、プライマリ側におけるゾーン転送許可の出
 し忘れ、経由するネットワーク機器等における、TCP/53 によるアクセス許
 可の出し忘れ(ゾーン転送にはUDP/53ではなく、TCP/53を使用し、セカンダ
 リDNSサーバがSOAチェックを行う時にはUDP/53を使用します)、ネットワー
 クの障害等があげられます。

Lame Dalegationを発生させないためには、次のような点に注意することが必 要です。

 - ピリオドのつけ忘れなど、ゾーンファイルの文法をチェックするように
   する。
 - ゾーンファイルの更新時にバージョン番号を上げ忘れないようにする。
 - 自ゾーンのDNSサーバの指定が、上位ゾーンと自ゾーンとで一致している
   かどうかをチェックする。DNSサーバを増設・変更した場合など、どちら
   の情報も更新することを忘れない。
 - DNSサーバの指定の際に、CNAMEで指定されている別名を使ったり、上位
   ゾーンに登録した名前と異なる名前を指定してはならない。
 - DNSサーバの運用監視を怠らず、ディスク溢れなどでゾーン転送が失敗し
   ていないかどうかチェックするようにする。
 - セカンダリDNSサーバに対してゾーン転送に必要なアクセス経路を確保す
   る。ネットワーク構成を変える時など、ゾーン転送が通るようにTCP/53に
   よるアクセスを許可しておくことを忘れない。

▼4. JPドメイン名の登録・運用の中でLame Delegationを発生させないために

JPドメインの登録・管理はJPRSが行っており、.jpゾーンのDNSサーバもJPRSが 管理しています。JPドメイン名の運用を行うためには、それぞれのゾーンにお けるDNSサーバを用意し、そのDNSサーバをJPRSに登録する必要があります。

 例:example.jpの登録から運用まで
 1. 指定事業者を通してJPRSにexample.jpを登録する。
 2. example.jpのためのDNSサーバを用意する。(ns1.example.jpとする)
 3. ns1.example.jpで正しいゾーンの設定を行う。
 4. 指定事業者を通してJPRSにexample.jpのDNSサーバとしてns1.example.jp
    を登録する。

この手順の中で、Lame Delegationを発生させないためには、特に次の点に注 意する必要があります。

 - 該当するドメイン名のDNSサーバを立ち上げてから、JPRSにDNSサーバを登
   録する。DNSサーバが動いていない状態で、JPRSにDNSサーバを登録すると
   Lame Delegationとなってしまいます。
 - DNSサーバを増設・変更した場合には、JPRSへの登録情報更新と合わせて、
   自ゾーン内での情報も更新する。ここに差異があるとLame Delegationと
   なってしまいます。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-12-18 (月) 12:15:44 (6333d)