初心者向けDNS解説:インターネットの電話帳
· 12分で読めます
📑 目次
ブラウザにウェブサイトのアドレスを入力するたびに、DNS解決と呼ばれる複雑だが超高速なプロセスが舞台裏で行われています。DNSを理解することは、開発者、システム管理者、または単に日常のウェブブラウジングを支える技術に興味がある方にとって、インターネットの仕組みを理解する上で基本となります。
この包括的なガイドでは、DNSの謎を解き明かし、その仕組みを探り、一般的な問題をトラブルシューティングするための実践的な知識を提供します。最後には、なぜDNSがインターネットの最も重要なインフラストラクチャと呼ばれるのかを理解できるでしょう。
DNSとは?
DNS(ドメインネームシステム)は、インターネットの電話帳のようなものです。人間が読める形式のドメイン名(google.comなど)を、コンピュータが相互通信に使用するIPアドレス(142.250.80.46など)に変換します。DNSがなければ、訪問したいすべてのウェブサイトの数値IPアドレスを記憶しなければなりません。
Facebookが157.240.241.35、Amazonが205.251.242.103であることを覚えようとすることを想像してみてください。現代のインターネットをナビゲートすることはほぼ不可能でしょう。DNSは、記憶しやすい名前を機械が読める形式のアドレスにマッピングする分散データベースを作成することで、この問題を解決します。
DNSシステムは1983年にポール・モカペトリスによって発明され、インターネットインフラストラクチャの最も重要なコンポーネントの1つとなりました。毎日数十億のクエリを処理し、回復力があり拡張可能な分散型の階層システムとして動作しています。
クイックヒント:DNSはドメイン名をIPアドレスに変換するだけではありません。メールルーティング、サービスディスカバリー、その他さまざまなインターネットプロトコルも処理します。ほとんどの人が認識しているよりもはるかに多用途です。
DNSの仕組み:ステップバイステップ
ブラウザにURLを入力すると、ミリ秒単位で洗練された一連のイベントが展開されます。完全なDNS解決プロセスは次のとおりです:
- ブラウザキャッシュのチェック:ブラウザはまず、最近このドメインを検索したかどうかを確認するために、独自のDNSキャッシュをチェックします。最新のブラウザはパフォーマンスのためにDNSレコードをキャッシュします。
- オペレーティングシステムのキャッシュ:ブラウザキャッシュにヒットしない場合、オペレーティングシステムがDNSキャッシュをチェックします。WindowsとmacOSの両方が独自のDNSキャッシュを維持しています。
- ルーターキャッシュ:家庭やオフィスのルーターも、ネットワークトラフィックを削減し応答時間を改善するためにDNSクエリをキャッシュする場合があります。
- 再帰リゾルバーへのクエリ:どのキャッシュにも答えがない場合、コンピュータはDNS再帰リゾルバー(通常はISPまたはGoogleやCloudflareなどのパブリックDNSサービスによって提供される)に接続します。
- ルートネームサーバーへのクエリ:再帰リゾルバーは、13のルートネームサーバークラスター(AからMまでラベル付けされている)の1つに、
.com、.org、.netなどのトップレベルドメイン(TLD)に関する情報をどこで見つけられるかを尋ねます。 - TLDネームサーバーへのクエリ:ルートサーバーはTLDネームサーバーのアドレスで応答します。次に、リゾルバーは特定のドメインの権威ネームサーバーについてTLDネームサーバーにクエリします。
- 権威ネームサーバーへのクエリ:TLDサーバーは、そのドメインの実際のDNSレコードを保持するドメインの権威ネームサーバーにリゾルバーを誘導します。
- 最終応答:権威ネームサーバーはIPアドレスを返します。リゾルバーはこの情報をキャッシュし、コンピュータに送り返します。
- 接続確立:ブラウザはIPアドレスを取得し、ウェブサーバーへの接続を確立できるようになります。
このプロセス全体は通常20〜100ミリ秒かかりますが、キャッシュによってはるかに高速になる場合があります。DNSの分散型の性質により、1つのサーバーが故障してもシステムは機能し続けます。
プロのヒント:Linux/Macではdigコマンド、Windowsではnslookupを使用して、このプロセスを実際に確認できます。dig +trace google.comを実行して、完全なDNS解決パスを確認してみてください。
DNS階層構造の理解
DNSは階層的なツリー構造として動作します。この階層を理解することは、DNSが数十億のドメインを処理するためにどのように拡張するかを把握する上で重要です。
ルートレベル
DNS階層の最上位にはルートサーバーがあります。13のルートサーバー識別子(AルートからMルート)がありますが、各識別子はエニーキャストルーティングを使用してグローバルに分散されたサーバーのクラスターを表しています。これらのルートサーバーは、Verisign、NASA、メリーランド大学、ICANNなどのさまざまな組織によって運営されています。
ルートサーバーはすべてのドメインのIPアドレスを知っているわけではありません。代わりに、各トップレベルドメインの権威サーバーをどこで見つけられるかを知っています。
トップレベルドメイン(TLD)
TLDは、ドメイン名の末尾に表示される拡張子です。いくつかのカテゴリに分類されます:
- 汎用TLD(gTLD):
.com、.org、.net、.info、.biz - 国別コードTLD(ccTLD):
.uk、.de、.jp、.ca、.au - スポンサー付きTLD:
.edu、.gov、.mil(使用制限あり) - 新しいgTLD:
.app、.dev、.blog、.tech(2013年以降に導入)
各TLDには、レジストリ組織によって管理される独自のネームサーバーセットがあります。たとえば、Verisignは.comと.netを管理し、Public Interest Registryは.orgを管理しています。
第2レベルドメインとサブドメイン
第2レベルドメインは、ほとんどの人が「ドメイン名」と考えるもの、つまりドメインレジストラに登録する部分です。example.comの場合、「example」が第2レベルドメインです。
サブドメインは、blog.example.comやmail.example.comのように、第2レベルドメインの下の追加レベルです。第2レベルドメインを所有すれば、無制限にサブドメインを作成できます。
DNSレコードタイプの解説
DNSレコードは、権威DNSサーバーに保存される指示です。各レコードタイプには特定の目的があります。遭遇する最も重要なものは次のとおりです:
| レコードタイプ | 目的 | 例 |
|---|---|---|
| A | ドメインをIPv4アドレスにマッピング | example.com → 192.0.2.1 |
| AAAA | ドメインをIPv6アドレスにマッピング | example.com → 2001:0db8::1 |
| CNAME | 別のドメインへのエイリアスを作成 | www.example.com → example.com |
| MX | メールサーバーを指定 | 10 mail.example.com |
| TXT | 任意のテキストデータを保持 | v=spf1 include:_spf.google.com ~all |
| NS | 権威ネームサーバーを指定 | ns1.example.com |
| SOA | 権威の開始(ゾーン情報) | 管理者メール、シリアル番号、タイマーを含む |
| PTR | 逆引きDNS(IPからドメイン) | 192.0.2.1 → example.com |
| SRV | サービスロケーションレコード | SIP、XMPPなどのプロトコルに使用 |
AレコードとAAAAレコード
これらは最も基本的なDNSレコードです。Aレコードは、ドメイン名をIPv4アドレス(192.0.2.1のような従来の32ビット形式)にマッピングします。AAAAレコード(「クワッドA」と発音)は、IPv6アドレス(2001:0db8::1のような新しい128ビット形式)にマッピングします。
ほとんどのドメインには、IPv4とIPv6の両方の接続をサポートするためにAレコードとAAAAレコードの両方があります。ウェブサイトにアクセスすると、ブラウザは通常、利用可能な場合はIPv6を優先します。
CNAMEレコード
CNAME(正規名)レコードはエイリアスを作成します。www.example.comをexample.comに向けたり、複数のサブドメインを同じ宛先に向けたりするために一般的に使用されます。ただし、CNAMEレコードには重要な制限があります:ドメインのルートレベル(apex)でCNAMEを使用することはできません。
たとえば、これは有効です:www.example.com CNAME example.com、しかしexample.com自体をCNAMEにすることはできません。
MXレコード
MX(メール交換)レコードは、ドメインのメールをどこに配信するかをメールサーバーに伝えます。優先度番号が含まれます。数値が小さいほど優先度が高くなります。これにより、バックアップメールサーバーを設定できます:
example.com. MX 10 mail1.example.com.
example.com. MX 20 mail2.example.com.
mail1.example.comが利用できない場合、メールは代わりにmail2.example.comに配信されます。
TXTレコード
TXTレコードは任意のテキストを保持し、非常に多用途です。一般的な用途には次のものがあります:
- SPFレコード:ドメインに代わってメールを送信できるメールサーバーを指定
- DKIMレコード:メール認証用の暗号署名を提供
- DMARCレコード:メール認証ポリシーを定義
- ドメイン検証:Google WorkspaceやMicrosoft 365などのサービスにドメイン所有権を証明
- サイト検証:検索エンジンやその他のプラットフォームの所有権を検証
DNSキャッシュとTTL
DNSキャッシュは、パフォーマンスとDNSサーバーへの負荷軽減にとって重要です。すべてのDNSレコードには、秒単位で測定されるTTL(生存時間)値があり、リゾルバーが更新を確認する前にレコードをキャッシュできる期間を示します。
たとえば、TTLが3600の場合、レコードは1時間キャッシュできることを意味します。その時間が経過すると、リゾルバーは新しいデータを取得するために権威ネームサーバーに再度クエリする必要があります。
キャッシュレイヤー
DNS応答は複数のレベルでキャッシュされます:
- ブラウザキャッシュ:通常60秒から数分
- オペレーティングシステムキャッシュ:OSによって異なり、多くの場合数分から数時間
- ルーターキャッシュ:ルーター設定に依存
- ISPリゾルバーキャッシュ:権威サーバーからのTTL値を尊重
この多層キャッシュにより、パフォーマンスが劇的に向上します。GoogleやFacebookのような人気のあるウェブサイトはどこにでもキャッシュされているため、それらに対するほとんどのDNSクエリは権威ネームサーバーに到達しません。
プロのヒント:DNS変更を計画する際は、24〜48時間前にTTL値を下げてください。300(5分)に設定すると、実際の変更を行ったときに迅速に伝播します。変更が完了して安定したら、TTLを3600以上に戻してください。
ネガティブキャッシュ
DNSは、ネガティブ応答(ドメインが存在しない場合)もキャッシュします。これにより、繰り返しのクエリが防止されます