はじめに
ブラウザでWebページが表示されるまでに、裏側で何が起きているか説明できますか?
「なんとなくサーバーにアクセスしている」——そのイメージは正しいですが、実際にはその前段階でもう一つの重要な処理が走っています。
URLを入力してからページが表示されるまでに、裏側ではDNS(Domain Name System) による「名前解決」が行われています。
「IPアドレスに変換する仕組み」というのは知っていても、実際にどのサーバーが何をしているのかまで説明できる人は少ないかもしれません。
この記事では、DNS名前解決の流れをステップごとに丁寧に追っていきます。
DNSとは?
DNSは、ドメイン名(例:www.example.com)をIPアドレスに変換する仕組みです。
人間が覚えやすいドメイン名と、コンピューターが通信に使うIPアドレスを対応づけています。電話帳に例えると、「名前(ドメイン)→電話番号(IPアドレス)」を引いているイメージです。
登場人物の整理
DNS名前解決には、以下の4つのサーバーが登場します。
┌─────────────────────────────────────────────────────┐
│ │
│ ① スタブリゾルバー(PCやスマホの内部) │
│ ↕ │
│ ② フルサービスリゾルバー(キャッシュDNSサーバー) │
│ ↕ │
│ ③ ルートDNSサーバー │
│ ↕ │
│ ④ 権威DNSサーバー(TLDサーバー + コンテンツサーバー) │
│ │
└─────────────────────────────────────────────────────┘
| 名称 | 役割 |
|---|---|
| スタブリゾルバー | PCやスマホに内蔵。フルサービスリゾルバーに問い合わせる |
| フルサービスリゾルバー(キャッシュDNSサーバー) | ISP(プロバイダー)や企業が運用。実際に問い合わせを行い、結果をキャッシュする |
| ルートDNSサーバー | DNS階層の最上位。世界に13種類(a〜m.root-servers.net)存在 |
| 権威DNSサーバー | 特定ドメインの正式な情報を持つサーバー。TLDサーバーとコンテンツサーバーに分かれる |
DNS名前解決の流れ(www.example.com の場合)
PC(スタブリゾルバー)
│
│① www.example.comのIPアドレスを教えて
▼
フルサービスリゾルバー(キャッシュDNSサーバー)
│
│(キャッシュになければ外部に問い合わせ)
│
│② .com を管理してるのはどこ?
▼
ルートDNSサーバー
│
│③ .com のTLDサーバーのIPはXXXだよ
▼
フルサービスリゾルバー(キャッシュDNSサーバー)
│
│④ example.com を管理してるのはどこ?
▼
TLDサーバー(.com を管理)
│
│⑤ example.com の権威サーバーのIPはYYYだよ
▼
フルサービスリゾルバー(キャッシュDNSサーバー)
│
│⑥ www.example.com のIPアドレスは?
▼
権威DNSサーバー(example.com を管理)
│
│⑦ 93.184.216.34 だよ
▼
フルサービスリゾルバー(結果をキャッシュ)
│
│⑧ 93.184.216.34 だよ
▼
PC → 93.184.216.34 に接続
各ステップの詳細
ステップ①:PCからフルサービスリゾルバーへ
PCはOSの設定に登録されているキャッシュDNSサーバー(フルサービスリゾルバー)に問い合わせます。
このDNSサーバーのIPアドレスは、家庭ではルーターから自動取得(DHCP)されるのが一般的です。
# Windowsで確認
ipconfig /all
# macOS / Linuxで確認
cat /etc/resolv.conf
ステップ②〜⑦:反復問い合わせ(イテレーティブクエリ)
フルサービスリゾルバーは自分でルートサーバーから順番に問い合わせていきます。
この方式を反復問い合わせ(Iterative Query)といいます。
フルサービスリゾルバーが「自分で全部調べて返す」のがポイントです。クライアント(PC)は1回問い合わせるだけでIPアドレスが返ってきます。
ステップ⑧:キャッシュへの保存
フルサービスリゾルバーは取得した結果をTTL(Time To Live)の時間だけキャッシュします。
次回同じドメインへの問い合わせはキャッシュから即座に返せるため、名前解決が高速になります。
DNSのレコード種類
権威DNSサーバーには様々な種類のレコードが登録されています。
| レコード | 内容 | 例 |
|---|---|---|
| A | ドメイン → IPv4アドレス | www.example.com → 93.184.216.34 |
| AAAA | ドメイン → IPv6アドレス | www.example.com → 2606:2800:... |
| CNAME | ドメイン → 別ドメイン(エイリアス) | shop.example.com → example.myshopify.com |
| MX | メール配送先サーバー | example.com → mail.example.com |
| NS | 権威DNSサーバーの指定 | example.com → ns1.example.com |
| TXT | テキスト情報(SPF・DKIM等) | v=spf1 include:... |
| PTR | IPアドレス → ドメイン(逆引き) | 93.184.216.34 → www.example.com |
TTLとキャッシュの仕組み
TTLはレコードをキャッシュしておける時間(秒)です。
; example.com のゾーンファイル(イメージ)
www 300 IN A 93.184.216.34
↑
TTL = 300秒(5分)
TTLが切れるまでは、フルサービスリゾルバーはキャッシュから応答します。そのため、DNSの設定変更が反映されるまでにTTLの時間がかかることがあります。
ルートDNSサーバーとは?
DNSの階層構造の最上位に位置するサーバーです。世界中に 13種類(a〜m.root-servers.net) 存在し、それぞれが数百台〜数千台のサーバーで構成されています。
.(ルート)
├── .com
│ ├── example.com
│ └── google.com
├── .jp
│ ├── yahoo.co.jp
│ └── ntt.co.jp
└── .net
└── ...
ルートDNSサーバーが知っているのは「各TLD(.com, .jp など)のDNSサーバーのIPアドレス」だけです。
DNSにまつわるセキュリティ
DNSキャッシュポイズニング
フルサービスリゾルバー(キャッシュDNSサーバー)のキャッシュに偽のIPアドレスを登録させる攻撃です。ユーザーが正規のドメインにアクセスしようとしても、攻撃者のサーバーに誘導されます。
対策として DNSSEC(DNS Security Extensions) があり、デジタル署名で応答の正当性を検証できます。
DNSアンプ攻撃(DDoS)
送信元IPを偽装してDNSサーバーに大量の問い合わせを送り、大きな応答をターゲットに送り付けるDDoS攻撃です。
まとめ
DNS名前解決の流れをまとめます。
- PCがフルサービスリゾルバー(キャッシュDNSサーバー) に問い合わせる
- フルサービスリゾルバーがルート→TLD→権威DNSと順番に聞いてIPを取得する
- 結果をTTL分キャッシュしてPCに返す
「PCは1回だけ問い合わせる、実際に走り回るのはフルサービスリゾルバー(キャッシュDNSサーバー)」というイメージを持っておくといいかもしれません。