ネットワーク通信の流れを把握するDNS

【図解】初心者に分かりやすいDNSの仕組み〜GoogleのIP確認, 逆引きの必要性, レコードの種類等〜

DNSとは

DNS とは、文字列を IP アドレスに変換(およびその逆変換)をするクライアント/サーバシステムです。

この DNS のメリットは以下の2つです。

  1. あるサーバへのアクセスをする際に、『IP アドレス』という人間には覚えにくい番号の順列を覚える必要が無くなり、人間が覚えやすい『ドメインネーム』という意味の分かり易い文字列さえ覚えれば良くなる。
  2. 何らかの理由 (例えばサーバを更改するなど) でサーバの IP アドレスを変更する場合であっても、DNS サーバの情報 1 つを変更すれば、全てのクライアントにその情報が伝搬され、今までと違う IP アドレスのサーバに対し、今までと同じドメインネームでアクセスできる

ドメインネームとは

インターネット上では、各ホストは IP アドレスで表現されますが、数字の羅列というのは人間にとっては意味を見出しにくく、 覚えにくいものです。

そこで、IP アドレスを人間に分かり易い文字列に変換する仕組みを作りました。それが前述の DNS であり、人間に分かり易い文字列というのがドメインネーム (正式名称 FQDN: Full Qualified Domain Name) です。

ドメインネームは IP アドレスと同様、世界で一意である必要があるため、ICANN という組織が管理しています。

例えば、www.google.co.jp というドメインネームがありますが、jp というのは JPNIC が管理しており、co.jp は日本の企業に対して割り当てられるドメインです (co は商業を意味する commercial の略。.comドメインも、JPNIC の管理外ですが、commercial を意味します)。

その他にも、network を意味する ne.jpドメイン、organization を意味する or.jp、academic (学校法人等) を意味する ac.jp ドメインなどがあります。

取得する際には申請が必要ですが、申請したからといって必ず割り当てられるでもありませんし、学校法人だから必ず ac.jp を取らなければならない、というわけではありません。例えば早稲田大学は ac.jp だけではなく、waseda.jpドメインも取得して運用しています。

DNS サーバはどこにある?

DNS サーバには 2 種類あります。1 つは名前解決をするための『キャッシュサーバ』、もう1つは自らが管理するドメインの『権威サーバ』です。

権威サーバは各企業等のドメイン保有組織が自ら構築してインターネットに公開するか、もしくは ISP (ぷららや OCN 等) やドメイン登録サービス (お名前.com やムームードメイン等) のドメイン管理サービス業者に管理してもらう方法があります。

一方、名前を解決するだけの『キャッシュサーバ』は各所にあります。大きく分類すると以下の3か所でしょう。

  1. 家庭用ブロードバンドルータ
  2. 各企業や組織が自ら構築したキャッシュサーバ
  3. ISP 業者や CDN 業者等がインターネット公開しているキャッシュサーバ

一般家庭であれば家庭用ブロードバンドルータが自動で DNS サーバになることが多いです。これについては以下も併せてご参照下さい。

【図解】DNSプロキシ(DNSフォワーディング、DNSリレー)の中継機能の仕組み、ciscoでの設定例
DNSプロキシ(DNSフォワーディング、DNSリレー)とは DNS プロキシとは...

企業等の組織は権威サーバだけでなくキャッシュサーバも別のサーバとして構築していることが多いです。

最後の ISP 業者や CDN 業者についてですが、有名なものとしては以下があります。

  • CloudFlare (CDN 業者) : 1.1.1.1 / 1.0.0.1
  • Google (検索エンジン業者) : 8.8.8.8 / 8.8.4.4
  • ぷらら (ISP 業者) : 220.220.248.2 / 220.220.248.10

DNSの機能、レコードについて

DNS サーバには、登録されている情報には『レコード (正式にはリソースレコード:RR)』という識別があります。レコードは DNS の機能によって分類されています。DNS でよく使われるレコード(機能)として、以下のものがあります。

  • A レコード = インターネット上のホームページの URL から IP アドレスを調べる。(正引き)
  • MX レコード = メールアドレスの宛先から、宛先のメールサーバの IP アドレスを調べる。
  • NS レコード = 上位層の DNS サーバから、下位層の DNS サーバを調べる。
  • PTR レコード = IP アドレスからドメインネームを調べる。(逆引き)

Aレコードの使われ方

一般的によく使われるレコードです。ブラウザで URL を入力した場合は A レコードの問い合わせが行われます。

上記の機能を、以下手順で Windows のコマンドプロンプトから DNS を利用して確認してみましょう。

・Windowsキー + R
・cmd [Enter]

まず、Google の IPアドレスを調べてみましょう。コマンドプロンプトで以下のように打ちます。

C:\> nslookup www.google.co.jp

2 つ表示されていますが、1 つ目の IP アドレス「2404:6800:400a:806::2003」というのは IPv6 のアドレスです。

そして 2 つ目の IP アドレス「216.58.196.227」が IPv4 のアドレスです。

次に、www.yahoo.co.jp の IP アドレスを調べてみましょう

C:\>nslookup www.yahoo.co.jp


4 つのアドレスが出てきましたが、これはサーバを負荷分散させているためです。いずれか 1 つをブラウザの URL 欄に入力してみましょう。Yahoo!JAPAN のサイトが見れるはずです。

このように、ドメインネーム (FQDN) から IP アドレスに変換することを正引きと言います。

MXレコードの使われ方

MX レコードはメール送信に使われます。メールアドレスの @ 以降の文字列 (ドメイン) の MX レコードを問い合わせると、そのメールの送信先ホスト名とその IP アドレス (A レコード) を示してくれます。

例として「~~@yahoo.co.jp」宛にメールを送る際のメールサーバの IP アドレスを調べましょう。メールにおいては基本的に@以降のドメインネームによってメールサーバが決まります。

同じくコマンドプロンプトで「nslookup -type=mx yahoo.co.jp」と打ちます。

MX preference というのはメールサーバを利用する際の優先度です (MX preference 値が小さいほど優先度が高いです) 。今回は全て 10 なのでどれか 1 つを選べばよいです。ここでは mx2 に送ることとしますが、mx2 はホスト名なので、IP アドレスへ名前解決します。

例えば、abcd@yahoo.co.jp というメールアドレスにメールを送信すると、相手方のメールサーバに届き、abcd というアカウントがあれば、そのアカウントのメールボックスにメールが届くわけです。ただし、そのアカウントがない場合は、メールは破棄され、送信元にはエラーメールが通知されます。

NSレコードの例

NS レコードはそのドメインを管理している DNS サーバがどこにあるかを示してくれます。主にサブドメインを管理するサーバを指定します。

例えば .co.jp は .jp のサブドメインですので、.jp の管理サーバには .co.jp の NSレコードが格納されます

NSレコードの具体例、詳細については、以下ページを参照して下さい。

【図解】DNSクエリの仕組み,通信フロー 〜グルーレコード,コンテンツ,キャッシュ,フルリゾルバ,フォワーダ,ルートヒントについて~
一般的なDNSクエリ/レスポンスの通信フロー ホームネットワークの構成例 ホーム...

PTRレコードの例

IP アドレスからドメインネームに変換することを「逆引き」と言います。A レコードの例で表示された 4 つの IP アドレスを nslookup で逆引きしてみます。

それぞれに対してサーバのホスト名が出てきました。

逆引きの必要性、用途とメリット/デメリット、セキュリティ

逆引きは正直あまり必要性はありません。正引きと整合性を取らないと通信に支障をきたす、ということもありません(最後に示すようにセキュリティ機能として使っている場合を除く)。

ではどのようなシーンで使われるのかというと、例えば tracert ではデフォルトで応答した IP アドレスを逆引きしてホスト名を表示する設定になっています。これにより通過する IP がどのドメインに所属する、何という名前の機器なのか、というのを見ることができます。

以下の例では 118.238.227.1 という IP アドレスは nuro.jp が保有していることが分かります。(逆引きのレコードが無い IP については『4th octet,3rd octet,2nd octet,1st octet.in-addr.arpa』という表示になります。)

このように、逆引きはその IP がどのドメインに所属するのか、もしくは何という名前の機器なのかを表示し、人間に直感的なヒントを与えるというメリットがあります。ですが、その分表示を遅くするというデメリットもあります。

上図の下半分では tracert に -d オプションを付けて実行していますが、これにより逆引き変換しないため、応答も早くなります。

また、逆引きはセキュリティ機能として使われることもあります。例えばメールサーバとして有名な postfix ではスパムメール防止のために、SMTP 接続してきた送信元IPの逆引きの問い合わせを行い、逆引き結果を得られた場合のみメールを転送する、という仕組みがあります。

その他のレコード

その他のレコードとしては以下があります。

SRV レコード

あるサービスを使う際の問合せ先を示します。例えば ActiveDirectory では SRV レコードにKerberos 認証や LDAP 問合せのサービスを使う問合せ先として、ドメインコントローラを指定しています。ドメイン参加している機器はログイン時にこの SRV レコードを引き、結果ドメインコントローラに Kerberos 認証を要求します。

より詳細は以下をご参照下さい。

【図解】初心者向けDNSのSRVレコードとAD冗長化の仕組みと使い方 ~優先順位と重さ,フォーマット~
Active Directory と DNS の関係 Active Direct...

TXT レコード

TXT レコードは汎用的な補足情報を載せます。例えばメール偽装を防ぐ DKIM 等はこのレコードを使っています。 DKIM 等のメール偽装防止技術については以下をご参照下さい。

【図解】DKIM, SPF/SenderIDの仕組みと違い ~DNSを使った公開鍵デジタル署名の送信元ドメイン認証技術〜
そもそも送信元メールアドレス偽装は簡単 メール送信はご存知の通り、SMTP プロ...

OPT レコード

OPT レコードは正式には『OPT 擬似リソースレコード』と呼ばれており、DNS パケットの中でもレコードを示す位置には定義されておらず、拡張領域に存在します。

この OPT レコードは 512 バイトより大きいサイズの UDP を使った DNS パケットを扱うEDNS0』という DNS バージョンをサポートするかどうかを問合せするために使われます。

この背景には歴史があります。1981年に公開された RFC791 で『IPv4 は 576バイトまでのパケットは必ず受信すること』というリクエストがあり、それを踏まえ RFC883 では『UDP を使った DNS パケットのサイズは 512 バイトまで』という上限が設けられました。

しかし時代は移り、情報は大容量に、通信は超高速になり『UDP を使った DNS のサイズが 512 バイトまで』という制約 (いわゆる『512 バイトの壁』) が邪魔になりました。特にセキュリティ技術の DNSSECIPv6 に関する名前解決はおおよそ 512バイトでは収まらないことが分かりました。

そこでルールを変更し、512 バイト以上の UDP による DNS を許容する動きが出たのですが、その際に互換性を保つために、EDNS0 に対応した DNS クライアントはこの OPT レコードで要求先 DNS サーバに対して『EDNS0 に対応しているか』を聞く動作を行うことにしました。

【図解】UDPのMTU/MSSやフラグメント(パケット分割),サイズの考え方,EDNS0やQUICの例
前提知識 TCP と MTU/MSS に関する基礎知識については以下をご参照下さ...

なお、DNSSEC や IPv6 の問い合わせはこの EDNS0 をサポートすることが必須となっています。

コメント

  1. 通りすがり より:

    インターネットの仕組みを知りたくて
    DNSについて調べていました。

    他のサイトは文字だけは多いんだけど
    内容が良くかからなかったり、
    人に伝えるのが上手くない文章だったり
    そもそも書き手が理解出来ていない、誤解しているのだろうなぁ
    と思える内容ばかりで苦痛だったのですが

    こちらは核心を突いた内容と
    分かりやすくて適量な図解と文章のおかけで
    物凄く分かりやすかったです。

    管理人さんはきっと良いエンジニアさんなんだと思います。

    • nesuke より:

      コメントありがとうございます。このような言葉を頂けるのが本当に嬉しいですし励みになります。
      正直、図を作るのが大変だったりするので、文章だけで説明してしまおうかな、と考えてしまうこともあるのですが、私が目指すところ『本質を分かり易く解説する技術サイト』を実現すべく、襟を正し、これからも頑張りたいと思います。

  2. CNAME より:

    とてもわかりやすい記事ありがとうございます。
    「MX DNS 初心者」のキーワードで1位に出てくるのも納得です。
    CNAMEについても触れて頂けるとありがたいです。
    spfもなかなかわかりやすい記事が少ないので、扱って頂けると嬉しいです。
    応援しています!

    • nesuke より:

      コメントありがとうございます!お役に立てたようで何よりです。
      CNAME については単にエイリアスですのであまり書くことないかなぁ、と思っていて。MX絡みで言うと、MX で指定したホスト名を、CNAME でエイリアス指定してはいけない (CNAME のホスト名に対してメールは投げない)、というのがありますが。。

      SPFについては以下の記事を書いておりますので、もしよろしければご参照いただき、何か気になる点や分かりにくい点などありましたらまたコメント下さい!
      https://milestone-of-se.nesuke.com/l7protocol/smtp/dkim-spf-senderid/

  3. ぷーーー より:

    どのDNSサーバを見に行くかや、そのサーバに見つからない場合の動作も追記して頂けると分かりやすいと思った。

タイトルとURLをコピーしました