DNSを理解しましょう

画像

注意深い読者は、この図でIPv6を見つけます。







人々はしばしばドメインに困惑しています。 サイトが機能しないのはなぜですか? なぜこのがらくたが壊れているのか、何も役に立たない、私はそれが機能したいだけです! 通常、質問者はDNSを知らないか、基本的なアイデアを理解しません。 多くの人にとって、DNSは恐ろしく、理解できないものです。 この記事は、そのような恐れを払拭する試みです。 DNSは、いくつかの基本的な概念を理解していれば簡単です。







DNSとは



DNSDomain Name Systemの略です。 これは、キーと値のグローバル分散リポジトリです。 世界中のサーバーがキー値を提供できます。キーを知らない場合は、別のサーバーに助けを求めます。







以上です。 真実は。 ユーザーまたはブラウザがキーwww.example.com



値を要求し、応答で1.2.3.4



を受け取ります。







基本的な作品



DNSの大きな利点は、それがパブリックサービスであり、それを把握したい場合は、サーバーに侵入できることです。 やってみましょう。 マシンweb01.bugsplat.info



ホストされているドメインpetekeen.net



があります。 以下で使用されるコマンドは、OS Xコマンドプロンプトから実行できます( ああ、macOS、およそTrans。です )。







名前と住所のマッピングを見てみましょう。







 $ dig web01.bugsplat.info
      
      





dig



チームは、DNSクエリ用のスイスアーミーナイフです。 クールな多機能ツール。 答えの最初の部分は次のとおりです。







 ; <<>> DiG 9.7.6-P1 <<>> web01.bugsplat.info ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51539 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
      
      





興味深い詳細は1つしかありません。リクエスト自体に関する情報です。 記録を要求し、正確に1つの回答を受け取ったと言われています。 ここに:







 ;; QUESTION SECTION: ;web01.bugsplat.info. IN A
      
      





dig



は、デフォルトでA



レコードを要求します。 A



addressであり、これはDNSの基本的なタイプのレコードの1つです。 A



は1つのIPv4



アドレスが含まれます。 IPv6



アドレスに相当するものがありますAAAA



。 答えを見てみましょう。







 ;; ANSWER SECTION: web01.bugsplat.info. 300 IN A 192.241.250.244
      
      





ホストにはweb01.bugsplat.info.



があるとweb01.bugsplat.info.



1つのアドレスA



があります: 192.241.250.244



。 数字300



TTL



または生存期間です。 再チェックするまで何秒間もキャッシュに値を保持できます。 IN



という言葉はInternet



意味しInternet



。 これは歴史的に起こり、ネットワークのタイプを分ける必要があります。 詳細については、 IANAのDNSパラメータードキュメントをご覧ください。







回答の残りの部分では、回答自体について説明します。







 ;; Query time: 20 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Jul 19 20:01:16 2013 ;; MSG SIZE rcvd: 56
      
      





特に、サーバーが応答した時間、サーバーが持っていたIPアドレス( 192.168.1.1



)、 dig



53



、デフォルトのDNSポート)、どのポートがノックオンされたのか、リクエストが完了したとき、応答のバイト数を示します。







ご覧のとおり、すべてのヒープは通常のDNSクエリで発生します。 Webページを開くたびに、ブラウザーは、写真やスクリプトなどのすべての外部リソースをダウンロードするなど、そのような要求を多数行います。 各リソースは、少なくとも1つの新しいDNSクエリを処理します。DNSが強力なキャッシング用に設計されていない場合、大量のトラフィックが生成されます。







しかし、この例では、DNSサーバー192.168.1.1



が他のサーバー群に連絡して、単純な質問「 web01.bugsplat.info



のアドレスはweb01.bugsplat.info



ですか?」に答えることは見えません。 トレースを実行して、情報がキャッシュされていなかった場合に発生する可能性のあるすべてのdig



チェーンについて調べてみましょう。







 $ dig +trace web01.bugsplat.info ; <<>> DiG 9.7.6-P1 <<>> +trace web01.bugsplat.info ;; global options: +cmd . 137375 IN NS l.root-servers.net. . 137375 IN NS m.root-servers.net. . 137375 IN NS a.root-servers.net. . 137375 IN NS b.root-servers.net. . 137375 IN NS c.root-servers.net. . 137375 IN NS d.root-servers.net. . 137375 IN NS e.root-servers.net. . 137375 IN NS f.root-servers.net. . 137375 IN NS g.root-servers.net. . 137375 IN NS h.root-servers.net. . 137375 IN NS i.root-servers.net. . 137375 IN NS j.root-servers.net. . 137375 IN NS k.root-servers.net. ;; Received 512 bytes from 192.168.1.1#53(192.168.1.1) in 189 ms info. 172800 IN NS c0.info.afilias-nst.info. info. 172800 IN NS a2.info.afilias-nst.info. info. 172800 IN NS d0.info.afilias-nst.org. info. 172800 IN NS b2.info.afilias-nst.org. info. 172800 IN NS b0.info.afilias-nst.org. info. 172800 IN NS a0.info.afilias-nst.info. ;; Received 443 bytes from 192.5.5.241#53(192.5.5.241) in 1224 ms bugsplat.info. 86400 IN NS ns-1356.awsdns-41.org. bugsplat.info. 86400 IN NS ns-212.awsdns-26.com. bugsplat.info. 86400 IN NS ns-1580.awsdns-05.co.uk. bugsplat.info. 86400 IN NS ns-911.awsdns-49.net. ;; Received 180 bytes from 199.254.48.1#53(199.254.48.1) in 239 ms web01.bugsplat.info. 300 IN A 192.241.250.244 bugsplat.info. 172800 IN NS ns-1356.awsdns-41.org. bugsplat.info. 172800 IN NS ns-1580.awsdns-05.co.uk. bugsplat.info. 172800 IN NS ns-212.awsdns-26.com. bugsplat.info. 172800 IN NS ns-911.awsdns-49.net. ;; Received 196 bytes from 205.251.195.143#53(205.251.195.143) in 15 ms
      
      





情報は階層順に表示されます。 dig



どのようにポイントを挿入したかを思い出してください.



ホストの後、 web01.bugsplat.info



? だから、ポイント.



これは重要な詳細であり、階層のルートを意味します。







ルートDNSサーバーには、世界中のさまざまな企業や州がサービスを提供しています。 当初、それらはほとんどありませんでしたが、インターネットは成長しており、現在は13個あります。 ただし、各サーバーには、1つのIPの背後に隠れている数十または数百の物理マシンがあります。







そのため、トレースの最上部にはルートサーバーがあり、それぞれがNS-



レコードを使用して定義されています。 NS



レコードは、ドメイン名(この場合はルートドメイン)をDNSサーバーに関連付けます。 NamecheapやGodaddyなどのレジストラにドメイン名を登録すると、 NS



レコードが作成されます。







次のブロックでは、 dig



がランダムルートサーバーを選択し、 web01.bugsplat.info



A



レコードを彼に要求した方法を確認できます。 ルートサーバーのIPアドレスのみが192.5.5.241



192.5.5.241



)。 それで、どのルートサーバーでしたか? 見つけよう!







 $ dig -x 192.5.5.241 ; <<>> DiG 9.8.3-P1 <<>> -x 192.5.5.241 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2862 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;241.5.5.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 241.5.5.192.in-addr.arpa. 3261 IN PTR f.root-servers.net.
      
      





-x



フラグを使用すると、 dig



はIPアドレスによる逆ルックアップを実行します。 DNSは、IPとホスト(この場合はf.root-servers.net



を接続するPTR



レコードで応答します。







最初のクエリに戻ると、ルートサーバーF



NS



サーバーの異なるセットを返しました。 彼はトップレベルのドメインinfo



担当しています。 dig



は、これらのサーバーの1つにweb01.bugsplat.info



A



レコードを要求し、応答でNS



サーバーの別のセットを受信し、次にweb01.bugsplat.info.



A



レコードをこれらのサーバーの1つに要求しますweb01.bugsplat.info.



。 そして最後に、答えが得られます!







ふう! 大量のトラフィックが生成されますが、これらのレコードのほとんどすべては、チェーン内の各サーバーによって長時間キャッシュされていました。 お使いのコンピューターも、ブラウザーと同様にこのデータをキャッシュします。 ほとんどの場合、DNSクエリはルートサーバーに到達しません。IPアドレスはほとんど変更されないためです( 「おそらく、データベース内のレコードの大きなTTLと同じです。DNSサーバーのIPアドレスが変更されていない場合、これは、そのベースが永遠にキャッシュされることを意味するものではありません」 -rrravからの注意 )。 トップレベルドメインcom



net



org



など。 また、通常は大量にキャッシュされます。







他のタイプ



知っておく価値のあるタイプがいくつかあります。 最初はMX



です。 ドメイン名を1つ以上のメールサーバーに接続します。 電子メールは非常に重要であるため、独自の種類のDNSレコードがあります。 petekeen.net



MX



値はpetekeen.net



です。







 $ dig petekeen.net mx ; <<>> DiG 9.7.6-P1 <<>> petekeen.net mx ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18765 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;petekeen.net. IN MX ;; ANSWER SECTION: petekeen.net. 86400 IN MX 60 web01.bugsplat.info. ;; Query time: 272 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Jul 19 20:33:43 2013 ;; MSG SIZE rcvd: 93
      
      





MX



レコードはIPアドレスではなく名前を指していることに注意してください。







あなたが最もよく知っている別のタイプはCNAME



です。 Canonical Nameとして復号化します。 彼はある名前を別の名前に関連付けます。 答えを見てみましょう。







 $ dig www.petekeen.net ; <<>> DiG 9.7.6-P1 <<>> www.petekeen.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16785 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.petekeen.net. IN A ;; ANSWER SECTION: www.petekeen.net. 86400 IN CNAME web01.bugsplat.info. web01.bugsplat.info. 300 IN A 192.241.250.244 ;; Query time: 63 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Jul 19 20:36:58 2013 ;; MSG SIZE rcvd: 86
      
      





2つの回答を受け取ったことはすぐに明らかです。 最初のものは、 www.petekeen.net



指しているとweb01.bugsplat.info



ます。 2番目は、そのサーバーのA



レコードを返します。 CNAME



は別のサーバーのエイリアス(またはエイリアス)であると想定できます。







CNAMEの何が問題なのか



CNAME



レコードは非常に便利ですが、重要なポイントがあります。ある名前のCNAME



がある場合、同じ名前の別のレコードを作成することはできません。 MX



A



NS



も何もありません。







その理由は、 CNAME



指す場所のすべてのレコードがCNAME



に対しても有効であるような方法でDNSが置換を実行するからです。 この例では、 www.petekeen.net



web01.bugsplat.info



エントリが一致します。







したがって、通常は他のレコード( MX



など)が必要なので、 petekeen.net



などのルートドメインでCNAME



を実行することはできません。







他のサーバーへのリクエスト



DNS構成が破損していると想像してみましょう。 問題を修正したようですが、確認のためにキャッシュが更新されるまで待ちたくないようです。 dig



を使用するとdig



次のように、デフォルトの代わりにパブリックDNSサーバーにリクエストを送信できます。







 $ dig www.petekeen.net @8.8.8.8
      
      





IPアドレスまたはホストのある@



記号により、 dig



はデフォルトのポートを介して指定されたサーバーに要求を行います。 4.2.2.2



では、GoogleのパブリックDNSサーバーまたはレベル3に近いパブリックサーバーを使用できます







典型的な状況



多くのWeb開発者に馴染みのある典型的な状況を見てみましょう。







wwwへのドメインリダイレクト


多くの場合、 iskettlemanstillopen.com



ドメインをwww.iskettlemanstillopen.com



にリダイレクトする必要があります。 NamecheapやDNSimpleなどのレジストラは、このリダイレクトURLを呼び出します 。 Namecheap管理領域の例を次に示します。













@



記号はiskettlemanstillopen.com



のルートドメインを意味します。 このドメインのA



レコードを見てみましょう。







 $ dig iskettlemanstillopen.com ;; QUESTION SECTION: ;iskettlemanstillopen.com. IN A ;; ANSWER SECTION: iskettlemanstillopen.com. 500 IN A 192.64.119.118
      
      





このIPはNamecheapに属し、小さなWebサーバーがそこで回転し、HTTPレベルでアドレスhttp://www.iskettlemanstillopen.com



リダイレクトしhttp://www.iskettlemanstillopen.com









 $ curl -I iskettlemanstillopen.com curl -I iskettlemanstillopen.com HTTP/1.1 302 Moved Temporarily Server: nginx Date: Fri, 19 Jul 2013 23:53:21 GMT Content-Type: text/html Connection: keep-alive Content-Length: 154 Location: http://www.iskettlemanstillopen.com/
      
      





HerokuまたはGithubのCNAME



上記のスクリーンショットをご覧ください。 2行目にはCNAME



ます。 この場合、 www.iskettlemanstillopen.com



はHerokuで実行されているアプリケーションを指します。







 $ heroku domains === warm-journey-3906 Domain Names warm-journey-3906.herokuapp.com www.iskettlemanstillopen.com
      
      





Githubにも同様のストーリーがありますが、リポジトリのルートに特別なファイルを作成し、 CNAME



という名前を付ける必要があります。 ドキュメントを参照してください。







ワイルドカード



ほとんどのDNSサーバーはワイルドカードをサポートしています。 たとえば、 *.web01.bugsplat.info



指すワイルドカードCNAME



があります。 次に、 web01



上のホストはweb01



をポイントし、新しいエントリを作成する必要はありません。







 $ dig randomapp.web01.bugsplat.info ;; QUESTION SECTION: ;randomapp.web01.bugsplat.info. IN A ;; ANSWER SECTION: randomapp.web01.bugsplat.info. 300 IN CNAME web01.bugsplat.info. web01.bugsplat.info. 15 IN A 192.241.250.244
      
      





おわりに



DNSの基本的な理解ができたことを願っています。 すべての標準は、ドキュメントに記載されています。









DNSSEC



標準を説明する4034やDNSと電子メールの関係を説明する5321など、さらに興味深いRFCがいくつかあります。 それらは一般的な開発のために読むのが面白いです。








All Articles