原則として、DNS名前解決はどのように機能しますか?


10

現在、Linuxのシステム管理者向けのオンラインコースを受講しています。ネームサーバーを検索する方法を知っていますが、少なくともdigコマンドを使用して、追加のセクションコマンドでアドレス指定されているものを見つけることが正しい場合は、次の質問をすると少し迷いました。

構成済みのネームサーバーにキャッシュされた結果がない場合は、maps.google.comを解決するためにネームサーバーにクエリを実行する必要があるネームサーバーの数はいくつですか。これらのネームサーバーをすべて見つけるには、どのコマンドを使用しますか?各レベルから1つ挙げて、このレベルが必要な理由を説明してください。

答えたくないのですが、正確に何を求められているのか知りたいです。


と思っdig +traceていましたが、レベルの意味がわかりません。これは、サーバー障害の問題である可能性があります。
Big McLargeHuge

こんにちはlinux8807。質問をより明確にするために編集しました。特に、より良いタイトルを付けようとしました。私が意図を変更したと感じた場合は、編集を元に戻してください(「編集済み」リンクをクリックしてから、元のリビジョンの上にある「ロールバック」)。
CVn

私はこのビデオがそれを説明していると思います:youtube.com/watch

回答:


13

構成済みのネームサーバーにキャッシュされた結果がない場合は、maps.google.comを解決するためにネームサーバーにクエリを実行する必要があるネームサーバーの数はいくつですか。これらのネームサーバーをすべて見つけるには、どのコマンドを使用しますか?各レベルから1つ挙げて、このレベルが必要な理由を説明してください。

さて、これを分けてみましょう。

「設定されたネームサーバーがキャッシュされた結果を自由に使えると仮定する」 -まず、キャッシュされたデータがまったくない場合、何も解決できません。リゾルバーのキャッシュを準備するには、.(別名ルート)ゾーンのNSレコードとアドレス(A、AAAA)レコードが必要です。これは、root-servers.net.ゾーンにあるルートネームサーバーです。そのゾーンやそれらのDNSサーバーに魔法のようなものはありません。ただし、このデータは多くの場合、DNSリゾルバーに「帯域外」で提供され、正確にはリゾルバーのキャッシュを準備します。権限のみのネームサーバーはこのデータを必要としませんが、解決ネームサーバーは必要です。

また、何に「解決」しますか?その名前のRRtypeはありますか?ARR?または、他の何か?どのクラス(CH/ Chaosnet、IN/ Internet、...)?正確なプロセスは異なりますが、一般的な考え方は変わりません。

ルートネームサーバーの検索方法はわかっているが、それ以外の何もないと想定できる場合、「解決」IN Aとは、名前に関連付けられているRR のコンテンツを取得することを意味し、はるかに実用的です。

DNS名を解決するには、基本的に名前をラベルに分割し、右から左へと作業を進めます。.最後のを忘れないでください。あなたは本当にでmaps.google.com.はなく解決するでしょうmaps.google.com。そのため、解決する必要があります(これはわかっていますが、DNSリゾルバーの実装ではおそらく解決しません)。

  • .
  • com.
  • google.com.
  • maps.google.com.

のコンテンツを要求する場所を見つけることから始め.ます。それは簡単です; 私たちはすでにその情報を持っています:ルートネームサーバー名とIPアドレス。ルートネームサーバーがあります。a.root-servers.net名前解決を続行するために198.41.0.4(、また2001:503:ba3e :: 2:30)を使用することにしたとしましょう。実際には、リゾルバーによって最初に行われることの1つは、提供されたルートサーバーデータを使用して、ルートゾーンサーバーの1つにルートゾーンのネームサーバーの正確なリストを要求することです。名前とIPアドレスは有効で到達可能です。解決が始まると、ルートゾーンの完全なデータセットが含まれます。

maps.google.com. IN A198.41.0.4へのDNSクエリをオフにします。それは「いや、やるつもりはないが、ここに誰かが知っているかもしれない」と返答する。それは紹介です。これにはNS、問題のサーバーが認識している最も近いゾーンのレコードと、サーバーがたまたま使用できるグルーレコードがあります。接着剤データが利用できない場合は、最初に、選択したNSレコードで指定されたホストを解決する必要があるため、IPアドレスを取得するために別の名前解決を生成します。接着剤データが利用可能な場合は、回答に少なくとも「近い」ネームサーバーのIPアドレスがわかります。この場合、それがcom.ゾーンのサーバーのセットとなり、接着剤データも提供されます。

com.ネームサーバーの1つに同じ質問をして、プロセスを繰り返します。彼らはどちらも知りませんが、Googleの信頼できるネームサーバーを紹介します。この時点で、一般的なケースでは、接着剤データが提供されているかどうかにかかわらず、ヒットまたはミスされます。たとえば、comドメインのみがネームサーバーを持つことを妨げるものは何もありません。nlその場合、gTLDサーバーからグルーデータを利用することはできません。提供された接着剤データも不完全な場合があります。または、本当に運が悪い場合は、正しくない場合もあります。上で述べた別の名前解決を生成する準備を常に整えておく必要があります。

基本的には、aa(信頼できる回答)フラグが設定された回答が得られるまで続けます。その答えは、あなたが何を求めているのか、またはあなたが要求したRRが存在しない(NXDOMAINまたはNOERROR、応答データレコードが0である)ことを教えてくれます。次のような応答を探し続けますSERVFAIL(そして、1つのステップから戻って、もし取得したら別のサーバーを試してください。すべての名前付きサーバーがに戻ったらSERVFAIL、名前解決プロセスに失敗SERVFAILし、クライアントに戻ります)。

各サーバーから完全なRRnameを要求する代わりに(これは悪い習慣と考えられるかもしれません)、以前に決定したラベルの分割リストを使用して、ルートIN NSおよびIN A/ IN AAAARRに向かってサーバーから与えられたネームサーバーに尋ねますそのラベルに使用し、それらを使用して名前解決プロセスを進めます。これは実際にはわずかに異なるだけであり、同じプロセスが引き続き適用されます。

ユーティリティの+traceオプションを使用して、このプロセス全体をシミュレートできdigます。これは、BINDの一部として、またはset debugに付属していnslookupます。

(特にこれは、いくつかのRRtypesことも覚えておく価値だNSMX;また、およびいくつかの他の人がA6合理的にしばらくの間、よく使用されたが、廃止された)ことができ、参照他のRRを行います。その場合、クライアントに完全で有用な応答を返すために、さらに別の名前解決プロセスを生成する必要がある場合があります。


1
この答えは、手順だけではなく、概念を理解するというOPの要求にかなり一致していると思います。
111 --- 2014年

だから私がやっていることはdig maps.google.com IN Aです、そして私は同じように掘りますが、それが正しい場合はns1.google.comで、それが正しい場合、教師が話しているレベルとその理由は何ですか?必要とされる?
linux8807 2014年

@ linux8807 dig提供されたグルーレコードにIPアドレスが含まれていない紹介を受け取ったら、ns1.google.comの名前を求めます。次に、以前の名前解決プロセスを続行します。
CVn 2014年

@MichaelKjörlingすべてのns1-4.google.comレコードのグルーレコードにIPアドレスがあります。i.imgur.com/o79aIGB.png
linux8807

@ linux8807これは、グルーレコードがクエリ対象のドメインと同じTLDにある場合によく発生します。ただし、一般的なケースではこれ依存することはできません。
CVn 2014年

7

dnstracer名前解決をトレースするコマンドがあります(少なくともDebianでは、インストールする必要がある場合があります。これはパッケージ名でもあります)。(Koverasがコメントで指摘しているように)を使用することもできますdig

ここにdnstracerがあります。-s .ルートから始めることを意味します。-4IPv4を使用することを意味します(v6はここで壊れています...); -o最後に解決されたIPアドレスを実際に表示することを意味します(出力のその部分は省略しましたが、たくさんあります)。

anthony@Zia:~$ dnstracer -s . -4 -o maps.google.com
Tracing to maps.google.com[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 |\___ m.gtld-servers.net [com] (192.55.83.30) 
 |     |\___ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer 
 |     |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer 
 |     |\___ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer 
 |      \___ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer 
⋮

dnstracerがすべてのパスをトレースする間、その出力は継続します(たとえば、一部のネームサーバーに古いゾーンがあるかどうかを確認できます)。

したがって、ルートネームサーバーへのクエリが1つ、次にgtld-servers(.comゾーンのサーバー)へのクエリ、最後にGoogleネームサーバーへのクエリが必要であることがわかります。

を使用するdigと、出力ははるかに冗長になります(したがって、多くのカットを行います)。

dig -4 maps.google.com. +norecurse +trace
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> maps.google.com. +norecurse +trace
;; global options: +cmd
.                       425379  IN      NS      b.root-servers.net.
⋮
com.                    172800  IN      NS      f.gtld-servers.net.
⋮
google.com.             172800  IN      NS      ns2.google.com.
⋮
maps.google.com.        300     IN      A       74.125.228.70
⋮

digさらに、ルートネームサーバーの現在のリストを取得するクエリを実行したことを示します。これは、DNSサーバーが通常行うことはほとんどありません。したがって、コールドキャッシュケースでカウントするかどうかはわかりません。

もちろん、たとえばを使用して、実際のクエリを監視することもできwiresharkます。


端末で設定されているため、何もインストールできませんが、仕事から帰宅したら、dnstracerを試して、それが機能するかどうかを確認し、*(216.239.38.10)(216.239.36.10)( 216.239.32.10)(216.239.34.10)*これ?もしそうなら、私はある意味でそれにアクセスすることができますが、信頼できる回答ではありません。また、これは彼女がレベルで言及しているものですか?
linux8807 2014年

@ linux8807をdig持っていないdnstracer場合(またはdigのフォーマットが好きな場合)に使用できます。dnstracerが出力しているIPアドレスは、ネームサーバーのIPアドレスです。彼らの名前は左側にあります。a.root-servers.netは198.41.0.4などです。これらはクエリ対象のサーバーであり、角かっこ内にどのゾーンも表示されます。私は最初のレベルは* .root-servers.net(のためである疑いがある.)、第二である* .gtld-servers.net(用.com)、など
derobert
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.