2026年10月15日

2026年10月15日

DNSの仕組みと名前解決の流れを解説|ブラウザから権威DNSまでを順番に追い、digで確かめる

DNSの名前解決は、「端末のキャッシュ → フルサービスリゾルバー(キャッシュDNS) → ルート → TLD → 権威DNS」という順番で、手前から答えを探していく仕組みです。この記事では、ブラウザにURLを入力してからIPアドレスが返ってくるまでの流れを一段ずつ説明し、各段階を dig などのコマンドで自分の目で確かめる方法まで紹介します。サーバー移転後に「自分だけ古いサイトが見える」といった現象の理由も、この流れを知ると説明できるようになります。

なお、権威DNSとキャッシュDNSの役割の違いそのものに焦点を当てた解説は別記事にあります。この記事は「問い合わせが実際にどこを通るか」を順に追うことに重点を置いています。

名前解決に登場する4つの役者

最初に、登場する要素を整理します。

  • スタブリゾルバー: OSに組み込まれた問い合わせ係です。アプリから頼まれた名前を、設定されたDNSサーバーに問い合わせるだけで、自分では答えを探し回りません。
  • フルサービスリゾルバー(キャッシュDNS): プロバイダーや社内、または 8.8.8.8 や 1.1.1.1 のようなパブリックDNSが提供するサーバーです。答えを知らなければ、ルートから順にたどって答えを探し、得た結果を一定時間キャッシュします。
  • ルートサーバー・TLDサーバー: ルートは「.com はこのサーバーに聞いて」、TLDは「example.com はこのサーバーに聞いて」と、次の問い合わせ先を教えます(これを委任と呼びます)。
  • 権威DNSサーバー: そのドメインのレコードを実際に持っているサーバーです。お名前.comやCloudflare、Route 53などのDNS管理画面で設定した内容は、ここから返されます。

名前解決の流れを順番に追う

www.example.com にアクセスする場合を例に、流れを追います。

ステップ1: 端末内で答えを探す

ブラウザは、まず自分の持つDNSキャッシュを確認します。次にOSのキャッシュと hosts ファイルが参照されます。hosts ファイルに書かれた名前はDNSに問い合わせずに解決されるため、移転作業中に書いたまま消し忘れると、いつまでも古いサーバーを見続ける原因になります。

ステップ2: フルサービスリゾルバーに問い合わせる

端末内に答えがなければ、スタブリゾルバーが設定されたDNSサーバーに問い合わせます。このとき「代わりに最後まで調べてください」という意味の再帰問い合わせ(RDフラグつき)を送ります。リゾルバーのキャッシュに答えがあれば、ここで即座に返されます。多くの問い合わせはこの段階で完結します。

ステップ3: ルートからTLD、権威DNSへとたどる

キャッシュに答えがない場合、リゾルバーは次のように順番に問い合わせます。

  1. ルートサーバーに www.example.com を聞くと、「.com を担当するサーバーはこちら」という委任情報が返ります。
  2. .com のTLDサーバーに聞くと、「example.com の権威DNSはこちら」という NS レコードが返ります。
  3. example.com の権威DNSに聞くと、www.example.com の A レコード(IPアドレス)が返ります。

リゾルバーが自分でたどるこの問い合わせを、反復問い合わせと呼びます。ルートサーバーの名前は a〜m の13個ですが、それぞれがエニーキャストで世界中に多数配置されており、実際のサーバー台数はそれよりずっと多くなっています。

ステップ4: 結果をキャッシュして端末に返す

リゾルバーは得た答えを、レコードに設定された TTL(秒数)のあいだキャッシュし、端末に返します。端末側のOSやブラウザも同様にキャッシュします。存在しない名前(NXDOMAIN)の結果もキャッシュされ、その保持時間はゾーンの SOA レコードの値をもとに決まります(ネガティブキャッシュ)。

各段階をコマンドで確かめる

端末が使っているDNSサーバーを確認する

# Linux(systemd-resolved を使っている場合)
resolvectl status

# Windows(PowerShell)
Get-DnsClientServerAddress

# macOS
scutil --dns | grep nameserver

systemd-resolved が動いているLinuxでは、/etc/resolv.conf に 127.0.0.53 と書かれていることがあります。これはローカルのスタブリゾルバーで、実際の上流サーバーは resolvectl status で確認できます。

リゾルバー経由の答えとTTLを見る

dig www.example.com A
dig @8.8.8.8 www.example.com A

出力の ANSWER SECTION の2列目の数字が TTL です。キャッシュから返された答えなら、時間をおいて実行するとこの数字が減っていきます。flags: 欄に ra(再帰可能)があれば、問い合わせ先がフルサービスリゾルバーであることが分かります。

権威DNSに直接聞く

dig example.com NS +short
dig @ns1.example-dns.net www.example.com A

2行目の ns1.example-dns.net は、1行目で得たNSのホスト名に置き換えてください。権威DNSからの答えには flags: に aa(権威ある応答)が付きます。管理画面で変更した値がここで返っていれば、設定そのものは反映済みで、残りはキャッシュの問題だと判断できます。

ルートから順にたどる様子を見る

dig +trace www.example.com A

+trace を付けると、dig 自身がルートから順に問い合わせ、各段階の応答を表示します。ルート、TLD、権威DNSの順に NS レコードが表示され、最後に A レコードが返れば、委任は正しく機能しています。途中で止まる場合は、その段階の NS 設定(レジストラ側のネームサーバー登録など)を疑います。

Windows では Resolve-DnsName www.example.com -Server 8.8.8.8 のように、問い合わせ先を指定して比較できます。

サーバー移転で「人によって見え方が違う」理由

名前解決の流れを踏まえると、移転直後に見え方が分かれる理由は次のように整理できます。

  • リゾルバーのキャッシュ: 変更前の A レコードが、TTLが切れるまで各リゾルバーに残ります。使っているリゾルバーが違えば、切り替わるタイミングも違います。
  • 端末やブラウザのキャッシュ: リゾルバーが新しい値を持っていても、端末側に古い値が残っていることがあります。
  • hosts ファイル: 作業用に書いた行が残っていると、DNSの変更が一切反映されません。
  • ネームサーバー自体の変更: レジストラでネームサーバーを変える場合は、TLD側の NS 情報が更新され、それがキャッシュから切れるまで時間がかかります。

対策の基本は、変更の前に TTL を短くしておくことです。現在の TTL の秒数以上前に短い値へ下げておけば、切り替え時に古い値が残る時間を短くできます。

ブラウザ独自のDNS(DoH)に注意する

最近のブラウザは、OSの設定とは別に DNS over HTTPS(DoH)で独自のリゾルバーを使う設定を持っており、主要ブラウザの多くが対応しています(2026年10月現在)。この場合、OSで dig した結果とブラウザの見え方が一致しないことがあります。調査中は、ブラウザの「セキュア DNS」関連の設定がどうなっているかも確認してください。設定項目の名前はブラウザやバージョンによって異なります。

まとめ

  • 名前解決は、端末内のキャッシュ、フルサービスリゾルバー、ルート、TLD、権威DNSの順に答えを探す仕組みです。
  • 多くの問い合わせはリゾルバーのキャッシュで完結し、その保持時間は TTL で決まります。存在しない名前の結果もキャッシュされます。
  • dig の ra と aa フラグ、@サーバー 指定、+trace を使うと、どの段階で何が返っているかを切り分けられます。
  • 移転時の見え方の違いは、キャッシュ、hosts ファイル、ブラウザのDoHのいずれかが原因であることがほとんどです。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲