この文書はRFC1536の日本語訳(和訳)です。 この文書の翻訳内容の正確さは保障できないため、 正確な知識を求める方は原文を参照してください。 翻訳者はこの文書によって読者が被り得る如何なる損害の責任をも負いません。 この翻訳内容に誤りがある場合、訂正版の公開や、 誤りの指摘は適切です。 この文書の配布は元のRFC同様に無制限です。


Network Working Group                                           A. Kumar
Request for Comments: 1536                                     J. Postel
Category: Informational                                        C. Neuman
                                                                     ISI
                                                               P. Danzig
                                                               S. Miller
                                                                     USC
                                                            October 1993


          Common DNS Implementation Errors and Suggested Fixes
                 よくあるDNS実装誤りと修正の提案

Status of this Memo
この文書の状態


   This memo provides information for the Internet community.  It does
   not specify an Internet standard.  Distribution of this memo is
   unlimited.
   このメモはインターネット共同体のための情報を供給します。これはインター
   ネット標準を指定しません。このメモの配布は無制限です。

Abstract
概要

   This memo describes common errors seen in DNS implementations and
   suggests some fixes. Where applicable, violations of recommendations
   from STD 13, RFC 1034 and STD 13, RFC 1035 are mentioned. The memo
   also describes, where relevant, the algorithms followed in BIND
   (versions 4.8.3 and 4.9 which the authors referred to) to serve as an
   example.
   このメモはDNS実装でよくある誤りを記述して、ある修理を示唆します。
   適用可能な場合は、標準13のRFC1034と標準13のRFC1035の推薦の違反を
   述べます。メモは、適切な場合はBIND(著者はバージョン4.8.3と
   4.9を参照)のアルゴリズムを役立つ例として記述します。

Introduction
はじめに

   The last few years have seen, virtually, an explosion of DNS traffic
   on the NSFnet backbone. Various DNS implementations and various
   versions of these implementations interact with each other, producing
   huge amounts of unnecessary traffic. Attempts are being made by
   researchers all over the internet, to document the nature of these
   interactions, the symptomatic traffic patterns and to devise remedies
   for the sick pieces of software.
   これまでの数年でNSFnetのバックボーン上で、事実上、DNSトラフィック
   が爆発しました。種々なDNS実装とこれらの実装の種々なバージョンがお
   互いと相互に作用し、莫大な不要なトラフィックを引き起こしてます。イン
   ターネットの様々な場所で、相互作用の性質の文書化や、トラヒックの前兆
   パターンや、問題のあるソフトウェアの修正が研究者されています。

   This draft is an attempt to document fixes for known DNS problems so
   people know what problems to watch out for and how to repair broken
   software.
   このドラフトは周知のDNS問題の修正を文書化する試みで、人々が何の問
   題を警戒するべきで、どのように壊れたソフトウェアを修繕するべきかを知
   らせます。

1. Fast Retransmissions
1. 早すぎる再送

   DNS implements the classic request-response scheme of client-server
   interaction. UDP is, therefore, the chosen protocol for communication
   though TCP is used for zone transfers. The onus of requerying in case
   no response is seen in a "reasonable" period of time, lies with the
   client. Although RFC 1034 and 1035 do not recommend any
   retransmission policy, RFC 1035 does recommend that the resolvers
   should cycle through a list of servers. Both name servers and stub
   resolvers should, therefore, implement some kind of a retransmission
   policy based on round trip time estimates of the name servers. The
   client should back-off exponentially, probably to a maximum timeout
   value.
   DNSが古典的なクライアント・サーバ型の要求と応答を実行します。TC
   Pがゾーン転送に使われますが、UDPが通信に選ばれたプロトコルです。
   回答が「合理的」な期間内に来ない場合に再送する責任はクライアントにあ
   ります。RFC1034とRFC1035が再送方針を勧ず、RFC1035がリゾルバがサーバー
   リストに従って順番に試みることを勧めます。従ってネームサーバーとスタ
   ブリゾルバの両方がネームサーバの往復遅延時間の見積もりに基づいた数種
   類の再送方針を実装するべきです。クライアントは指数関数的に最大のタイ
   ムアウト値までタイムアウト時間を延ばすべきです。

   However, clients might not implement either of the two. They might
   not wait a sufficient amount of time before retransmitting or they
   might not back-off their inter-query times sufficiently.
   しかし、クライアントがどちらかを実装しないかもしれません。クライアン
   トは再送前に十分待たないかもしれないし、再送間隔を伸ばさないかもしれ
   ません。

   Thus, what the server would see will be a series of queries from the
   same querying entity, spaced very close together. Of course, a
   correctly implemented server discards all duplicate queries but the
   queries contribute to wide-area traffic, nevertheless.
   その結果サーバーには非常に短い間隔で同じ要求者から同じ質問が続いてく
   ることになります。もちろん、正確に実装されたサーバーがすべての重複の
   問合せを捨てますが、問合せは大きなエリアトラフィックを生じます。

   We classify a retransmission of a query as a pure Fast retry timeout
   problem when a series of query packets meet the following conditions.
   我々は早すぎる再送問題を一連の問合せパケットがどのように来るかで分類
   します。

      a. Query packets are seen within a time less than a "reasonable
         waiting period" of each other.
      a. 問合せパケットが「合理的な待つべき期間」よりも短い間隔で来る。

      b. No response to the original query was seen i.e., we see two or
         more queries, back to back.
      b. 元の問合せい対する回答がなかった、すなわち複数の問合せが後から
         後から来る。

      c. The query packets share the same query identifier.
      c. 問合せパケットは同じ問合せ識別子を共有する。

      d. The server eventually responds to the query.
      d. サーバーは結局は問合せに返答する。

A GOOD IMPLEMENTATION:
よい実装

   BIND (we looked at versions 4.8.3 and 4.9) implements a good
   retransmission algorithm which solves or limits all of these
   problems.  The Berkeley stub-resolver queries servers at an interval
   that starts at the greater of 4 seconds and 5 seconds divided by the
   number of servers the resolver queries. The resolver cycles through
   servers and at the end of a cycle, backs off the time out
   exponentially.
   BIND(我々はバージョン4.8.3と4.9を見てます)がこれらすべての問題
   を解くか、制限する良い再送アルゴリズムを実装します。バークレイスタブ
   リゾルバは、4秒か5秒以上の秒数を問い合わせできるサーバーの数で割っ
   た秒数を、最初の再送間隔として問合せをします。リゾルバはサーバーを順
   番にます、1周すると指数関数的にタイムアウトを増やします。

   The Berkeley full-service resolver (built in with the program
   "named") starts with a time-out equal to the greater of 4 seconds and
   two times the round-trip time estimate of the server.  The time-out
   is backed off with each cycle, exponentially, to a ceiling value of
   45 seconds.
   バークレイの完全なサービスをするリゾルバ(「named」プログラムで組み入
   こみ)は4秒以上でサーバーの往復遅延時間の見積もりの2倍から始めます。
   タイムアウトは45秒を上限に1回毎に指数関数的に増やされます。

FIXES:
修正

      a. Estimate round-trip times or set a reasonably high initial
         time-out.
      a. 往復遅延時間を推測するか、合理的な大きめの最初のタイムアウ
         トを設定してください。

      b. Back-off timeout periods exponentially.
      b. 指数関数的に再送タイムアウト期間を増やします。

      c. Yet another fundamental though difficult fix is to send the
         client an acknowledgement of a query, with a round-trip time
         estimate.
      c. 他の基本的な難しい決定はクライアントに問合せを往復遅延時間
         の評価のために返事することです。

   Since UDP is used, no response is expected by the client until the
   query is complete.  Thus, it is less likely to have information about
   previous packets on which to estimate its back-off time.  Unless, you
   maintain state across queries, so subsequent queries to the same
   server use information from previous queries.  Unfortunately, such
   estimates are likely to be inaccurate for chained requests since the
   variance is likely to be high.
   UDPが使われるので、問合せが完全できないかぎり、クライアントに回答
   が期待できません。そのため再送間隔を見積もるのにそれより前のパケット
   の情報を使える可能性は低いです。同じサーバに対する昔の問合せを管理し
   てなければ、今の問合せ情報で問合せを再送する事になります。不幸にも、
   このような連続的な問合せの見積もりは分散が大きいので不正確である可能
   性が高いです。

   The fix chosen in the ARDP library used by Prospero is that the
   server will send an initial acknowledgement to the client in those
   cases where the server expects the query to take a long time (as
   might be the case for chained queries).  This initial acknowledgement
   can include an expected time to wait before retrying.
   ProsperoによるARDPライブラリで選択された修正派、サーバーが問合せで最
   初の回答はサーバで時間がかかると考えることです(一連の問合せで正しい
   と思われる)。この最初の回答の前は再送前に想定される時間さらに待ちま
   す。

   This fix is more difficult since it requires that the client software
   also be trained to expect the acknowledgement packet. This, in an
   internet of millions of hosts is at best a hard problem.
   この修正はクライアントソフトウェアが応答パケットの予測訓練を要求する
   のでより難しいです。何百万というホストのインターネットでの、これはと
   ても難しい問題です。

2. Recursion Bugs
2. 再帰バグ

   When a server receives a client request, it first looks up its zone
   data and the cache to check if the query can be answered. If the
   answer is unavailable in either place, the server seeks names of
   servers that are more likely to have the information, in its cache or
   zone data. It then does one of two things. If the client desires the
   server to recurse and the server architecture allows recursion, the
   server chains this request to these known servers closest to the
   queried name. If the client doesn't seek recursion or if the server
   cannot handle recursion, it returns the list of name servers to the
   client assuming the client knows what to do with these records.
   サーバーがクライアントの要求を受取る時、最初に問合せに答えるためゾー
   ンデータとキャッシュを検索します。もし答えがどこにもなければ、サーバー
   はキャッシュかゾーンデータから情報を持つ可能性が高いサーバーに回答を
   求めます。そして次のどちらかをします。もしクライアントが再帰問合せを
   サーバーに要望し、サーバが再帰を許すなら、サーバーは問合せられた名前
   に最も近い既知サーバーに問合せをつなぎます。もしクライアントが再帰を
   求めないなら、あるいはサーバーが再帰を処理できないなら、クライアント
   がこれらのレコードに関して何をするべきか知っていると想定してクライア
   ントにネームサーバのリストを返します。

   The client queries this new list of name servers to get either the
   answer, or names of another set of name servers to query. This
   process repeats until the client is satisfied. Servers might also go
   through this chaining process if the server returns a CNAME record
   for the queried name. Some servers reprocess this name to try and get
   the desired record type.
   クライアントは他の答えを得るために、この新しいネームサーバリストを使
   います。このプロセスは、クライアントが答えを得るまで繰り返します。サー
   バーが問合せ名にCNAMEを返すなら、サーバは問合せ連鎖を起こすかもしれま
   せん。あるサーバーが望ましいレコードタイプを得るためにこの名前を再処
   理します。

   However, in certain cases, this chain of events may not be good. For
   example, a broken or malicious name server might list itself as one
   of the name servers to query again. The unsuspecting client resends
   the same query to the same server.
   しかし、ある特定の場合、このイベントの連鎖は良くないかもしれません。
   例えば、壊れているか悪意があるネームサーバーが自分自身を再度といわせ
   るネームサーバのリストに入れるかもしれません。怪しまないクライアント
   は同じサーバーに同じ質問を再送します。

   In another situation, more difficult to detect, a set of servers
   might form a loop wherein A refers to B and B refers to A. This loop
   might involve more than two servers.
   他の場合、検出がより難しいが、サーバ群が、AがBを参照しBがAを参照
   するなどと、ループを作るかもしれません。このループは2つ以上のサーバー
   を巻き込むかもしれません。

   Yet another error is where the client does not know how to process
   the list of name servers returned, and requeries the same server
   since that is one (of the few) servers it knows.
   他の誤りは、クライアントは返送されたネームサーバのリストを処理するべ
   きか知らず、知ってる少数のサーバの1ととして同じサーバに問合せるかも
   しれません。

   We, therefore, classify recursion bugs into three distinct
   categories:
   我々は、従って、3つの別のカテゴリーの中に再帰問題を分類します:

      a. Ignored referral: Client did not know how to handle NS records
         in the AUTHORITY section.
      a. 参照の無視:クライアントがどのように権威セクションのネームサー
         バレコードを処理するべきか知りませんでした。

      b. Too many referrals: Client called on a server too many times,
         beyond a "reasonable" number, with same query. This is
         different from a Fast retransmission problem and a Server
         Failure detection problem in that a response is seen for every
         query.  Also, the identifiers are always different. It implies
         client is in a loop and should have detected that and broken
         it.  (RFC 1035 mentions that client should not recurse beyond
         a certain depth.)
      b. 多すぎる参照:「合理的」な回数以上のあまりに多くの回数同じ質問
         をサーバーにするクライアント。これは、回答がすべての問合せに対
         してあるという点で、早すぎる再送の問題とサーバ誤り検出問題と異
         なります。また、識別子は常に異なります。これはクライアントがルー
         プにはまっていて、それを発見しとめるすべきことを意味します。
         (RFC1035はクライアントがある回数以上再帰問合せをすべきではない
         と述べます。)

      c. Malicious Server: a server refers to itself in the authority
         section. If a server does not have an answer now, it is very
         unlikely it will be any better the next time you query it,
         specially when it claims to be authoritative over a domain.
      c. 悪意あるサーバー:サーバーが権威セクションでそれ自身を参照しま
         す。もしサーバーが今答えを持たないなら、次に問合せた時に答えを
         持ってる可能性は少ないです、特にそれがドメインの権威である場合
         はなおさらです。

      RFC 1034 warns against such situations, on page 35.
      RFC1034のページ35に以下の警告があります。

      "Bound the amount of work (packets sent, parallel processes
       started) so that a request can't get into an infinite loop or
       start off a chain reaction of requests or queries with other
       implementations EVEN IF SOMEONE HAS INCORRECTLY CONFIGURED
       SOME DATA."
      "誰かが間違ってデータを設定した場合でも、問合せが無限ループに入っ
       たり、他の実装で問合せの連鎖反応が生じないように、行う仕事(送
       信パケット数、平行プロセス数)の量を制限しなさい。"

A GOOD IMPLEMENTATION:
よい実装

   BIND fixes at least one of these problems. It places an upper limit
   on the number of recursive queries it will make, to answer a
   question.  It chases a maximum of 20 referral links and 8 canonical
   name translations.
   BINDが少なくともこれらの問題の1つを修正します。BINDは1つの
   質問に対する再帰問合せの回数に上限を置きます。制限は20の参照リンク
   と8つの別名変換です。

FIXES:
修正:

      a. Set an upper limit on the number of referral links and CNAME
         links you are willing to chase.
      a. 参照リンクとCNAMEリンクの回数の上限を決めます。

         Note that this is not guaranteed to break only recursion loops.
         It could, in a rare case, prune off a very long search path,
         prematurely.  We know, however, with high probability, that if
         the number of links cross a certain metric (two times the depth
         of the DNS tree), it is a recursion problem.
         これが再帰ループをとめるのを保障しないことに注意してください。
         これは時には長い探索パスを早く終わらせることが出来ます。しかし、
         高い確率で、もしリンク回数がある数(DNS木の深さの2倍)を超
         えるなら、それが再帰問題と考えられます。

      b. Watch out for self-referring servers. Avoid them whenever
         possible.
      b. 自己参照サーバーに注意してください。可能ならそれを避けてくださ
         い。

      c. Make sure you never pass off an authority NS record with your
         own name on it!
      c. 自分自身の名前の権威ネームサーバレコードを送らないように確認し
         てください!

      d. Fix clients to accept iterative answers from servers not built
         to provide recursion. Such clients should either be happy with
         the non-authoritative answer or be willing to chase the
         referral links themselves.
      d. サーバーが再帰供給しない応答を受け入れるようにクライアントを修
         正してください。このようなクライアントは正式でない答えに満足す
         るか、クライアント自身が照会リンクを追いかけるべきです。

3. Zero Answer Bugs:
3.ゼロ解答バグ:

   Name servers sometimes return an authoritative NOERROR with no
   ANSWER, AUTHORITY or ADDITIONAL records. This happens when the
   queried name is valid but it does not have a record of the desired
   type. Of course, the server has authority over the domain.
   ネームサーバーが解答セクションと権威セクションと追加セクションのレコー
   ドなしで時々正式なエラーなしの回答を返します。これは、問合された名前
   が正しいが、要求したタイプのレコードがない時、起きます。もちろん、サー
   バーはドメインの権限を持っています。

   However, once again, some implementations of resolvers do not
   interpret this kind of a response reasonably. They always expect an
   answer record when they see an authoritative NOERROR. These entities
   continue to resend their queries, possibly endlessly.
   しかし、あるリゾルバの実装がこの種類の回答を適切に通訳しません。それ
   らは、正式なエラーなし回答で、常に解答レコードを期待します。これらの
   リゾルは際限なく、質問を再送し続けます。

A GOOD IMPLEMENTATION
よい実装

   BIND resolver code does not query a server more than 3 times. If it
   is unable to get an answer from 4 servers, querying them three times
   each, it returns error.
   BINDリゾルバコードが3回以上サーバーに問い合わせません。もし4つ
   のサーバに各3回問合せて回答を得られなければエラーを返します。


   Of course, it treats a zero-answer response the way it should be
   treated; with respect!
   もちろん、BINDリゾルバは適切にゼロ解答の回答を扱います!

FIXES:
修正:

      a. Set an upper limit on the number of retransmissions for a given
         query, at the very least.
      a. ある質問に対して、少なくとも再送上限数を決めてください。

      b. Fix resolvers to interpret such a response as an authoritative
         statement of non-existence of the record type for the given
         name.
      b. レコードが実在しない正式な回答を扱えるようにリゾルバを修正して
         ください。

4. Inability to detect server failure:
4. サーバー失敗の検出不能:

   Servers in the internet are not very reliable (they go down every
   once in a while) and resolvers are expected to adapt to the changed
   scenario by not querying the server for a while. Thus, when a server
   does not respond to a query, resolvers should try another server.
   Also, non-stub resolvers should update their round trip time estimate
   for the server to a large value so that server is not tried again
   before other, faster servers.
   インターネットのサーバーは非常に信頼性が高くなく(時たま停止します)、
   リゾルバはしばらくの間サーバーに問い合わせないように順応することを期
   待されます。つまり、サーバーが問合せに返答しない時、リゾルバは他のサー
   バーを試みるべきです。同じく、非スタブリゾルバは往復遅延時間の見積り
   を大きな値に変更し、他のより早いサーバより前にそのサーバーに問合せな
   いようにしなければなりません。

   Stub resolvers, however, cycle through a fixed set of servers and if,
   unfortunately, a server is down while others do not respond for other
   reasons (high load, recursive resolution of query is taking more time
   than the resolver's time-out, ....), the resolver queries the dead
   server again! In fact, some resolvers might not set an upper limit on
   the number of query retransmissions they will send and continue to
   query dead servers indefinitely.
   スタブリゾルバは動作しているサーバに問合せを繰り返し、もし不幸にもサー
   バー他の理由で回答しなくなったら(高負荷か、再帰問合せがリゾルバタイ
   ムアウト以上に時間がかかったなど、ダウンしていたリゾルバに再び問合せ
   をはじめます!実際、あるリゾルバが再送数の上限を設けず、いつまでも死
   んでいるサーバーに問い合わせ続けるかもしれません。

   Name servers running system or chained queries might also suffer from
   the same problem. They store names of servers they should query for a
   given domain. They cycle through these names and in case none of them
   answers, hit each one more than one. It is, once again, important
   that there be an upper limit on the number of retransmissions, to
   prevent network overload.
   システムや問合せの連鎖を実行しているネームサーバーが同じ問題で苦しむ
   かもしれません。サーバはあるドメインについて参照すべきサーバー名を登
   録します。サーバはこれらのサーバ名を順番にためし、誰も答えなければ、
   それぞれに再度問合せます。再度言いますが、再送回数に上限を置くことは
   ネットワーク輻輳を避けるために重要です。

   This behavior is clearly in violation of the dictum in RFC 1035 (page
   46)
   この行動は明らかにRFC1035(ページ46)の見解の違反です。

      "If a resolver gets a server error or other bizarre response
       from a name server, it should remove it from SLIST, and may
       wish to schedule an immediate transmission to the next
       candidate server address."
      "もしリゾルバがネームサーバーからサーバーエラーや他の奇異な反応を得
       るなら、そのネームサーバをサーバリストから除き、次の候補サーバーア
       ドレスに即刻送信することを望むかもしれません。"

   Removal from SLIST implies that the server is not queried again for
   some time.
   SLISTからのサーバの削除はしばらくの間、再び問い合わせらないことを意
   味します。

   Correctly implemented full-service resolvers should, as pointed out
   before, update round trip time values for servers that do not respond
   and query them only after other, good servers. Full-service resolvers
   might, however, not follow any of these common sense directives. They
   query dead servers, and they query them endlessly.
   正確に実装されたフルサービスリゾルバが、前に指摘したように、サーバの
   往復遅延時間値を修正し返、他の良いサーバへの問い合わせ前に質問しない
   ようにするべきです。しかし、フルサービスのリゾルバがこれらの常識命令
   に従わないかもしれません。それらは死んでいるサーバーに問い合わせ、際
   限なく質問します。

A GOOD IMPLEMENTATION:
よい実装

   BIND places an upper limit on the number of times it queries a
   server.  Both the stub-resolver and the full-service resolver code do
   this.  Also, since the full-service resolver estimates round-trip
   times and sorts name server addresses by these estimates, it does not
   query a dead server again, until and unless all the other servers in
   the list are dead too!  Further, BIND implements exponential back-off
   too.
   BINDは、サーバーに問合せる時に上限を設けます。スタブリゾルバとフルサー
   ビスリゾルバコードの両方がこれをします。同じく、フルサービスのリゾル
   バが往復遅延時間を推測し、この見積もりでネームサーバアドレスをソート
   するので、リストの他のサーバが止まるまで、止まってるサーバーに問い合
   わしません!さらにBINDは指数関数的にタイムアウト値を増やします。

FIXES:
修正:

      a. Set an upper limit on number of retransmissions.
      a. 再送回数の上限を設定します。

      b. Measure round-trip time from servers (some estimate is better
         than none). Treat no response as a "very large" round-trip
         time.
      b. サーバの往復遅延時間を測ります(ある評価が他よりよいなら)。無
         回答は「非常に大きい」遅延時間と扱います。

      c. Maintain a weighted rtt estimate and decay the "large" value
         slowly, with time, so that the server is eventually tested
         again, but not after an indefinitely long period.
      c. 重み付き遅延時間見積もりを維持し、「大きい」値を時間毎に少しづ
         つ減らし、サーバーがあまり長すぎない時間で再びテストされるよう
         にします。

      d. Follow an exponential back-off scheme so that even if you do
         not restrict the number of queries, you do not overload the
         net excessively.
      d. 指数関数的に再送間隔を広げ、たとえ質問数を制限しなくても、過度
         にネットワークに負担をかけ過ぎないようにします。

5. Cache Leaks:
5. キャッシュ漏えい:

   Every resource record returned by a server is cached for TTL seconds,
   where the TTL value is returned with the RR. Full-service (or stub)
   resolvers cache the RR and answer any queries based on this cached
   information, in the future, until the TTL expires. After that, one
   more query to the wide-area network gets the RR in cache again.
   すべてのサーバから返される資源レコードがTTL秒間キャッシュされ、T
   TL値は資源レコードと一緒に返されます。フルサービス(かスタブ)リゾ
   ルバは資源レコードをキャッシュし、TTLが期限切れになるまではその後
   キャッシュ情報に基づき回答します。その後は、再度広域ネットワークへの
   問合せて再びキャッシュに資源レコードを入れます。

   Full-service resolvers might not implement this caching mechanism
   well. They might impose a limit on the cache size or might not
   interpret the TTL value correctly. In either case, queries repeated
   within a TTL period of a RR constitute a cache leak.
   フルサービスリゾルバがこのキャッシュしているメカニズムを上手に実装し
   てないかもしれません。それらはキャッシュサイズに制限を課すかもしれな
   いし、正確にTTL値を理解しないかもしれません。いずれかの場合も、資
   源レコードのTTL期間内に繰り返された質問がキャッシュ漏れを作ります。

A GOOD/BAD IMPLEMENTATION:
よい実装と悪い実装

   BIND has no restriction on the cache size and the size is governed by
   the limits on the virtual address space of the machine it is running
   on. BIND caches RRs for the duration of the TTL returned with each
   record.
   BINDはキャッシュサイズに制限を持たず、大きさはBINDを動かすマ
   シンの仮想アドレス空間の上限で決まります。BINDはレコードと共に帰っ
   てきたTTLの間資源レコードをキャッシュします。

   It does, however, not follow the RFCs with respect to interpretation
   of a 0 TTL value. If a record has a TTL value of 0 seconds, BIND uses
   the minimum TTL value, for that zone, from the SOA record and caches
   it for that duration. This, though it saves some traffic on the
   wide-area network, is not correct behavior.
   しかしBINDは0のTTL値の解釈に関してRFCに従いません。もしレ
   コードが0秒のTTL値を持つなら、BINDはSOAレコードから、その
   ゾーンの最小TTL値を得て、その間資源レコードをキャッシュします。こ
   れは、広域ネットワーク上にトラフィックをいくらか減らしますが、正しい
   行動ではありません。

FIXES:
修正:

      a. Look over your caching mechanism to ensure TTLs are interpreted
         correctly.
      a. TTLが正確に翻訳されることを保証するためにキャッシュメカニズ
         ムをざっと調べてください。

      b. Do not restrict cache sizes (come on, memory is cheap!).
         Expired entries are reclaimed periodically, anyway. Of course,
         the cache size is bound to have some physical limit. But, when
         possible, this limit should be large (run your name server on
         a machine with a large amount of physical memory).
      b. キャッシュサイズを限定しないで下さい(さあ早く、メモリは安いで
         す!)。期限切れ項目が周期的にとにかく返還を要求されます。もち
         ろん、キャッシュ大きさは何か物理的な限界があるに疑いがありませ
         ん。しかし、可能なら、この制限は大きくあるべきです(ネームサー
         バを大きな物理メモリを持つマシンで走らせてください)。

      c. Possibly, a mechanism is needed to flush the cache, when it is
         known or even suspected that the information has changed.
      c. 多分、情報が変化したと思われるときにキャッシュを消去するメカニ
         ズムが必要です。

6. Name Error Bugs:
6. 名前エラーバグ:

   This bug is very similar to the Zero Answer bug. A server returns an
   authoritative NXDOMAIN when the queried name is known to be bad, by
   the server authoritative for the domain, in the absence of negative
   caching. This authoritative NXDOMAIN response is usually accompanied
   by the SOA record for the domain, in the authority section.
   このバグはゼロ解答バグに非常に類似しています。ドメインのために正式な
   サーバーによって、ネガティブキャッシュなしで、問合せられた名前が誤っ
   てることを知られている時、正式なNXDOMAINを返します。この正式な
   NXDOMAIN回答は通常権威セクションにドメインのSOAレコードを伴います。

   Resolvers should recognize that the name they queried for was a bad
   name and should stop querying further.
   リゾルバが質問した名前が良くなく、さらなる質問をやめるべきであること
   を認識するべきです。

   Some resolvers might, however, not interpret this correctly and
   continue to query servers, expecting an answer record.
   あるリゾルバが、正確にこれを解釈せず、解答レコードを期待してサーバー
   に問い合わせ続けるかもしれません。

   Some applications, in fact, prompt NXDOMAIN answers! When given a
   perfectly good name to resolve, they append the local domain to it
   e.g., an application in the domain "foo.bar.com", when trying to
   resolve the name "usc.edu" first tries "usc.edu.foo.bar.com", then
   "usc.edu.bar.com" and finally the good name "usc.edu". This causes at
   least two queries that return NXDOMAIN, for every good query. The
   problem is aggravated since the negative answers from the previous
   queries are not cached.  When the same name is sought again, the
   process repeats.
   あるアプリケーションが、実際NXDOMAIN回答をします!完全に良い名前がリ
   ゾルバに与えられる時、リゾルバはそれにローカルなドメインを付けてよう
   とします、例えばドメイン"foo.bar.com"のアプリケーションがリゾルバに
   "usc.edu"の名前の変換を求める場合、最初は"usc.edu.foo.bar.com"を試み、
   次に"usc.edu.bar.com"を試し、最後に正しい名前"usc.edu"を試します。こ
   れは、NXDOMAINが返る少なくとも2つの問い合わせを起こします。問題は、
   前の問合せがネガティブキャッシュされない時に、悪化します。同じ名前が
   再び探される時、プロセスは繰り返されます。

   Some DNS resolver implementations suffer from this problem, too. They
   append successive sub-parts of the local domain using an implicit
   searchlist mechanism, when certain conditions are satisfied and try
   the original name, only when this first set of iterations fails. This
   behavior recently caused pandemonium in the Internet when the domain
   "edu.com" was registered and a wildcard "CNAME" record placed at the
   top level. All machines from "com" domains trying to connect to hosts
   in the "edu" domain ended up with connections to the local machine in
   the "edu.com" domain!
   あるDNSリゾルバ実装がこの問題で苦しみます。これらのリゾルバはある
   条件が満たされるとローカルドメインの一部を追加する暗黙の検索リストメ
   カニズムを使い、この問合せの繰返しが失敗した時だけ、オリジナルの名前
   を試みます。この行動は、ドメイン"edu.com"が登録され、そしてワイルドカー
   ド"CNAME"レコードが最上位レベルに置かれた時、インターネットで大混乱を
   起こしました。すべての"edu"ドメインでホストに接続しようとする"com"の
   マシンは"edu.com"ドメインのローカルマシンに接続して止まりました!

GOOD/BAD IMPLEMENTATIONS:
良い実装と悪い実装

   Some local versions of BIND already implement negative caching. They
   typically cache negative answers with a very small TTL, sufficient to
   answer a burst of queries spaced close together, as is typically
   seen.
   あるBINDのローカルバージョンがネガティブキャッシュを実装します。
   これらは一般にネガティブキャッシュを、爆発的質問の回答間隔を十分取れ
   る程度の、極めて短い時間キャッシュします。

   The next official public release of BIND (4.9.2) will have negative
   caching as an ifdef'd feature.
   BIND(4.9.2)の次の公式のリリースは、定義された機能として、ネ
   ガティブキャッシュを持つでしょう。

   The BIND resolver appends local domain to the given name, when one of
   two conditions is met:
   BINDリゾルバはは、いずれかの条件が満たされる時、名前にローカルな
   ドメインを付加します:。

      i.  The name has no periods and the flag RES_DEFNAME is set.
      i.  名前に期限がなく、RES_DEFNAMEフラグがでっていされている。
      ii. There is no trailing period and the flag RES_DNSRCH is set.
      ii. 後続するピリオドがなく、RES_DNSRCHフラグが設定されている。

   The flags RES_DEFNAME and RES_DNSRCH are default resolver options, in
   BIND, but can be changed at compile time.
   BINDでRES_DEFNAMEとRES_DNSRCHフラグがデフォルトのリゾルバオプショ
   ンですが、コンパイル時に変更できます。

   Only if the name, so generated, returns an NXDOMAIN is the original
   name tried as a Fully Qualified Domain Name. And only if it contains
   at least one period.
   生成された名前に対してNXDOMAINが返ってくる場合と、名前の最後にピリオ
   ドを含む場合に限り、オリジナルの名前が完全に指定されたドメイン名とし
   て問合されます。

FIXES:
修正

      a. Fix the resolver code.
      a. リゾルバコードを修正する。

      b. Negative Caching. Negative caching servers will restrict the
         traffic seen on the wide-area network, even if not curb it
         altogether.
      b. ネガティブキャッシュをする。ネガティブキャッシュサーバは例え抑
         制がなくても広域エリアトラヒックを制限すると思われます。

      c. Applications and resolvers should not append the local domain to
         names they seek to resolve, as far as possible. Names
         interspersed with periods should be treated as Fully Qualified
         Domain Names.
      c. アプリケーションとリゾルバが可能な限り検索しようとする名前にロー
         カルドメイン名をつけるべきではありません。ピリオドが存在してい
         る名前が完全に指定されたドメイン名と扱われるべきです。

         In other words, Use searchlists only when explicitly specified.
         No implicit searchlists should be used. A name that contains
         any dots should first be tried as a FQDN and if that fails, with
         the local domain name (or searchlist if specified) appended. A
         name containing no dots can be appended with the searchlist right
         away, but once again, no implicit searchlists should be used.
         換言すれば、明示的に指定されるだけ時、検索リストを使ってくださ
         い。暗示的な検索リストを使うべきではありません。ドットを含む名
         前が最初はFQDNとして検索し、失敗した場合にローカルドメイン名
         (か検索リスト)を付加すべきです。ドットを含まない名前がすぐに
         検索リストを適用できますが、再度、暗示的な検索リストを使うべき
         ではありません。

   Associated with the name error bug is another problem where a server
   might return an authoritative NXDOMAIN, although the name is valid. A
   secondary server, on start-up, reads the zone information from the
   primary, through a zone transfer. While it is in the process of
   loading the zones, it does not have information about them, although
   it is authoritative for them.  Thus, any query for a name in that
   domain is answered with an NXDOMAIN response code. This problem might
   not be disastrous were it not for negative caching servers that cache
   this answer and so propagate incorrect information over the internet.
   サーバーが正当な名前の正式なNXDOMAINを返すもう1つの問題と名前エラー
   バグが関連します。セカンダリサーバーが起動時に、プライマリサーバから
   ゾーン転送でゾーン情報を読み取ります。ゾーンを読み込むプロセスの間、
   セカンダリは正式であるが、情報を持ちません。そのため、どんなそのドメ
   イン名の問合せにもNXDOMAIN応答コードを返します。この問題は、この答え
   をキャッシュしてインターネット上に正しくない情報を伝えるネガティブ
   キャッシュサーバーがなければ問題でないかもしれません。

BAD IMPLEMENTATION:
悪い実装

   BIND apparently suffers from this problem.
   BINDは明らかにこの問題をもちます。

   Also, a new name added to the primary database will take a while to
   propagate to the secondaries. Until that time, they will return
   NXDOMAIN answers for a good name. Negative caching servers store this
   answer, too and aggravate this problem further. This is probably a
   more general DNS problem but is apparently more harmful in this
   situation.
   同じく、プライマリデータベースに追加した新しい名前がセカンダリに送ら
   れる少しの間も付くでしょう。その時まで、セカンダリは正しい名前に
   NXDOMAINを返すでしょう。ネガティブキャッシュサーバがこの答えをキャッ
   シュしたら、さらにこの問題を悪化させます。これは恐らくより一般的なD
   NSの問題で、この状態は見たところではより有害です。

FIX:
修正:

      a. Servers should start answering only after loading all the zone
         data. A failed server is better than a server handing out
         incorrect information.
      a. サーバーがすべてのゾーンデータを読み込んだ後で答え始めるべきで
         す。動いていないサーバーは正しくない情報を配るサーバーより良い
         です。

      b. Negative cache records for a very small time, sufficient only
         to ward off a burst of requests for the same bad name. This
         could be related to the round-trip time of the server from
         which the negative answer was received. Alternatively, a
         statistical measure of the amount of time for which queries
         for such names are received could be used. Minimum TTL value
         from the SOA record is not advisable since they tend to be
         pretty large.
      b. 誤った名前での問合せの爆発を保護するのに十分な程度の、非常に小
         さい時間のレコードをネガティブキャッシュします。これは否定回答
         を受け取ったサーバーの往復遅延時間と関係があります。代わりに、
         このような名前の質問を受信するのにかかる時間の総量の統計的値を
         使うことが出来ます。SOAレコードの最小TTL値は、かなり大き
         いくなる傾向があるので、賢明ではありません。

      c. A "PUSH" (or, at least, a "NOTIFY") mechanism should be allowed
         and implemented, to allow the primary server to inform
         secondaries that the database has been modified since it last
         transferred zone data.  To alleviate the problem of "too many
         zone transfers" that this might cause, Incremental Zone
         Transfers should also be part of DNS.  Also, the primary should
         not NOTIFY/PUSH with every update but bunch a good number
         together.
      c. プライマリサーバーがセカンダリサーバにデータベースが最後のゾー
         ンデータ転送から変更になったと知らせることを許すために、「押し
         こみ」(あるいは、少なくとも「通知」)機構が使えて実装されるべ
         きである。これによる「あまりに多くのゾーン転送」の問題を軽減す
         るため、逐次的ゾーン転送がDNSに組み込まれるべきです。また、
         プライマリはすべての更新に押しこむ/知らせるべきでなく、適当な
         数に束ねるべきです。

7. Format Errors:
7. フォーマットエラー:

   Some resolvers issue query packets that do not necessarily conform to
   standards as laid out in the relevant RFCs. This unnecessarily
   increases net traffic and wastes server time.
   あるリゾルバが、適切なRFCで説明されるように、必ずしも標準に従わな
   い問合せパケットを発送します。これは不必要にネットワークトラフィック
   を増やして、サーバー時間を浪費します。

FIXES:
修正:

      a. Fix resolvers.
      a. リゾルバを直す

      b. Each resolver verify format of packets before sending them out,
         using a mechanism outside of the resolver. This is, obviously,
         needed only if step 1 cannot be followed.
      b. 各リゾルバが送信前にリゾルバの外のメカニズムでパケットのフォー
         マットを確認します。これは、明らかにステップ1ができない場合に
         限り、必要とされます。

References
参考文献

   [1] Mockapetris, P., "Domain Names Concepts and Facilities", STD 13,
       RFC 1034, USC/Information Sciences Institute, November 1987.

   [2] Mockapetris, P., "Domain Names Implementation and Specification",
       STD 13, RFC 1035, USC/Information Sciences Institute, November
       1987.

   [3] Partridge, C., "Mail Routing and the Domain System", STD 14, RFC
       974, CSNET CIC BBN, January 1986.

   [4] Gavron, E., "A Security Problem and Proposed Correction With
       Widely Deployed DNS Software", RFC 1535, ACES Research Inc.,
       October 1993.

   [5] Beertema, P., "Common DNS Data File Configuration Errors", RFC
       1537, CWI, October 1993.

Security Considerations
セキュリティの考察

   Security issues are not discussed in this memo.
   セキュリティ問題がこのメモで論じられません。

Authors' Addresses
著者のアドレス

   Anant Kumar
   USC Information Sciences Institute
   4676 Admiralty Way
   Marina Del Rey CA 90292-6695

   Phone:(310) 822-1511
   FAX:  (310) 823-6741
   EMail: anant@isi.edu


   Jon Postel
   USC Information Sciences Institute
   4676 Admiralty Way
   Marina Del Rey CA 90292-6695

   Phone:(310) 822-1511
   FAX:  (310) 823-6714
   EMail: postel@isi.edu


   Cliff Neuman
   USC Information Sciences Institute
   4676 Admiralty Way
   Marina Del Rey CA 90292-6695

   Phone:(310) 822-1511
   FAX:  (310) 823-6714
   EMail: bcn@isi.edu


   Peter Danzig
   Computer Science Department
   University of Southern California
   University Park

   EMail: danzig@caldera.usc.edu


   Steve Miller
   Computer Science Department
   University of Southern California
   University Park
   Los Angeles CA 90089

   EMail: smiller@caldera.usc.edu

Japanese translation by Ishida So