【図解】初心者に分かりやすい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リレー)とは DNS プロキシとは、『自分はDNSによる名前解決機能を持っていないけど、DNS サーバの IP は知っているので、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通信フローを以下に示します。 PCから見たとき(赤文字・赤線)は1往復だけですが、その背後にはキャッシュ状況に応[…]

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 認証を要求します。

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

関連記事

Active Directory と DNS の関係 Active Directory では DNS サーバが必須です。というのも、AD 環境下では Kerberos Version5 が使われており、この規格ではクライアント PC は認[…]

TXT レコード

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

関連記事

そもそも送信元メールアドレス偽装は簡単 メール送信はご存知の通り、SMTP プロトコルを使って行います。 SMTP では、送信元メールアドレスを記述する場所が 2 か所あります。1 つは、TCP コネクションを確立した後、"HELO[…]

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 に対応しているか』を聞く動作を行うことにしました。

関連記事

前提知識 TCP と MTU/MSS に関する基礎知識については以下をご参照下さい。 [sitecard url=https://milestone-of-se.nesuke.com/nw-basic/grasp-nw/mtu-ms[…]

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

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG