DNSの仕組み
ドメインネームシステム(DNS)は、www.example.comのような名前を、コンピューターが接続に使うIPアドレスに変換します。この作業はキャッシュリゾルバー(再帰リゾルバー)が代行します。ルートサーバー、トップレベルドメイン(TLD)のサーバー、そのドメインの権威サーバーの順に問い合わせ、得られた回答を後で使うために保存します。通常、数ミリ秒で完了します。
名前解決の流れ
www.example.comを開くとき、どこにもキャッシュがなければ次の手順が行われます。
- スタブリゾルバー。OSには小さなクライアントが組み込まれています。自分のキャッシュとhostsファイルを確認してから、設定されている再帰リゾルバー(通常はルーターやISPのもの、または公開リゾルバー)に問い合わせを送ります。
- 再帰リゾルバー。自分のキャッシュを確認します。回答がなければ、最上位から順に問い合わせを繰り返して最終的な回答を探します。
- ルートサーバー。リゾルバーはルートサーバーに
www.example.comを尋ねます。ルートはアドレスを知りませんが、.comを担当するサーバーを返します。 - TLDサーバー。
.comのサーバーもアドレスは知りませんが、example.comのネームサーバー(NSレコード)を返します。 - 権威サーバー。ドメインのネームサーバーが本当のレコードを保持しており、
www.example.comのAレコードまたはAAAAレコードを返します。 - リゾルバーは回答をスタブリゾルバーに返してキャッシュに保存し、ブラウザーが接続します。
この一連の流れは、当サイトのDNSチェッカーで、任意のドメインについてたどることができます。
キャッシュとTTL
すべてのDNSレコードにはTTL(Time To Live)があります。これは、リゾルバーが回答を保持してよい秒数を示す値で、TTLが3600なら1時間です。キャッシュはDNSを高速にし、権威サーバーの負荷を減らしますが、変更が世界中に一斉に反映されないことも意味します。キャッシュは、ブラウザー、OS、ルーター、再帰リゾルバーなど、複数の場所に存在します。
リゾルバーは、「この名前は存在しない」(NXDOMAIN)といった否定応答もキャッシュします。保持期間はSOAレコードで指定されます。
主なレコードの種類
| タイプ | 用途 | 値の例 |
|---|---|---|
| A | 名前をIPv4アドレスに対応付けます | 192.0.2.10 |
| AAAA | 名前をIPv6アドレスに対応付けます | 2001:db8::10 |
| CNAME | ある名前から別の名前への別名です。ゾーンの頂点(apex)では、他のレコードと共存できません。 | www.example.com → example.com |
| MX | ドメインのメールサーバーと優先度を指定します(数字が小さいほうが先に試されます) | 10 mail.example.com |
| NS | ゾーンの権威ネームサーバーです | ns1.example.com |
| TXT | 自由形式のテキストです。SPF、DKIM、DMARC、ドメイン所有確認に使われます | "v=spf1 mx -all" |
| SOA | 権威の開始情報:プライマリサーバー、管理者の連絡先、シリアル番号、各種タイマー | ns1.example.com hostmaster.example.com 2026110401 ... |
| CAA | そのドメインの証明書を発行できる認証局を指定します | 0 issue "ca.example.net" |
| SRV | 特定のサービスのホストとポートを示します | 10 5 5060 sip.example.com |
| PTR | 逆引き:IPアドレスを名前に対応付けます | 10.2.0.192.in-addr.arpa → host.example.com |
メールを確実に届けるには、MX、SPF、DKIMレコードを正しく設定することが重要です。当サイトのメール&ブラックリストツールで、メールサーバーを確認し、そのIPアドレスがスパムのブロックリストに載っていないかも調べられます。
DNS浸透の正体
「DNS浸透」とは、世界中のキャッシュが古い回答を破棄して新しい回答を取得するまでの時間を指す、一般的な呼び方です。インターネット上に何かが配信されているわけではありません。権威サーバーは新しいデータをすぐに持っていますが、リゾルバーはTTLが切れるまで古いデータを保持し続けます。そのため、変更したレコードの最大の遅延は、新しいTTLではなく、古いTTLにほぼ等しくなります。
レジストラでネームサーバーを変更する場合は、TLDゾーンのNSレコードのTTLが通常1〜2日であるため、さらに時間がかかります。その間、古いサーバーに到達するユーザーと新しいサーバーに到達するユーザーが混在します。ドメインの委任はWHOIS検索で、レコード自体はDNSチェッカーで確認できます。
変更を素早く反映させる方法
- 変更の少なくとも古いTTLの期間より前(TTLが86400なら24時間前)に、レコードのTTLを300秒などの小さな値に下げます。
- 古いTTLが経過するまで待ち、すべてのキャッシュが短いTTLのバージョンを保持している状態にします。
- 変更を行います。リゾルバーは約5分以内に再度問い合わせるようになります。
- DNSチェッカーで、複数の場所から結果を確認します。
- すべて正常に動作したら、問い合わせの負荷を減らすためにTTLを元に戻します。
SOAシリアルとセカンダリサーバー
ほとんどのドメインは、少なくとも2台の権威サーバーを使っています。1台がプライマリで、他のセカンダリはゾーン転送(AXFRまたはIXFR)でプライマリからゾーンをコピーします。これを制御するのがSOAレコードです。
- Serial(シリアル):バージョン番号です。プライマリのシリアルが自分のものより大きい場合に、セカンダリがゾーンを転送します。一般的な形式は日付とカウンターの組み合わせで、
2026110401のようになります。ゾーンを編集してもシリアルを上げ忘れると、セカンダリは古いデータを提供し続けます。 - Refresh:セカンダリがシリアルを確認する間隔です。
- Retry:確認に失敗した後、セカンダリが再試行するまでの待ち時間です。
- Expire:この時間が経過しても連絡が取れない場合、セカンダリは応答を停止します。
- Minimum(ネガティブTTL):リゾルバーが「存在しない」という回答をキャッシュする時間です。
ドメインがネームサーバーごとに異なる回答を返す場合は、古いままのセカンダリが原因である可能性が高いです。すべてのNSサーバーのシリアル番号を比較してください。
エニーキャストのリゾルバー
大手事業者が運営する公開リゾルバーはエニーキャストを使っています。同じIPアドレスが多数のデータセンターからアナウンスされ、ネットワークが各クエリを最も近い拠点にルーティングします。これにより、低遅延と耐障害性が得られます。各拠点には独自のキャッシュがあるため、同じリゾルバーのアドレスを使っている2人でも、変更の直後はしばらく異なる回答を見ることがあります。同じ技術は、ルートサーバーや多くの権威DNSサービスでも使われています。
関連する基本事項については、IPアドレスとはと、DNSがアプリケーション層に位置することを説明したOSI参照モデルをお読みください。