一般的な DNS の概要

このページでは、ドメイン ネーム システム(DNS)の概要について説明します。

Cloud DNS の概要については、Cloud DNS の概要をご覧ください。 Cloud DNS に関連する主な用語については、主な用語をご覧ください。

DNS の一般的なコンセプト

DNS は、IP アドレスなどのデータを名前で照会できるようにする階層型の分散データベースです。

DNS はわかりやすいドメイン名のディレクトリで、このドメイン名が対応する数値の IP アドレスに変換され、コンピュータの通信に使用されます。たとえば、ブラウザに URL を入力すると、その URL は対応するウェブサーバーの IP アドレスに変換されます。DNS のディレクトリは、定期的に更新されるドメイン ネーム サーバーに保存され、世界中に分散しています。

以下では、DNS で重要なコンセプトについて説明します。

DNS サーバーの種類

DNS サーバーはドメイン名のデータベースを格納し、ネットワーク上のクライアントからの DNS クエリによりドメイン名を処理します。

権威サーバー
権威サーバーは、A、AAAA、CNAME などの DNS 名レコードを格納しているサーバーです。それ以外のサーバーにはキャッシュ ファイルが作成され、ドメインのクエリ結果が格納されます。ここには、元の名前レコードは保存されません。
再帰リゾルバ

再帰リゾルバは、名前解決のために権威サーバーまたは他のサーバーにクエリを送信するサーバーです。このサーバーは、特定の名前のクエリを実行して最終結果を返すため、再帰リゾルバと呼ばれています。これに対し、反復リゾルバは次に照会する DNS サーバーの参照のみを返します。

たとえば、「google.com」という名前を解決する場合、まず再帰リゾルバが「.」(DNS のルートゾーン)の権威サーバーを特定します。次に、「.com」の権威ネームサーバーに問い合わせを行います。最後に、「google.com」の権威ネームサーバーに問い合わせを行い、A レコードの rdata をクライアントに返します。

以下に再帰リゾルバの動作例を示します。dig +trace google.com を実行すると、再帰リゾルバは次のアクションを実行します(8.8.8.8/Google Public DNS がリゾルバです)。

dig +trace google.com
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> +trace google.com
;; global options: +cmd
.           168383  IN  NS  a.root-servers.net.
.           168383  IN  NS  b.root-servers.net.
.           168383  IN  NS  c.root-servers.net.
.           168383  IN  NS  d.root-servers.net.
.           168383  IN  NS  e.root-servers.net.
.           168383  IN  NS  f.root-servers.net.
.           168383  IN  NS  g.root-servers.net.
.           168383  IN  NS  h.root-servers.net.
.           168383  IN  NS  i.root-servers.net.
.           168383  IN  NS  j.root-servers.net.
.           168383  IN  NS  k.root-servers.net.
.           168383  IN  NS  l.root-servers.net.
.           168383  IN  NS  m.root-servers.net.
.           168383  IN  RRSIG   NS 8 0 518400 20190810170000 20190728160000 59944 .
ITqCp5bSKwoG1P76GpNfDanh4fXxOtHuld5SJzEm9ez0U/K7kpmBm4TE
cw82zuqtZlqiGOuq+90KHJEhD1fdX3FujgDqe3kaY/41LgFIo76RBeMP
CorYg29lKQOBf7pLPiJWewFmnLsRXsvENzxNXl9mynX80EQSS2YlCWpr
47i2j5SFpGDzmxls7LinB4VvwVLhy0FPwBaVc5NVqQoFS5ZkfKXCUz8x
urExPT2OtPJeDiGzrQGmT6vDbYZtJRWWGK5tPIKZQyF/08YSJlrjebNa
1nKZVN8SsO8s7elz6JGmdoM6D/1ByLNFQmKvU55ikaVSnXylqixLbJQI 7LyQoA==
;; Received 525 bytes from 127.0.0.1#53(127.0.0.1) in 22 ms

com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
com.            86400   IN  DS  30909 8 2
E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.            86400   IN  RRSIG   DS 8 1 86400 20190811170000 20190729160000 59944 .
KXPRdZspxd6hZYRFx3cj7Yp3d6HDzOG5CmoK46ZrrlKnZkCYMPKzyFQ2
15pA+jZ37MbQbhe6+S+C4AHWqv95DDsue85ha3ZmWGhnJxcLnDaL5Twp
Z/W/a+1cTHhhbMZua1riw74mqvzRAF1kVerj7jrvWnOAOZCh69Dr4AFJ
gRN4MAn+wCZDmPQCtkcGVJ9vyNV7Xra45B4ISqEo0xi8CXewp9cc+aW5
TSjFRhj1RM9d3k+3Mrq6AAV8dVgWofYTg6Ihph/SfoIx4TrTrEbgfdsv
MvuLPXvK6Y7oSh5WknbFduw7HQdo1jH3/QR54FORswBJT8VmYD7Zii88 tAjbRQ==
;; Received 1170 bytes from 192.58.128.30#53(j.root-servers.net) in 2 ms

google.com.     172800  IN  NS  ns2.google.com.
google.com.     172800  IN  NS  ns1.google.com.
google.com.     172800  IN  NS  ns3.google.com.
google.com.     172800  IN  NS  ns4.google.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 -
CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2
86400 20190803044434 20190727033434 17708 com.
rMmiNL7bYvJpB3Bc+WnqS2iiczm2PwxBvJcl7SL/vcTj88GsxM1ycTSV
PsHZHxfrv1dv2C5BCSZ+mzeVBu8upLoeraQy+UVf3VXyt3i3rNGzcXYV
8HSrHcXrRoAJopFim3Ge1xdZ+uERg3cTIcN2tJxxkCeqt/EcUTqtQl8t EAc=
S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN NSEC3 1 1 0 -
S84CFH3A62N0FJPC5D9IJ2VJR71OGLV5 NS DS RRSIG
S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN RRSIG NSEC3
8 2 86400 20190804045723 20190728034723 17708 com.
jypPsaWVop9rzuf70CFYyiK0hliiJ+YYtkjgb3HVj9ICc57kLmv9DkvG
DddF5GBQpqNEakzyJtya179MAdDT7RhJB4XfmY6fu5I5QTeIjchfP5wt
7gU1AL7cqTmBAo2RWu62vtUytV09+O3KGFq5O+Cwr11dSTfq1yYyw6YW cMI=
;; Received 772 bytes from 192.41.162.30#53(l.gtld-servers.net) in 2 ms

google.com.     300 IN  A   172.217.7.14
;; Received 55 bytes from 216.239.32.10#53(ns1.google.com) in 13 ms

各 DNS クライアントがネームサーバーにクエリを送信します。再帰リゾルバは他のネームサーバーにクエリを送信します。必要であれば、最上位のネームサーバーまで遡ります。リゾルバは、上位ネームサーバーにあるゾーンの NS レコードに従って別のネームサーバーを参照し、最終的にゾーンの情報を保存しているネームサーバーまたはそのゾーンの権威サーバーに到達します。

ゾーン

一般公開ゾーン
一般公開ゾーンはインターネットに公開されているゾーンです。一般公開ゾーンに DNS レコードを作成して、サービスをインターネットで公開できます。たとえば、公開サイト www.example.com. の A レコードを example.com. という一般公開ゾーンに作成します。
限定公開ゾーン
限定公開ゾーンとは、公共のインターネットから検索できないゾーンです。
委任サブゾーン
DNS では、ゾーンのオーナーが NS レコードを使用してサブドメインを別のネームサーバーに委任できます。リゾルバは、これらのレコードに従い、委任で指定されたターゲット ネームサーバーにサブドメインに関するクエリを送信します。
スプリット ホライズン DNS
スプリット ホライズンとは、同じドメインに 2 つのゾーンを作成し、1 つを内部ネットワーク用に、もう 1 つを外部ネットワーク(通常はインターネット用)に使用する状況を表します。DNS をスプリット ホライズンにすることで、同じ名前の問い合わせに対し、その照会元に応じて異なる情報(異なるリソース レコードセット)を返すことができます。たとえば、クエリの送信元が開発用のネットワークの場合は開発 / ステージング版のアプリを、クエリの送信元が公共のインターネットの場合は本番環境 / 一般公開版のアプリを返すことができます。

レコード

レコードは、DNS リソースとドメイン名のマッピングです。個々の DNS レコードは、タイプ(名前と番号)、有効期限、タイプ固有のデータから構成されます。よく使用されるレコードタイプは次のとおりです。

  • A: アドレス レコード。ホスト名を IPv4 アドレスにマッピングします。
  • AAAA: IPv6 アドレス レコード。ホスト名を IPv6 アドレスにマッピングします。
  • CNAME: 正規名レコード。エイリアス名を指定します。
  • MX: メール エクスチェンジ レコード。メールサーバーへのリクエストのルーティングに使用されます。
  • NS: ネームサーバー レコード。DNS ゾーンを権威サーバーに委任します。
  • PTR: ポインタ レコード。IP アドレスに対応する名前を定義します。
  • SOA: Start of authority の略。ゾーンのプライマリ ネームサーバーと管理者の指定に使用されます。DNS サーバーにホストされるゾーンごとに SOA レコードが必要です。レコードは必要に応じて変更できます(たとえば、シリアル番号を日付ベースのバージョニングをサポートする任意の番号に変更できます)。

レコードセット

名前とタイプが同じで、データ値が異なるレコードのセット。

レコードを作成するときに、同じ名前とタイプのセットが存在すると、そのセットにレコードが追加されます。一致するセットがない場合、新しいセットが作成され、レコードセットのリストに追加されます。

次にレコードセットの例を示します。名前とタイプは同じですが、データ値が異なります。

DNS 名 TTL(秒) データ
db-01.dev.gcp.example.com A 50 10.128.1.35
db-01.dev.gcp.example.com A 50 10.128.1.10

Cloud DNS でサポートされるレコードタイプのリストについては、サポートされる DNS レコードタイプをご覧ください。

サブドメインの委任

レコードを作成するときは、NS レコードと SOA レコードが一致していることを確認する必要があります。NS レコードと SOA レコードが競合していると、一部のリゾルバが委任を無効として拒否し、クエリに対する NO DATA レスポンスの格納を拒否することがあります。これにより、一般公開のマネージド ゾーンに対してサードパーティの再帰リゾルバが存在しないレコードを照会し、大量のクエリが発生する可能性があります。

例: example.comsubdomain.example.com という 2 つのサブドメインがあるとします。subdomain.example.com の NS レコードと SOA レコードが一致していません。どちらのゾーンにも AAAA レコードが含まれていません。一部のサードパーティの再帰リゾルバが subdomain.example.com に AAAA レコードを照会し、NO DATA レスポンスを受信したときに、リゾルバが subdomain.example.com の委任が無効であることを検出すると、そのゾーンの AAAA レコードの不在がキャッシュに保存されません。その結果、クエリが再試行されます。このため、Cloud Console のすべてのネームサーバーにクエリが送信されます。

登録事業者

ドメイン名登録事業者は、一般公開ゾーンのインターネット ドメイン名の予約を管理する組織です。登録事業者は、ジェネリック トップレベル ドメイン(gTLD)レジストリまたは国別コード トップレベル ドメイン(ccTLD)レジストリによる認可を受ける必要があります。これにより、上位のネームサーバーが SOA に同意し、ゾーンの NS レコードを更新して、リクエストをキャッシュまたは権威ネームサーバーに転送します。

SOA シリアル番号

SOA シリアル番号は DNS ゾーンのバージョン番号です。ゾーンのバージョンと一致するように、すべてのネームサーバーが同じ SOA シリアル番号になっている必要があります。DNS マネージド ゾーンで作成された SOA レコードのシリアル番号は、ゾーンのレコードセットに対するトランザクション変更が行われるごとに単調に増加します。SOA レコードのシリアル番号は任意の番号に変更できますが、RFC 1912 で推奨されている ISO 8601 形式の日付を含める必要があります。

DNSSEC

DNSSEC(Domain Name System Security Extensions)は、DNS データに対する脆弱性を解決します。これは IETF 仕様のセットで、DNS データ、不在証明、データの整合性の証明を DNS クライアント(リゾルバ)に提供します。DNSSEC により、DNS データの送信元を確認し、送信中に変更されていないことを検証できます。

DNSSEC の詳細については、RFC 4033をご覧ください。

その他の一般的な DNS 用語については、RFC 7719をご覧ください。