オッス、おらタイン!
今回は普段ネットを使ううえであまり意識しないけど重要なドメインについてのあれこれをお話します。
それではどうぞ〜
(オラワクワクしてきたぞ!!)

概要

DNSもしくはドメインネームシステムは、ドメイン名とIPアドレスのマッピング情報を格納する様々なサーバー上にある分散データベースです。 DNSはドメイン名をIPアドレスに変換し、またその逆も行います。

下記はDNSのアクティビティ図です。

alt text

DNSの幾つかの概念

ドメインネームスペース

以下の通り、ドメインスペース全体を含めるツリー構造です。

ドメイン

ドメインネームスペースの一つのブランチです。次のように「purdue.edu」ドメインの例です。

ドメイン名

ツリーのノードにはラベルがあります。ツリーの任意ノードのドメイン名はそのノードからルートノードまでのパスのラベル順序です。各ノードのラベルは「.」で区切られます。

リソースレコード

ドメイン名の情報がリソースレコードに格納されます。各リソースレコードは特定の対象情報を格納します。DNSサーバーはこれらのレコードを使用してDNSクエリに応答します。下記ようにいくつの一般的なリソースレコードです。

  • SOA – Start of authority: 管理ゾーン情報が格納され、各ゾーンにはーつのSOAレコードしかない
  • NS – Name server: ドメイン名をネームサーバー一覧とのマッピングを格納する
  • A: ドメイン名をIPとのマッピングを格納する
  • PTR – Reverse-lookup pointer: IPをドメイン名とのマッピングを格納する
  • MX – Mail exchange: ドメイン名をメールサーバー一覧とのマッピングを格納する。例えば、「contact@example.com」にメールを送信すると、メールがMXレコードに指定されたメールサーバーに送信される
  • CNAME: ドメイン名を別のドメイン名とのマッピングを格納する

トップレベルドメイン

DNSシステムのルートドメインの下にある最上位のドメインです。トップレベルドメインは二つの主なカテゴリに分けられます。

  1. Generic TLD (gTLD)
  2. Country Code TLD (ccTLD)

gTLDについて、次のような幾つの例です。

  • .com: コマーシャル団体向け
  • .org: 非営利団体向け
  • .edu: 学校や教育団体に限定
  • .net: 元々はインタネットインフラストラクチャに限定されましたが、現在は限定していません。

ccTLDについて、次のような幾つの例です。

  • .us: United States
  • .ja: Japan
  • .in: India
  • .uk: United Kingdom
  • .vn: Vietnam

下記がDNS階層のイメージです:

DelegationとAuthority

DNSシステムの主な目的の一つは管理の分散です。これはdelegation(権限委譲)を使用することによって実現しています。

ドメイン管理機関は「Authority」と呼ばれます。ルートドメインとgTLDの管理機関はICANNです。ccTLDのドメイン名は国によって管理されています。

ドメイン管理組織はそれをサブドメインに分割することができます。 各サブドメインは他の組織への管理を承認できます。 たとえば、「standford.edu」ドメインをStandard Universityへの管理に承認します。

ネームサーバーとゾーン

ネームサーバーはドメインに関するリソースレコードとそのサブドメインのネームサーバー情報を格納するサーバーです。 ネームサーバは普通にゾーンと呼ばれるドメインネームスペースの一部についての全て情報だけを含んでいます。

注意: ルートネームサーバーはルートドメインのネームサーバーです。

次のようにeduドメインをberkeley.eduゾーン、purdue.eduゾーンおよびnwu.eduゾーンに分割しました。そして「edu」もゾーンです。

DNS Resolver

DNSシステムのクライアント側がDNS Resolverです。DNS ResolverはDNSクエリを初期し、送信します。

DNSクエリ

DNSクエリは三つの種類があります。
– Recursive query: 再帰クエリ
– Iterative query: 繰り返しクエリ
– Inverse query: 指定したIPアドレスのドメイン名をクエリする

以下は rutgers.eduのようなドメイン名解決を実行する際の手順です。

  • ResolverはローカルDNSにクエリを送信する
  • DNSローカルはデータベースで rutgers.eduを検索する。ある場合、IPアドレスをResolverに返す。ない場合は、次の手順を進める。
  • Resolverは、ルートネームサーバにクエリDNSを送信する
  • ルートネームサーバは.eduドメインのネームサーバにDNSクエリの解決を任せる
  • .eduドメインのネームサーバはrutgers.eduドメインのネームサーバにDNSクエリの解決を任せる
  • ResolverにAレコードから取得したIP情報を返す

DNSを使用する、幾つかのヒント

hostsファイルを使用し、DNSロカールを構成する

私は、顧客が二つのサーバー(旧サーバーと新サーバー)上に下記の例のように、同じウェブサイトの構成を設定しているというケースに遭いました。

  • example.comドメイン名をサーバーAのIPと紐づく
  • サーバーAとサーバーBの両方がWebサーバー上で同じserver_name = example.comで設定している

それでは、サーバーBの example.comウェブサイトにアクセスするにはどうすればいいのでしょうか?

その時、以下の設定をLinux系又はMacの「/etc/hosts」パスのhostsファイルに追加します。

サーバーBのIPアドレス example.com

注意: Hostsファイルは、ドメイン名をIPアドレスに解決するためのリソースレコードとして使用されます。

ブラウザにexample.comを入力すると、サーバーAではなくサーバーBのexample.comウェブサイトに遷移します。設定が正しく動いているかを確認するには、ブラウザのDevelop Toolsを開く、リクエストのヘッダ情報を確認すると、次のようになります。

Request URL: https://example.com/
Request Method: GET
Status Code: 200 OK
Remote Address: SERVER_ADDRESS
Referrer Policy: no-referrer-when-downgrade

ドメイン名を構成する

ウェッブサイトが機能するためには、ドメイン名をそのWebサイトに紐付ける必要があります。 これを実行するには二つの方法があります。

  • ドメイン名をウェブサイトのサーバーのIPアドレスに直接紐付ける

または
– ドメイン名にサーバー提供元のネームサーバーを追加する

設定が完了したら、次のツールを使用してドメイン名の設定情報を確認できます。

CNAMEレコードを使用する

同じサーバー上に二つのウェブサイトexample.comexample.jpがあるとします。 その後、二つのドメイン名を同じIPアドレスに設定できますが、サーバーを移行するなどIPが変更する場合、上記の二つのドメイン名を両方に新IPに再設定する必要があります。

しかし、下記の例のようにドメイン名example.jpをドメイン名example.comに指すなどのCNAMEレコードを使用する場合、その時example.comドメイン名のみIPの変更を設定する必要があります。

NAME TYPE VALUE
---------------------------------------
example.jp. CNAME example.com.
example.com. A 192.0.2.23

最後

それでは今回はここまで!
また次回も見てくれよな!
(ロマンティクあげるよ〜♪)

参考資料

https://web.deu.edu.tr/doc/oreily/networking/dnsbind/
https://www.thegeekstuff.com/2013/12/dns-basics/

投稿者プロフィール

クオン タイン