DNSドメインの頂点でのNSレコードの役割は何ですか?


21
$ORIGIN example.com. ; not necessary, using this to self-document

$TTL 3600
@        IN     SOA   ns1.example.com. admin.example.com. (
                      1970010100 7200 1800 1209600 300)

@        IN     NS   ns1.example.com.
@        IN     NS   ns2.example.com.

@        IN     A    198.51.100.1
ns1      IN     A    198.51.100.2
ns2      IN     A    198.51.100.3

sub1     IN     NS   ns1.example.edu.

sub2     IN     NS   ns1.sub2
ns1.sub2 IN     A    203.0.113.1 ; inline glue record

ドメインの頂点のにあるNSレコードの役割はよく理解されています。サブドメインの権限を別のネームサーバーに委任するために存在します。上記のこの例はsub1およびのNSレコードを含むでしょうsub2。これらにより、ネームサーバーは、それ自体が権限を持つとは見なされないドメインの部分の紹介を配布できます。

NSの目的は、ドメインの頂点に記録し、ns1そしてns2この場合には、それほど大きなでインターネットによって理解されるように見えます。私の理解(全体論的ではないかもしれません)は次のとおりです。

  1. ドメインの信頼できるサーバーを決定するために、DNSサーバーをキャッシュすることで使用されることはありません。これは、レジストラレベルで定義されているネームサーバーグルーによって処理されます。レジストラ、この情報を使用してグルーレコードを生成することはありません
  2. 彼らはされていない他のネームサーバにドメイン全体の権限を委任するために使用します。ISC BINDなどのソフトウェアでそうしようとしても、ネームサーバーはゾーンに対して権限があると見なし続けるため、「期待される」参照動作はまったく発生しません。
  3. ネームサーバーは、信頼できる応答(AAフラグセット)を返すかどうかを決定するためにネームサーバーによって使用されません。その動作は、ソフトウェアがゾーンのマスターであるかスレーブであるかによって定義されます。ほとんどのネームサーバーソフトウェアは、アップストリームのグルーレコードに含まれる情報と一致しないapex NSレコードを非常に喜んで処理します。

この場合、何が残っていますか?DNSサーバーをインターネット全体でキャッシュすることで消費されないように見えるのに、なぜこの情報を定義するのですか?

回答:


21

部下の識別

ApexレベルのNSレコードは、その下位を識別するためにマスターサーバーによって使用されます。権威あるネームサーバー上のデータが変更されると、DNS NOTIFYメッセージ(RFC 1996)を介して、そのリスト上のすべてのピアにこれを通知します。これらのサーバーは、SOAレコード(シリアル番号を含む)の要求でコールバックし、そのゾーンの最新のコピーをプルダウンするかどうかを決定します。

  • NSセクションにリストされていないサーバーにこれらのメッセージを送信することは可能ですが、これにはサーバー固有の構成ディレクティブ(ISC BINDのalso-notifyディレクティブなど)が必要です。Apex NSレコードは、デフォルト構成で通知するサーバーの基本リストを構成します。
  • セカンダリサーバーも、これらのNSレコードに基づいてNOTIFYメッセージを相互に送信し、通常は拒否のログが記録されることに注意してください。これを無効にするには、サーバーがマスターであるゾーンにのみ通知を送信するように指示するnotify master;か(BIND:)、またはNS構成で明示的に定義された通知を完全に優先してベースの通知をスキップします。(BIND: notify explicit;

信頼できる定義

上記の質問には誤りが含まれていました。

ドメインの権限のあるサーバーを決定するために、DNSサーバーをキャッシュすることで使用されません。これは、レジストラレベルで定義されているネームサーバーグルーによって処理されます。レジストラは、この情報を使用してグルーレコードを生成することはありません。

これは簡単な結論ですが、正確ではありません。NS(たとえば、レジストラのアカウント内で定義されるような)レコードとグルーレコードのデータは権威ではありません。権限が委任されているサーバーに存在するデータよりも「より信頼できる」と見なすことができないのは理にかなっています。これは、紹介にはaa(Authoritative Answer)フラグが設定されていないという事実によって強調されています。

説明する:

$ dig @a.gtld-servers.net +norecurse +nocmd example.com. NS
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14021
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                   IN      NS

;; AUTHORITY SECTION:
example.com.            172800  IN      NS      a.iana-servers.net.
example.com.            172800  IN      NS      b.iana-servers.net.

;; ADDITIONAL SECTION:
a.iana-servers.net.     172800  IN      A       199.43.135.53
a.iana-servers.net.     172800  IN      AAAA    2001:500:8f::53
b.iana-servers.net.     172800  IN      A       199.43.133.53
b.iana-servers.net.     172800  IN      AAAA    2001:500:8d::53

aa上記の返信のフラグが欠落していることに注意してください。紹介自体は信頼できません。一方、参照されているサーバー上のデータ信頼できます。

$ dig @a.iana-servers.net +norecurse +nocmd example.com. NS
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2349
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                   IN      NS

;; ANSWER SECTION:
example.com.            86400   IN      NS      a.iana-servers.net.
example.com.            86400   IN      NS      b.iana-servers.net.

とはいえ、この関係は、参照の親側で定義されたNS権限のないレコードなしではこれらのレコードの権限のあるバージョンについて学ぶことができないため、非常に混乱する可能性がありますNS。彼らが同意しない場合はどうなりますか?

  • 短い答えは「一貫性のない動作」です。
  • 長い答えは、ネームサーバが最初にスタブ空のキャッシュ上の紹介(糊)のオフのすべてが、それらになるということですNSAAAAA彼らは更新されたときにレコードが将来的に交換することができます。更新は、これらの一時レコードのTTLが期限切れになるか、誰かがそれらのレコードの回答を明示的に要求すると発生します。
    • AAAAAゾーン外のデータ(つまり、ゾーンcom外のデータの接着剤を定義するネームサーバーなど)のレコードは、ネームサーバーをそのような情報の信頼できるソースと見なすべきではないというよく知られた概念であるため、間違いなく更新されます。(RFC 2181)comexample.net
    • NSレフェラルの親側と子側でレコードの値が異なる場合(レジストラコントロールパネルに入力されたネームサーバーが、NS同じサーバーに存在するレコードと異なる場合など)、発生する動作は、子を含めて一貫性がありません。NSレコードは完全に無視されます。これは、動作が標準によって適切に定義されておらず、実装が再帰的なサーバー実装によって異なるためです。つまり、ドメインのネームサーバー定義が紹介の親側と子側で一貫している場合にのみ、インターネット全体一貫した動作が期待できます

長所と短所は、リフェラルの親側で定義されたレコードがそれらのレコードの信頼できるバージョンと一致しない場合、インターネット全体の再帰DNSサーバーが宛先間で跳ね返ることです。最初は、紹介にあるデータが優先されますが、信頼できる定義によってのみ置き換えられます。キャッシュはインターネット上で常にゼロから再構築されているため、インターネットがこの構成で単一バージョンの現実に定着することは不可能です。信頼できる記録が規格によって違法なことをしている場合、例えばNSCNAME、トラブルシューティングがさらに難しくなります。ドメインは、違反を拒否するソフトウェアに対して動作と破損を交互に繰り返します。(つまり、ISC BIND /名前付き)

RFC 2181§5.4.1は、このデータの信頼性のランキングテーブルを提供し、参照および接着剤に関連付けられたキャッシュデータが、参照するレコードの明示的な要求に対する回答として返されないことを明示します。

5.4.1. Ranking data

   When considering whether to accept an RRSet in a reply, or retain an
   RRSet already in its cache instead, a server should consider the
   relative likely trustworthiness of the various data.  An
   authoritative answer from a reply should replace cached data that had
   been obtained from additional information in an earlier reply.
   However additional information from a reply will be ignored if the
   cache contains data from an authoritative answer or a zone file.

   The accuracy of data available is assumed from its source.
   Trustworthiness shall be, in order from most to least:

     + Data from a primary zone file, other than glue data,
     + Data from a zone transfer, other than glue,
     + The authoritative data included in the answer section of an
       authoritative reply.
     + Data from the authority section of an authoritative answer,
     + Glue from a primary zone, or glue from a zone transfer,
     + Data from the answer section of a non-authoritative answer, and
       non-authoritative data from the answer section of authoritative
       answers,
     + Additional information from an authoritative answer,
       Data from the authority section of a non-authoritative answer,
       Additional information from non-authoritative answers.

   <snip>

   Unauthenticated RRs received and cached from the least trustworthy of
   those groupings, that is data from the additional data section, and
   data from the authority section of a non-authoritative answer, should
   not be cached in such a way that they would ever be returned as
   answers to a received query.  They may be returned as additional
   information where appropriate.  Ignoring this would allow the
   trustworthiness of relatively untrustworthy data to be increased
   without cause or excuse.

よく書かれた答え!あなたの答えの「長短」に同意しません。インターネットでのDNSの主な用途は、ホストIP、つまり「A」リクエストを取得することです。DNSリゾルバーは、常に照会を受け入れて置き換え、信頼できる「A」応答を取得します。そして、彼は「常に」紹介記録のみをキャッシュします。レコードが置き換えられるのは、「example.com IN NS」に対する明示的な要求が来たときだけです。次に、リゾルバは紹介場所のサーバーに問い合わせます。そして、そのAR応答は、キャッシュされた紹介応答を置き換えます(そのレコードのTTLのみ)。
Wasted_Coder

@BillThorの答えによると、私は間違っているかもしれません。DNSサーバーが更新された場合、example.comのNSキャッシュエントリが(現在は期限切れの)権威あるNS応答であるという事実に基づいて判断しました。DNSチェーンを破壊します。(古い)NSサーバーが応答し続けるループでスタックしているため、上記のapex DNSサーバー(レジストラ)での変更は考慮されません。DNSサーバーを移動するが、古いDNSサーバーを更新したりオフラインにしたりしない場合のように。それとも、この「問題」は今日完全に事実なのでしょうか?
-Wasted_Coder

@Wasted同様に、多くの仮定がなされているため、最初のコメントに同意しません。動作は標準によって明示的にレイアウトされていないため、実際には実装固有です。このプレゼンテーションは6年目です(スライド11から開始)が、それでも重要な点があります。親と子のネームサーバー設定は異なります。それ以上は、RFC 2181の要件のみに頼ることができます。
アンドリューB

リゾルバのNSキャッシュエントリがTTL = 0に達した場合の懸念は、example.comの場合にあると思います。また、new.example.comの場合など、まだキャッシュされていない新しいホストエントリを検索する必要があります。example.comのNSサーバーが必要になりました。キャッシュされたコピーの有効期限が切れているため、まだ応答するかどうかを確認するために、「期限切れの」NSサーバーをヒットしようとするのは悪いでしょう。次の祖先、つまり.comのNSで方向を確認する必要があります。これは、ほとんどの場合(NS要求が処理されるまで)先祖NSレコードが優先されることを意味します。
Wasted_Coder

スライド#11から@Wasted Startを実行し、3つのパターンに注意してください:子中心の非スティッキー(PPPCCCPPPCCC...)、子中心のスティッキー(PPPCCCCCC...)、および親のスティッキー(PPPPPP...)。子供中心の非粘着性は、これまでで最も一般的であり、そして子供中心の粘着性は、実際にはより多くの親粘着性よりも普及しています。リゾルバーソフトウェアが親スティッキーでない限り、子と親のNSデータが一致しない場合、クライアントは実際に2つの現実のバージョン間を行き来します。
アンドリューB

3

NSは、委任ゾーンがドメイン定義の完全性を提供することを記録します。NSサーバー自体は、ゾーンファイルに依存します。ルートサーバーから再帰クエリを実行して自分自身を見つけようとすることは想定されていません。ゾーンファイルのNSレコードは、他の多くの機能を提供します。

キャッシュサーバーは、キャッシュからネームサーバーを照会することにより、ネームサーバーリストを更新できます。キャッシングサーバーがネームサーバーのアドレスを知っている限り、再帰的に適切なNSレコードを検索するのではなく、それを使用します。

ネームサーバーを移動する場合、古いネームサーバーと新しいネームサーバーを更新することが重要です。これにより、2つのゾーン定義が同期しなくなった場合に発生する停止や不整合が防止されます。最終的に、更新されたレコードは、NSレコードをキャッシュしたサーバーによって更新されます。これにより、ネームサーバーのキャッシュリストが置き換えられます。

NSレコードは、DNS構成の正確性の確認にも役立ちます。検証ソフトウェアは、多くの場合、委任ゾーンのネームサーバー定義がゾーンによって提供されるものと一致することを確認します。このチェックは、すべてのネームサーバーで実行できます。不一致は、設定の誤りを示している場合があります。

NSレコードを使用すると、切断された(ローカル)ゾーンが許可されます。これらは、登録済みドメインのサブドメイン、または完全に新しいドメイン(TLDの変更により推奨されません)である可能性があります。ネームサーバーをネームサーバーとして使用するホストは、ルートサーバーから再帰的にアクセスすることにより、到達できないゾーンを見つけることができます。他のネームサーバーは、ローカルゾーンのネームサーバーを参照するように構成できます。

スプリットDNS(内部/外部)の場合、異なるDNSサーバーのセットが必要になる場合があります。この場合、NSリスト(およびその他のデータ)は異なり、ゾーンファイルのNSレコードには適切なネームサーバーリストがリストされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.