- ベストアンサー
NSレコードは必須?
馬鹿げた質問かもしれませんが… 上位DNSのNSレコードに指定されたDNSサーバー、すなわちリソースデータを持っているDNSサーバーでは、そのドメインのNSレコードは自分自身を指すわけですが、この記述は何のためにあるのでしょう? うまく伝わるか解りませんが、たとえば、ドメインを取得したレジストラのほうにはNSを指定するのは当然です。たとえばns.domain.netと指定します。では、ns.domain.netのほうには、NSを指定する意味がないのでは?と思ったのです。 単なるルールに過ぎないのでしょうか。あるいは何か技術的に理由があるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
平たく言えば、おっしゃっている >Aレコードの存在うんぬんより前にまずは「ここがゴールである」 >ことを確認するためのもの という、これがズバリ答えです。 DNSそのものは分散システムですから、ある特定のサーバーが持っているAレコードなどは重要ではなく、極端な言い方をすればAレコードが存在していなくても良いわけです。 と言ったら語弊がありますが…、あくまで分散システムとしては、ルーティングを構成できさえすれば、クエリは次の段階の話で、Aレコードがなくても(もちろんエラーにはなりますが)分散システムの構成としてはNSレコードが参照されればOK、という意味です。 おそらく、まずAレコードありき、で考えてしまったのが今回の疑問の要因だったのではないでしょうか。 Aレコードがある⇒正引きできる⇒NSをたどる必要がない というように。 実際には、ほとんどの実装でAレコードをチェックして判別することはありません。まずNSレコードありき、で、ゴール地点のAレコードが参照される、ということになります。 これは書くべきか迷ったのですが… ANo.1さんの投稿は、引用なさった記事が今回の件とはちょっとずれていることと、少々その記事は古いようです…。 指摘するようで大変失礼だとは思いますが、質問者さんや見ている皆さんが誤解してもいけませんので。 どうぞご理解ください。
その他の回答 (3)
- foitec
- ベストアンサー率43% (1080/2457)
SV576 さんの考え方にも一理あります。 確かに原理的には、上位ゾーンに保持されているNSレコードが参照され、名前解決処理に使われるサーバが選択されるわけなので 自ゾーンファイルに記載されているNSレコードがこの処理で使われることはなく、NSレコードは2重に登録されていることになるわけですからね。 ただし、前にも書いたとおり自ゾーンファイルに登録されているNSレコードが権限のある正規のNSレコードとして扱われるので 自ゾーンのNSレコードを設定せずに、bindを動作させることはできないのです。 >言ってみれば、他のサーバーに「委任しない」ことを示すため、と。 上手いこと言いますね・・・ DNSは、適切に設定された NS レコードによって、ルートサーバーから連なる巨大なツリーを形成してここが終点ですよ。 それが自ゾーンのNSレコードです・・ということでしょう。 回答しながら疑問に思われていることがなるほどなと思いました。 って回答になってませんでした。
補足
いえいえ、いろいろ調べていただいたようで、お手数お掛けしました。 私の解釈も、単なる推測に過ぎません。明確なところは解りませんよね…。 調べていくうち、単なるルールではなく挙動に関わっているようだ、というのは解ってきたのですが。 どなたか詳しい方、よろしくお願いいたします。
- foitec
- ベストアンサー率43% (1080/2457)
考えすぎかな・・・という感じです。 上位ネームサーバがns.domain.netを指し実際にdomain.netのネームサーバが ns.domain.net(NSレコードがns.domain.net)のときはいかにもNSレコードが無くても良いように感じますね。 でも上位ネームサーバの示すNSレコードは自身のドメインに対して示していません。 自身は自身のNSレコードを参照します。 同じものであって同じではないと考えてください。 >このNSレコードは事実上は使われることがない、ただのルールである いやいや使われます。 ここ参照 権限のレコードを管理する http://technet2.microsoft.com/WindowsServer/ja/library/63814203-5b11-4ec2-a45c-725bd24d3c411041.mspx?mfr=true
お礼
たびたびありがとうございます。 すみません…、「考えすぎ」だと言われてしまうと、そもそもこのスレッドが無意味だということになってしまい、このサイトの意義すら質問者に対して「考えるな」という回答で終わらせることになってしまうので、その点は、どうかご容赦願います。 で、ご紹介いただいたWinサーバーの説明を見ても、正直…、必須だとは書いてありますが、自身を指すNSが具体的に何に使われるのか見つかりませんでした…。 「ゾーン範囲外の名前を解決する」という点はよく解るんですけどね…、まさしく委任であるわけで。「委任しない」場合がよく解らないんですよね…。 BINDのマニュアルを見ても、そのあたりの情報が見つかりませんでした。 結局のところ、おっしゃっている > 自身は自身のNSレコードを参照します。 ということから解釈して、Aレコードの存在うんぬんより前にまずは「ここがゴールである」ことを確認するためのものなのかな、と考えれば良さそうな気もしてきました。言ってみれば、他のサーバーに「委任しない」ことを示すため、と。 先ほどの宝探しゲームで言えば、最後のメモには「これが本物の宝物だよ」と書いてある、という感じに考えればいいんですかね…(苦笑)
- foitec
- ベストアンサー率43% (1080/2457)
ご承知のとおりNSレコードは、ドメインの委任を行うときに必要となるリソースレコードです。 NSレコードは、委任先のネームサーバをホスト名で指定しており、直接IPアドレスで指定するものではないことにはお気づきでしょう。 そして、指定するホスト名はAやAAAAレコードを持つものである必要があります。 お尋ねのように NSレコードは、委任元のゾーンファイルと委任先のゾーンファイルという2つのゾーンファイルの両方に記載される、珍しいレコードですね。 自身のドメインのNSレコードなんて無くても良いように確かに思えます。 ドメインのDNSサーバは何もひとつとは限りません。 2つもあれば6の場合もあります。 つまりあるドメイン名に対して、NSレコードはコンテンツサーバの数だけ指定します。 名前解決はルートサーバから順にたどっていくため、上位の委任元ゾーンが委任先のネームサーバの情報を持つ必要があります。 ここまでは当然ですよね。 さて上位ネームサーバから委任を受けた、NSレコードのオーソリティは委任先(自身のドメイン)にあるため、委任先のゾーンに記載されているNSレコードが、「信頼できる」情報となります。 つまり上位が ns.domain.netを指定してきたとしてもdomain.netのNSレコードが ns5.domain.net だとすれば其のドメインでは ns5 を信頼して名前解決を図るのです。 従って上位からns.domain.netを委任されてもdomain.netにNSレコードが存在しないまたは存在しないホストを指定したNSレコードが書かれていると domain.netドメイン内では名前の解決ができないことになります。 実際に委任元、委任先のネームサーバに NS の情報を問い合わせてみると、挙動の違いが確認できますよ。 % dig @a.dns.jp jprs.jp ns (jp ゾーンのネームサーバに jprs.jp の NS レコードを問い合わせる) % dig @ns1.jprs.co.jp jprs.jp ns (jprs.jp ゾーンのネームサーバに jprs.jp の NS レコードを問い合わせる)
お礼
とても丁寧なご説明ありがとうございます。 恐れ入りますが、もう少しお付き合いいただけないでしょうか…。 名前解決はルートサーバから順にたどっていくというのは解ります。最終的に求める情報を得るために、複数のサーバーを経由して、やがてたどり着く、ということですね。 そこで、 > つまり上位が ns.domain.netを指定してきたとしてもdomain.netのNSレコードが ns5.domain.net だとすれば其のドメインでは ns5 を信頼して名前解決を図るのです。 おっしゃることは解るのですが、では、上記が「ns5.domain.net」ではなく「ns.domain.net」だった場合、つまりns.domain.netが目的のドメインのAレコードなど情報を持っていれば、NSレコードに「ns.domain.net」と書いてある意味がないように思えるのです。 上位DNSから得られた情報で、すでに最終DNSにたどりついた、digコマンドで上位から問い合わせていったとき、最後とその前の問い合わせで同じものを返す、という状態の場合です。 たとえるなら、宝物探しゲームで、宝物のありかを示したいくつものメモを手に入れながらたどっていき、ついに宝物を手に入れた!しかし宝物と一緒に、またしてもメモがあり「宝物はココにあるよ」と意味のないことが書いてある、というような、そんなイメージです。 このNSレコードは事実上は使われることがない、ただのルールである。ということなら解らなくもないんですが…。 たとえば、おっしゃっているように「委任元と委任先で異なる場合のために、常に書いておくべし。たとえ同一でも(技術的には無意味だが)ルールなので書いておくべし」ということなのでしょうか。
お礼
ご回答ありがとうございます。 おかげでスッキリしました! まさしくおっしゃるとおり、Aレコードを重視しすぎていました。 挙動というかフロー自体を私は誤解してたようですね… 考えてみれば、スレーブにAがあれば子リソースを参照しなくなってしまいますね。なるほどです。 記事の件も、ありがとうございます。 http://www.atmarkit.co.jp/fnetwork/dnstips/030.html これですよね… もちろん、foitecさんが、全文ここからコピーなさった(口調だけ変えて)のは始めから知っていました。 だって、いくらなんでも、検索で1番に出てくるサイトを、質問者の私が見ないはずがないです(苦笑)ここに来る前に読んだ記事です。 「digをやれば解りますよ」とおっしゃりながら、御自分ではやってないことも、すぐに分かりました… だってそのドメインは現在存在しませんから…(苦笑) Windowsサーバーの権限プロパティ設定に関する話は、かなり違う話でしたが… でも、文句を言うつもりはありません。調べていただいたようだし、その点は感謝しております。お手数をお掛けしました。 それでは、皆様ありがとうございました。