DNS/RFC1034/4について、ここに記述してください。

4. ネームサーバ

4.1. はじめに Introduction

4.2

4.3. ネームサーバの内部動作 Name server internals

4.3.1. 問合せと返答 Queries and responses

The principal activity of name servers is to answer standard queries.
Both the query and its response are carried in a standard message format
which is described in [RFC-1035].  The query contains a QTYPE, QCLASS,
and QNAME, which describe the types and classes of desired information
and the name of interest.

ネームサーバの主たる動作は標準問合せに答える事である。 問合せとその返答の両者は[RFC-1035]に記述された標準メッセージ形式に従う。 質問はQTYPE、QCLASS、QNAMEひとつずつを含み、 これらは求める情報のタイプ、クラスと興味がある名前を記述する。

The way that the name server answers the query depends upon whether it
is operating in recursive mode or not:

ネームサーバが問合せに答える方法は 再帰モードで動作しているかどうかによる:

   - The simplest mode for the server is non-recursive, since it
     can answer queries using only local information: the response
     contains an error, the answer, or a referral to some other
     server ';closer'; to the answer.  All name servers must
     implement non-recursive queries.

   - The simplest mode for the client is recursive, since in this
     mode the name server acts in the role of a resolver and
     returns either an error or the answer, but never referrals.
     This service is optional in a name server, and the name server
     may also choose to restrict the clients which can use
     recursive mode.

Recursive service is helpful in several situations:

再帰サービスが役立ついくつかの状況は:

   - a relatively simple requester that lacks the ability to use
     anything other than a direct answer to the question.

   - a request that needs to cross protocol or other boundaries and
     can be sent to a server which can act as intermediary.

   - a network where we want to concentrate the cache rather than
     having a separate cache for each client.

Non-recursive service is appropriate if the requester is capable of
pursuing referrals and interested in information which will aid future
requests.

非再帰サービスが適切なのは参照(referral) を利用することができて、 将来のリクエストの助けになる情報に興味がある要求者の場合である。

The use of recursive mode is limited to cases where both the client and
the name server agree to its use.  The agreement is negotiated through
the use of two bits in query and response messages:

再帰モードを使用するのは クライアントとネームサーバの両方が使用に同意することが条件になる。 合意の交渉には問合せと返答メッセージ中の 2ビットが使用される。

   - The recursion available, or RA bit, is set or cleared by a
     name server in all responses.  The bit is true if the name
     server is willing to provide recursive service for the client,
     regardless of whether the client requested recursive service.
     That is, RA signals availability rather than use.

   - Queries contain a bit called recursion desired or RD.  This
     bit specifies specifies whether the requester wants recursive
     service for this query.  Clients may request recursive service
     from any name server, though they should depend upon receiving
     it only from servers which have previously sent an RA, or
     servers which have agreed to provide service through private
     agreement or some other means outside of the DNS protocol.

The recursive mode occurs when a query with RD set arrives at a server
which is willing to provide recursive service; the client can verify
that recursive mode was used by checking that both RA and RD are set in
the reply.  Note that the name server should never perform recursive
service unless asked via RD, since this interferes with trouble shooting
of name servers and their databases.

RD が設定された問合せがサーバに届き、 サーバが再帰サービスを提供している場合に再帰モードが有効になる; クライアントは返答で RAとRDの両方のビットが設定されていることを調べて、 再帰モードが使われたことを確認できる。 ネームサーバは RD により要請がない場合には再帰サービスを実行すべきではない ことに注意せよ。 再帰はネームサーバやそのデータベースの障害検出の邪魔になるからである。

If recursive service is requested and available, the recursive response
to a query will be one of the following:

再帰サービスが要請され、利用できる場合、再帰の返答は以下ようなものだ:

   - The answer to the query, possibly preface by one or more CNAME
     RRs that specify aliases encountered on the way to an answer.

   - A name error indicating that the name does not exist.  This
     may include CNAME RRs that indicate that the original query
     name was an alias for a name which does not exist.

   - A temporary error indication.

If recursive service is not requested or is not available, the non-
recursive response will be one of the following:

再帰サービスが要請されていないか、利用可能でない場合、非再帰の応答は 以下のどれかになる:

   - An authoritative name error indicating that the name does not
     exist.

   - A temporary error indication.

   - Some combination of:

     RRs that answer the question, together with an indication
     whether the data comes from a zone or is cached.

     A referral to name servers which have zones which are closer
     ancestors to the name than the server sending the reply.

   - RRs that the name server thinks will prove useful to the
     requester.

4.3.2. アルゴリズム Algorithm

The actual algorithm used by the name server will depend on the local OS
and data structures used to store RRs.  The following algorithm assumes
that the RRs are organized in several tree structures, one for each
zone, and another for the cache:

ネームサーバが実際に使うアルゴリズムは ローカルOSと資源レコードを保持するデータ構造に依存するだろう。 以下のアルゴリズムでは RRs は複数の木構造、 各ゾーン毎のものと、キャッシュに対応したもの、 として構成されていることを仮定している:

   1. Set or clear the value of recursion available in the response
      depending on whether the name server is willing to provide
      recursive service.  If recursive service is available and
      requested via the RD bit in the query, go to step 5,
      otherwise step 2.

   2. Search the available zones for the zone which is the nearest
      ancestor to QNAME.  If such a zone is found, go to step 3,
      otherwise step 4.

   3. Start matching down, label by label, in the zone.  The
      matching process can terminate several ways:

         a. If the whole of QNAME is matched, we have found the node.
  1. QNAME全体が一致したら、目的のノードを見つけた。

            If the data at the node is a CNAME, and QTYPE doesn't
            match CNAME, copy the CNAME RR into the answer section
            of the response, change QNAME to the canonical name in
            the CNAME RR, and go back to step 1.

            Otherwise, copy all RRs which match QTYPE into the
            answer section and go to step 6.

         b. If a match would take us out of the authoritative data,
            we have a referral.  This happens when we encounter a
            node with NS RRs marking cuts along the bottom of a
            zone.

            Copy the NS RRs for the subzone into the authority
            section of the reply.  Put whatever addresses are
            available into the additional section, using glue RRs
            if the addresses are not available from authoritative
            data or the cache.  Go to step 4.

         c. If at some label, a match is impossible (i.e., the
            corresponding label does not exist), look to see if a
            the ';*'; label exists.

            If the '*' label does not exist, check whether the name
            we are looking for is the original QNAME in the query
            or a name we have followed due to a CNAME.  If the name
            is original, set an authoritative name error in the
            response and exit.  Otherwise just exit.

            If the ';*'; label does exist, match RRs at that node
            against QTYPE.  If any match, copy them into the answer
            section, but set the owner of the RR to be QNAME, and
            not the node with the ';*'; label.  Go to step 6.

   4. Start matching down in the cache.  If QNAME is found in the
      cache, copy all RRs attached to it that match QTYPE into the
      answer section.  If there was no delegation from
      authoritative data, look for the best one from the cache, and
      put it in the authority section.  Go to step 6.

   5. Using the local resolver or a copy of its algorithm (see
      resolver section of this memo) to answer the query.  Store
      the results, including any intermediate CNAMEs, in the answer
      section of the response.

   6. Using local data only, attempt to add other RRs which may be
      useful to the additional section of the query.  Exit.

4.3.3. ワイルドカード Wildcards

In the previous algorithm, special treatment was given to RRs with owner
names starting with the label ';*';.  Such RRs are called wildcards.
Wildcard RRs can be thought of as instructions for synthesizing RRs.
When the appropriate conditions are met, the name server creates RRs
with an owner name equal to the query name and contents taken from the
wildcard RRs.

前節のアルゴリズムでは';*'; ラベルで始まる所有者名をもつRRsは特別な処置がなされた。 このような RRs はワイルドカードと呼ばれる。 ワイルドカード RRs は RRs を合成するための指示と考えらる。 適切な条件を満たす時、ネームサーバは問合せの名前と一致した所有者名をもち ワイルドカード RRs の内容をもつ RRs を生成する。

This facility is most often used to create a zone which will be used to
forward mail from the Internet to some other mail system.  The general
idea is that any name in that zone which is presented to server in a
query will be assumed to exist, with certain properties, unless explicit
evidence exists to the contrary.  Note that the use of the term zone
here, instead of domain, is intentional; such defaults do not propagate
across zone boundaries, although a subzone may choose to achieve that
appearance by setting up similar defaults.

この機能はインターネットから別種のメールシステム(訳注:UUCP など)へ メールを転送するために使うゾーンを生成するのによく使われる。 そのゾーンに属する名前の問合せがサーバにやってきたら、 反対の指定がされているのでないかぎり、 どういう名前であろうとある属性をもって存在するというのが 一般的な考えである。 ここで、ドメインではなく、 ゾーンという言葉を使ったのは意図的であることに注意せよ; このようなデフォルトはゾーン境界を越えて伝わることはない。 ただし、サブゾーンは類似のデフォルトを設定することで、 そのように見えるようにするかもしれない。

The contents of the wildcard RRs follows the usual rules and formats for RRs.
The wildcards in the zone have an owner name that controls the query names they will match.

The owner name of the wildcard RRs is of the form ';*.<anydomain>';,
where <anydomain> is any domain name.

<anydomain> should not contain other * labels, and should be
in the authoritative data of the zone.
The wildcards potentially apply to descendants of <anydomain>,
but not to <anydomain> itself.
Another way to look at this is that the ';*'; label always matches
at least one whole label and sometimes more, but always whole labels.

ワイルドカードRRsの中身は通常の RRs の規則と形式に従う。 ゾーン中のワイルドカードは適合する問合せ名を操作する所有者名を持つ。

ワイルドカード RRs の所有者名は ';*.<anydomain>';という形式であり、 ここで <anydomain> は任意のドメイン名である。

<anydomain> は他の * ラベルを含んではならず、ゾーンの権威あるデータのものでなければならない。 ワイルドカードは<anydomain>の子孫にも適用してよいが、<anydomain>自身には適用されない。 別の見方をすると、 ';*';ラベルは 1つ以上のラベル(の全体)に一致するが、 ラベル全体にだけ一致するということになる。

Wildcard RRs do not apply:

ワイルドカード RR は以下のものにはあてはまらない:

   - When the query is in another zone.  That is, delegation cancels
     the wildcard defaults.

   - When the query name or a name between the wildcard domain and
     the query name is know to exist.  For example, if a wildcard
     RR has an owner name of ';*.X';, and the zone also contains RRs
     attached to B.X, the wildcards would apply to queries for name
     Z.X (presuming there is no explicit information for Z.X), but
     not to B.X, A.B.X, or X.

A * label appearing in a query name has no special effect, but can be
used to test for wildcards in an authoritative zone; such a query is the
only way to get a response containing RRs with an owner name with * in
it.  The result of such a query should not be cached.

問合せ名中に現われる * ラベルは特別な効果を持たない。 しかし、権威あるゾーン中でワイルドカードのテストをするのに使える; このような問合せは所有者名に * を含む RRs 返答を得る唯一の方法である。 この問合せの結果はキャッシュすべきではない。

Note that the contents of the wildcard RRs are not modified when used to
synthesize RRs.

RRsを生成のために使われるとき、ワイルドカード RRs の中身は 修正されないことに注意せよ。

To illustrate the use of wildcard RRs, suppose a large company with a
large, non-IP/TCP, network wanted to create a mail gateway.  If the
company was called X.COM, and IP/TCP capable gateway machine was called
A.X.COM, the following RRs might be entered into the COM zone:

ワイルドカード RRs の使用例を示すために、 大きな非IP/TCP網を持つ大きな会社がメールゲートウェイを作ろうとしているとする。 会社は X.COM と呼ばれていて、 TP/TCPを持つゲートウェイマシンは A.X.COMと呼ばれるとしたら、以下のRRs を COMゾーンに登録するだろう:

    X.COM           MX      10      A.X.COM

    *.X.COM         MX      10      A.X.COM

    A.X.COM         A       1.2.3.4
    A.X.COM         MX      10      A.X.COM

    *.A.X.COM       MX      10      A.X.COM

This would cause any MX query for any domain name ending in X.COM to
return an MX RR pointing at A.X.COM.  Two wildcard RRs are required
since the effect of the wildcard at *.X.COM is inhibited in the A.X.COM
subtree by the explicit data for A.X.COM.  Note also that the explicit
MX data at X.COM and A.X.COM is required, and that none of the RRs above
would match a query name of XX.COM.

この指定により、 X.COMで終わるドメイン名についの MX 問合せをすれば、いつでも、 A.X.COM を指す MX RRs が返ってくることになる。 A.X.COMに対する明示的データがあるので A.X.COM の部分木には *.X.COMの効果が及ばないため、ワイルドカード RRs は二つ必要になる。 X.COMとA.X.COMについても明示的なMXデータが必要であることと 上記のどの RRs も XX.COM の問合せには一致しないことに注意せよ。

4.3.4. 否定応答のキャッシュ(任意) Negative response caching (Optional)

The DNS provides an optional service which allows name servers to
distribute, and resolvers to cache, negative results with TTLs.  For
example, a name server can distribute a TTL along with a name error
indication, and a resolver receiving such information is allowed to
assume that the name does not exist during the TTL period without
consulting authoritative data.  Similarly, a resolver can make a query
with a QTYPE which matches multiple types, and cache the fact that some
of the types are not present.

DNS には ネームサーバが TTL 付きの否定返答を送り、リゾルバがキャッシュすることを 認めるという任意実装のサービスがある。 例えば、ネームサーバは名前エラー表示とともにTTLを送ることができる。 そして、この情報を受け取ったリゾルバは TTL時間の間、 権威あるデータを調べることなく、その名前が存在しないと判定することが許される。 同様に、リゾルバは複数のタイプと一致するQTYPEを持つ問い合わせをして、 いくつかのタイプが存在しないという事実をキャッシュしてよい。

This feature can be particularly important in a system which implements
naming shorthands that use search lists beacuse a popular shorthand,
which happens to require a suffix toward the end of the search list,
will generate multiple name errors whenever it is used.

この機能は検索リストで使って名前短縮を実装するようなシステムで 特に重要でありえる。 そのわけはよく使われる名前の 短縮法では、捜索リストの末尾にむかっての接尾辞を必要としていて、 使用時に複数の名前エラーを生じるからである。

The method is that a name server may add an SOA RR to the additional
section of a response when that response is authoritative.  The SOA must
be that of the zone which was the source of the authoritative data in
the answer section, or name error if applicable.  The MINIMUM field of
the SOA controls the length of time that the negative result may be
cached.

実現の方法はネームサーバが 権威ある返答をするときに返事の付加節に SOA RRs を付け加えてもよい というものである。 このSOA は返答節中の権威あるデータやネームエラーの生成源であるゾーンのもの でなければならない。 SOAの MINUMUM フィールドが否定の結果をキャッシュしてよい時間の長さを決める。

Note that in some circumstances, the answer section may contain multiple
owner names.  In this case, the SOA mechanism should only be used for
the data which matches QNAME, which is the only authoritative data in
this section.

返答節が複数の所有者名を持つ状況があることに注意せよ。 この場合、SOA メカニズムは QNAME に適合するデータだけに使われるべきである。 それはこの節中の唯一の権威あるデータである。

Name servers and resolvers should never attempt to add SOAs to the
additional section of a non-authoritative response, or attempt to infer
results which are not directly stated in an authoritative response.
There are several reasons for this, including: cached information isn't
usually enough to match up RRs and their zone names, SOA RRs may be
cached due to direct SOA queries, and name servers are not required to
output the SOAs in the authority section.

ネームサーバとリゾルバは権威のない返答の付加節にSOAを加えたり、 権威のある返答で直接言われていない結果を導いたりしてはならない。

これにはいくつか理由がある: キャッシュされた情報は RRs とそのゾーン名をマッチさせるのに十分でない、 SOA RRs は SOA を直接問い合わせることでキャッシュされる、 ネームサーバは権威節に SOA を答ることを要求されてない。 など。

This feature is optional, although a refined version is expected to
become part of the standard protocol in the future.  Name servers are
not required to add the SOA RRs in all authoritative responses, nor are
resolvers required to cache negative results.  Both are recommended.
All resolvers and recursive name servers are required to at least be
able to ignore the SOA RR when it is present in a response.

この機能は実装任意であるが、 将来、改訂されたバージョンでは 標準プロトコルの一部になると期待される。

ネームサーバは権威ある返答に SOA RRs を加えるように要求されていないし、 リゾルバは否定的結果をキャッシュすることを要求されていない。

両方とも推奨されている。

リゾルバと再帰ネームサーバは 返答に SOA RRs が存在している時、 それを無視できることが必要である。

Some experiments have also been proposed which will use this feature.
The idea is that if cached data is known to come from a particular zone,
and if an authoritative copy of the zone's SOA is obtained, and if the
zone's SERIAL has not changed since the data was cached, then the TTL of
the cached data can be reset to the zone MINIMUM value if it is smaller.
This usage is mentioned for planning purposes only, and is not
recommended as yet.

この機能を使う実験も提案されている。 考え方は次のようなものである。 キャッシュされたデータが来たゾーンがわかっていて、 そのゾーンのSOAの権威あるコピーが得られ、 ゾーンのシリアル番号がデータがキャッシュされて以来変更されていなければ、 キャッシュデータのTTLはゾーンのMINIMUM 値より小さければ、 MINIMUM値で置き換えてよい。

この使用法は計画が目的で触れられていて、まだ推奨できるものではない。

4.3.5. ゾーンの保守管理と転送 Zone maintenance and transfers

Part of the job of a zone administrator is to maintain the zones at all of
the name servers which are authoritative for the zone. When the inevitable
changes are made, they must be distributed to all of the name servers. While
this distribution can be accomplished using FTP or some other ad hoc
procedure, the preferred method is the zone transfer part of the DNS protocol.

ゾーン管理者の仕事の一つは ゾーンの権威あるネームサーバのすべてにおいて、 ゾーンを維持管理することである。 必要な変更が行われたときに、 それを全てのネームサーバに配らなくてはならない。

配布は FTP やその他のアドホックな方法で可能だが、 DNS プロトコルのゾーン転送を使う方が望ましい。

 The general model of automatic zone transfer or refreshing is that one of the
name servers is the master or primary for the zone. Changes are coordinated at
the primary, typically by editing a master file for the zone. After editing,
the administrator signals the master server to load the new zone. The other
non-master or secondary servers for the zone periodically check for changes
(at a selectable interval) and obtain new zone copies when changes have been
made.

自動的なゾーン転送や更新の一般モデルでは ネームサーバのうちのひとつがゾーンのマスターあるいはプライマリである。 変更はゾーンのマスターファイルを編集するなどプライマリに集約される。 編集の後、マスターサーバに新しいゾーンを読み込むよう指示する。 ゾーンの他の非マスターあるいはセカンダリサーバは定期的に変更の有無を調べ、 (選択可能な間隔で)、変更されているときは新しいゾーンのコピーを得る。

To detect changes, secondaries just check the SERIAL field of the SOA for
the zone. In addition to whatever other changes are made, the SERIAL field in
the SOA of the zone is always advanced whenever any change is made to the
zone. The advancing can be a simple increment, or could be based on the write
date and time of the master file, etc. The purpose is to make it possible to
determine which of two copies of a zone is more recent by comparing serial
numbers. Serial number advances and comparisons use sequence space arithmetic,
so there is a theoretic limit on how fast a zone can be updated, basically
that old copies must die out before the serial number covers half of its 32
bit range. In practice, the only concern is that the compare operation deals
properly with comparisons around the boundary between the most positive and
most negative 32 bit numbers.

変更を検出するにはセカンダリはゾーンの SOA シリアルフィールドを調べるだけだ。 何かゾーンを変更した場合にはかならずゾーンのSOAのシリアル番号を増加させる。 増加は単純な増分であったり、マスターファイルの書き込み日時を使ったもの ゾーンのシリアル番号を比較することで、どちらが最近であるかを決定 できるようにすることが目的である。 シリアル番号の増加と比較には順序空間算術を使うので、 ゾーンを更新する速度には理論的な上限がある。 基本的に、古いコピーはシリアル番号が 32 ビットで表わされる範囲の半分を過ぎる 前に消滅していなければならない。

実際には、唯一の関心時は32 ビット数において、正の最大値と負の最小値付近での 比較操作が正しく行われる事である。

 The periodic polling of the secondary servers is controlled by parameters in
the SOA RR for the zone, which set the minimum acceptable polling intervals.
The parameters are called REFRESH, RETRY, and EXPIRE. Whenever a new zone is
loaded in a secondary, the secondary waits REFRESH seconds before checking
with the primary for a new serial. If this check cannot be completed, new
checks are started every RETRY seconds. The check is a simple query to the
primary for the SOA RR of the zone. If the serial field in the secondary's
zone copy is equal to the serial returned by the primary, then no changes have
occurred, and the REFRESH interval wait is restarted. If the secondary finds
it impossible to perform a serial check for the EXPIRE interval, it must
assume that its copy of the zone is obsolete an discard it.

セカンダリサーバが行う周期的確認はゾーンの SOA RRs のパラメータで制御される。 SOA RRs では問い合わせる間隔を設定する。 パラメータは更新(REFRESH)、再試(RETRY)、満期(EXPIRE)と呼ばれる。 新しいゾーンがセカンダリにロードされたらいつでも、 セカンダリは REFRESH 秒以上待ってから、プライマリのシリアル 番号があたらしくなっているか、調べる。 この確認が完了しなかったときには、RETRY秒後に再度確認操作を行う。 確認操作はゾーンのプライマリに SOA RR を問い合わせるだけである。 セカンダリにあるゾーンのコピーのシリアルフィールドが プライマリからのものと等しければ、変更はなかったことになり、 REFRESH 秒待つことが再開される。 EXPIRE 秒の間、シリアルチェックできなかった場合には、 ゾーンのコピーは有効期限ぎれとして、廃棄しなければならない。

When the poll shows that the zone has changed, then the secondary server
must request a zone transfer via an AXFR request for the zone.  The AXFR
may cause an error, such as refused, but normally is answered by a
sequence of response messages.  The first and last messages must contain
the data for the top authoritative node of the zone.  Intermediate
messages carry all of the other RRs from the zone, including both
authoritative and non-authoritative RRs.  The stream of messages allows
the secondary to construct a copy of the zone.  Because accuracy is
essential, TCP or some other reliable protocol must be used for AXFR
requests.

ゾーンが変更されたことが分ったら、 セカンダリサーバはAXFRでゾーン転送を要求しなければならない。 AXFR は拒否されるなど、エラーを起こすかもしれないが、 通常は連続した返答メッセージが返ってきます。 最初と最後のメッセージにはゾーンの権威あるトップノードのデータが 含まれているはずだ。 途中のメッセージにはゾーンのすべての RRs が含まれていて、 それには権威のあるものもないものもある。 メッセージの集合によって、 セカンダリはゾーンの複製を作ることができる。 正確さが重要なので、AXFR要求では TCPなどの信頼性の高いプロトコル を使わなくてはならない。

Each secondary server is required to perform the following operations
against the master, but may also optionally perform these operations
against other secondary servers.  This strategy can improve the transfer
process when the primary is unavailable due to host downtime or network
problems, or when a secondary server has better network access to an
';intermediate'; secondary than to the primary.

各セカンダリサーバはあとに続く操作はマスターに対して行わなければならない。 ただし、他のセカンダリサーバに対してこれらの操作を行ってもよい。 この戦略はホストダウンやネットワークの問題でプライマリが利用できない時や、 プライマリよりも中間セカンダリの方がアクセスしやすい場合に 転送プロセスを改善することができる。


2002-10-16 訳 前野年紀