この記事(全2回)では、インターネットで使われているDNS(ドメイン・ネーム・システム)という技術について解説いたします。
DNSは、ネット検索や記事閲覧に必ず関わる名前解決の他、ネット上の人物の特定や、負荷分散、冗長化などでも用いられる、とてもベーシックな技術です。
- インフラ系のエンジニアになりたい方
- IT営業で話の幅を広げたい方
- ブログやECサイトなどのネットビジネスに携わる方
- とにかくITの教養を身につけたい方
このような人達にオススメの記事です。
DNSをちゃんと理解している人とそうでない人では、IT関連の業務では大きな差がつきます!(断言)
是非ともご覧ください。
【本シリーズ】
目次
前回のおさらい
前回の記事では、
- DNSの主な機能:名前解決
- ドメインの命名規則と階層構造
- ドメイン名の管理
- アドレスバーに表示される文字列
を解説しました。
今回はその続きで、DNSを実装するサーバの働きや、通信の流れなどを解説します。
DNSサーバは2種類ある
DNSサーバには、コンテンツサーバ(権威サーバとも呼ばれる)とキャッシュサーバ(リゾルバとも呼ばれる)の2種類があります。
両方ともDNS機能を実現するサーバですが、それぞれ全く別の働きでDNSの一翼を担うサーバです。
DNSサーバについて会話をしているときには、コンテンツサーバがキャッシュサーバのどちらについての話かを必ず確認しましょう!ここをちゃんと把握していないと話が噛み合いません。
よくわかっていない人同士がどっちのDNSサーバか分かってない状態で会話をすると、たいていは悲惨な結末になりますw
コンテンツサーバ(権威サーバ)
コンテンツサーバの主な機能は、
ドメイン名とIPアドレスの対応情報を持ち、問い合わせに回答する
です。
イメージを図で表現すると以下の通りです。
もう一つの主な機能として、
サブドメインを管理している別のコンテンツサーバのIPアドレス情報を持ち、問い合わせに回答する
というものもあります。
こちらのイメージ図は以下の通りです。
キャッシュサーバ(リゾルバ)
キャッシュサーバの機能は、
コンテンツサーバに問い合わせ、IPアドレス情報を保持し、他のコンピュータ(主にパソコン)からの問い合わせに回答する
です。イメージ図は以下の通りです。
図の通り、端末からキャッシュサーバに問い合わせがあると、キャッシュサーバはコンテンツサーバに問い合わせます。そして、コンテンツサーバから取得した回答を保持し、端末に回答します。
家庭のインターネットでは、プロバイダがキャッシュサーバを用意し、各家庭のパソコンからの問い合わせに回答しています。
企業などのインターネットでは、企業が自前のキャッシュサーバを用意するケースが多く、企業内のパソコンなどからの問い合わせに回答しています。
なぜ、個々のパソコンが直接コンテンツサーバに問い合わせないのかというと、通信量の問題です。
DNSは世界中のコンピュータが利用するので、その全てをコンテンツサーバで処理しようとすると、効率が悪く、とんでもない通信量になってしまいます。
インターネット上の通信量を節約するために、キャッシュサーバが情報を保持し、配下のコンピュータなどからの問い合わせに回答しているのです。
DNSレコードとは
DNSレコードとは、
コンテンツサーバに設定する、ドメイン名とIPアドレスなどの対応情報
です。
レコードは、1行で1つの情報を表します。
そして、レコードが書いてあるテキストファイルを、ゾーンファイルと呼びます。コンテンツサーバは複数行のレコードが書いてあるゾーンファイルを持ち、そのゾーンファイルの内容に従い稼働します。
レコードには色々な種類があり、ドメイン名のIPアドレスを表すものや、他のコンテンツサーバのIPアドレスを表すものなどがあります。主なレコードの種類は以下の通りです。
Aレコード | ホスト名(文字列)とIPアドレスの対応を表す。IPv4用 |
AAAAレコード | ホスト名(文字列)とIPアドレスの対応を表す。IPv6用 |
NSレコード | 別のNS(ネームサーバ、つまりはコンテンツサーバ)のサーバ名を表す。 |
CNAMEレコード | ホスト名の別名を表す。 |
MXレコード | メールサーバのホスト名を表す。 |
レコードの記載例(簡易版)は以下の通りです。
- Aレコードで pgapp.net のIPアドレスを指定しています。
- Aレコードでメールサーバ(mail.pgapp.net)のIPアドレスを指定しています。
- Aレコードで別のDNSコンテンツサーバのIPアドレスを指定しています。
- MXレコードで「@pgapp.net」宛のメールは、メールサーバ「mail.pgapp.net」宛に転送することを指定しています。(②のAレコードとセットで初めて機能します)
- CNAMレコードで「www.pgapp.net」の問い合わせには、「pgapp.net」と同じIPアドレスを回答することを指定しています。(pgapp.net の別名:www.pgapp.net という意味)
- NSレコードで「pgapp.net ドメインの情報は、ns.pgapp.net というコンテンツサーバが持っています」ということを明示しています。(③のAレコードとセットで初めて機能します)
なお、緑の枠で囲った IN という文字ですが、これはインターネットを指しています。DNSという技術は、元々インターネット専用に開発された技術ではないので、各レコードでインターネットで利用することを明示しているのです。
DNSで名前解決を実施したときの各機器の挙動
ここで、実際にDNSを利用して名前解決を実施したときの各機器の挙動を確認してみましょう。
キャッシュサーバが該当のアドレス情報を持っていない場合
各機器は順番に下図のように挙動します。
順に解説していきます。
- 端末が「www.pgapp.co.jp のIPアドレスを教えてください」というDNSリクエストをキャッシュサーバに送信。
- キャッシュサーバは、自身に設定してあるDNSルートサーバ宛のIPアドレスを参照し、DNSルートサーバにDNSリクエストを送信。
- DNSルートサーバは、自身に設定されているNSレコードの記載に従い、 jp ドメインを管理するコンテンツサーバのIPアドレスをキャッシュサーバに回答
- キャッシュサーバは、取得した jp コンテンツサーバのIPアドレスを参照し、 jp のコンテンツサーバにDNSリクエストを送信。
- jp コンテンツサーバは、自身に設定されているNSレコードの記載に従い、co.jp ドメインを管理するコンテンツサーバのIPアドレスをキャッシュサーバに回答。
- キャッシュサーバは、取得した co.jp コンテンツサーバのIPアドレス宛にDNSリクエストを送信。
- co.jp のコンテンツサーバは、自身に設定されているNSレコードの記載に従い、pgapp.co.jp ドメインを管理するコンテンツサーバのIPアドレスをキャッシュサーバに回答。
- キャッシュサーバは、取得した pgapp.co.jp コンテンツサーバのIPアドレス宛にDNSリクエストを送信。
- pgapp.co.jp コンテンツサーバは、自身のAレコードの記載に従い、www.pgapp.co.jp のIPアドレスをキャッシュサーバに回答。
- キャッシュサーバは、取得した www.pgapp.co.jp のIPアドレスを端末に回答。同時に、キャッシュサーバの内部に取得したIPアドレス情報を一時的に保持(キャッシュ)。
キャッシュサーバが該当のアドレス情報を持っている場合
下図をご覧ください。
こちらはシンプルです。
- 端末がDNSリクエスト「www.yahoo.co.jp のIPアドレスを教えてください」というDNSリクエストをキャッシュサーバに送信。
- キャッシュサーバは自身が保持しているIPアドレス情報を端末に回答。
これだけで端末は必要な情報を得ることができます。コンテンツサーバは使われませんので、コンテンツサーバの負担が軽減されます。
Windows端末でDNSリクエストを実行する
DNSはよく使われる基礎的な技術ですので、お使いのWindows端末でも利用可能です。
ここでは、nslookupというとても簡単なコマンドを使ってのDNSの利用方法を解説します。
手順は以下の通りです。
Windows左下の検索欄で「cmd」と入力しEnter
出てきたコマンドプロンプトで、「nslookup pgapp.net」と入力しEnter
こちらでIPアドレスを参照できます。
なお、「権威のない回答」というのは、キャッシュサーバの回答(コンテンツサーバの回答ではない)という意味です。
Whois情報について
DNSの機能の一部として、Whoisというシステムがあります。
インターネット上でグローバルIPアドレスやドメイン名を利用する者は、前回の記事で紹介したICANNやその下部組織などに、一定の情報を提供することが義務付けられています。
その一定の情報を参照するためのシステムがWhoisです。
Whois情報を提供しているサイトは沢山ありますが、ここでは使い勝手のいい以下のサイトを取り上げます。
https://tech-unlimited.com/whois.html
こちらで試しにnta.go.jp(国税庁)の情報を検索してみました。
結果は以下の通りです。
※実はもっと詳細な情報が表示されましたが、少々長くなるので省いてあります。ご興味があれば自身で検索してご覧ください。
ドメイン利用者は、このような一定の情報を提供する義務があり、わたしもあなたもみんなが参照できるというわけです。
DNSの逆引きについて
DNSの逆引きとは、
IPアドレスからドメイン名を参照する
ことです。通常のドメイン名からIPアドレスを取得することとは文字通り逆です。
例えば、12.3.45.167 のアドレスを逆引きする場合には、まず、「12」のコンテンツサーバに問い合わせ、続いて「12.3」のコンテンツサーバに問い合わせ・・・ということを繰り返し、最終的にドメイン名を取得します。
通常はあまり使うことはありませんので、この記事では深くは取り上げませんが、大事なことだけ書きます。それは、
- 正引きと逆引きでは、全く別のデータベースを使っている
- よって、正引きと逆引きで、情報が一致しないこともある
ということです。
例えば .jp ドメインであれば、正引きのドメイン登録とは別にJPNICに登録を申請し、登録します。この申請をちゃんとしていなければ、逆引きができないわけです。
逆引きができないということはちゃんと登録をしていないということですので、怪しい業者だと思われたり、通常のメールでも迷惑メールと判定されたりする可能性が上がります。
初めて名前を聞いた会社がちゃんとした会社か判断するために、参考情報として検索してみるのもいいかもしれません。
DNS障害を見分ける方法
DNSの障害を見分ける簡単な方法を一つ紹介します。
まずは、「Windows端末でDNSリクエストを実行する」の項目で上げた方法で、該当サイトのIPアドレスを取得します。
nslookup で回答があれば、DNS自体は稼働しています。
その後、該当アドレス宛にpingを打ちます。
応答がなければ、サーバ自体が稼働していない可能性が高いです。
応答があれば、サーバは生きている可能性が高く、ページのデータが欠損しているなどの原因が考えられます。
ただ、大抵の場合は障害対応窓口宛に連絡するのが一番です。
メールなどで問い合わせする際には、起こった症状の他に、実施した切り分け(上記のpingなど)の内容を記載するのもいいかもしれません。
まとめ
この記事では、
- 2種類のDNSサーバ
- DNSレコード
- DNS名前解決時の各機器の挙動
- Whois情報
などについて解説しました。
繰り返しになりますが、DNSは今日のインターネットのベースとなる技術ですので、覚えておいて損はありません。
この記事を読むなどの、ちょっとした努力の積み重ねが長期的には一番効いてきます。
ここまでお読みいただいたあなたであれば、おそらくは成長しているはずです!
この記事が、皆様の技術力向上に役立てれば幸いです。
それでは (*゚▽゚)ノ