DNS伝播とは?
DNS伝播とは、DNS変更がDNSレコード更新後、インターネット全体のDNSサーバーに認識されるまでの時間を指します。nameserverを変更したり、Aレコードを更新したり、MXレコードを変更すると、その変更は即座には有効になりません。キャッシュの有効期限が切れて、権威サーバーから新しい情報が取得されるまで待つ必要があります。
「伝播」の理解
「伝播」という用語は少し誤解を招きます。DNS変更が積極的に「伝播」または「拡がる」わけではなく、以下のようなことが起きます:
1. レコードを更新 権威nameserverで
2. キャッシュされたコピーの有効期限切れ TTLに基づいて
3. 新しいクエリが権威サーバーから更新されたレコードを取得
4. 古いキャッシュされたコピーは有効期限が切れるまで提供され続けます
DNS伝播ではなく「DNSキャッシュの有効期限切れ」と言う方が正確ですが、伝播という用語は広く使われています。
DNS変更の仕組み
更新プロセス
ステップ1: DNSレコードを更新
example.com Aレコード: 203.0.113.50 → 203.0.113.51
ステップ2: 権威nameserverが即座に新しいレコードを提供
ステップ3: 既存のキャッシュされたコピーはTTLの有効期限まで有効
ステップ4: TTL有効期限後の新しいクエリで更新されたレコードを受け取ります
ステップ5: すべてのキャッシュが最終的に有効期限が切れて更新されます
→ 「伝播完了」
タイムラインの例
時刻: 10:00 - DNS更新(TTL: 300秒/5分)
リゾルバーA(09:58にキャッシュ):
09:58 - 古いIPをキャッシュ、10:03で有効期限切れ
10:03 - キャッシュ有効期限切れ、再度クエリ、新しいIPを取得
リゾルバーB(10:01にキャッシュ):
10:01 - 古いIPをキャッシュ、10:06で有効期限切れ
10:06 - キャッシュ有効期限切れ、再度クエリ、新しいIPを取得
リゾルバーC(10:05にクエリ):
10:05 - キャッシュなし、即座にクエリ、新しいIPを取得
すべてのリゾルバーが新しいIPを持つまで: 10:06
伝播時間: 6分(TTLに基づいた最悪のケース)
伝播時間に影響する要因
TTL(Time To Live)
最も重要な要因:
| TTL値 | 伝播時間 | ユースケース |
|---|---|---|
| 60秒 | 1~2分 | アクティブな移行、ロードバランシング |
| 300秒(5分) | 5~10分 | 本番変更、適度なデフォルト |
| 3600秒(1時間) | 1~2時間 | 安定したインフラ |
| 86400秒(24時間) | 24~48時間 | ほぼ変わらないレコード |
nameserver変更
nameserverの変更は他のDNS変更より時間がかかります:
レジストリレベル: 24~48時間(TLDのnameserverキャッシュ)
リゾルバーレベル: NSレコードTTLに基づく
合計時間: 最悪48時間
ISPとリゾルバーの動作
すべてのDNSリゾルバーがTTL値を尊重するわけではありません:
良好なリゾルバー: Google(8.8.8.8)、Cloudflare(1.1.1.1)、OpenDNS- TTLを厳密に尊重
- 高速伝播
- 低いTTLを無視する可能性
- 指定より長くキャッシュ
- 伝播時間を数時間遅延させられます
地理的分布
異なる地域がローカルリゾルバーキャッシュに基づいて異なる時刻に更新:
北米: 10:05 - 更新
ヨーロッパ: 10:08 - 更新
アジア: 10:12 - 更新
クライアント側キャッシュ
DNSサーバーが更新された後も、ローカルキャッシュは古い値を保持することがあります:
- ブラウザキャッシュ: 通常60秒
- OSキャッシュ: 分~時間単位
- アプリケーションキャッシュ: アプリによって異なる
DNS伝播のチェック
オンライン伝播チェッカー
whatsmydns.net: 世界中の20以上の場所からのDNS解決を表示 dnschecker.org: A、AAAA、CNAME、MX、TXTレコードをグローバルにチェック DomScan Health Check:curl "https://domscan.net/v1/health?domain=example.com"
# 現在のDNS設定を表示
コマンドラインチェック
複数のリゾルバーをチェック:# Google DNS
dig @8.8.8.8 example.com
# Cloudflare DNS
dig @1.1.1.1 example.com
# ISP(サーバーを指定しない)
dig example.com
# 結果を比較
権威nameserverに直接クエリ:
# nameserverを探す
dig example.com NS
# 権威NSに直接クエリ
dig @ns1.example.com example.com
「真実」を即座に表示します。キャッシュは関係ありません。
複数の場所からチェック
# DNSover HTTPSを使用したcurl
curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=A'
伝播時間の最小化
変更前に
ステップ1: TTLを削減(変更の24~48時間前)古い: example.com. 3600 IN A 203.0.113.50
新い: example.com. 300 IN A 203.0.113.50
^^^
5分に削減
ステップ2: 古いTTLが有効期限切れになるまで待機
古いTTLの全期間を待機(3600秒 = 1時間)
ステップ3: DNS変更を実施example.com. 300 IN A 203.0.113.51
ステップ4: 伝播を監視
グローバルリゾルバーをチェック
ステップ5: TTLを復元(成功を確認した後)example.com. 3600 IN A 203.0.113.51
変更中に
Anycast DNSを使用: Cloudflareのようなプロバイダーはanycastネットワークを使用して、グローバルネットワーク全体で即座に更新 継続的に監視: キーリージョンとリゾルバーで伝播をトラッキング ロールバック計画: 伝播完了まで古いインフラを実行し続けますDNS伝播シナリオ
Aレコードの変更
期待時間: 5~30分(TTLに基づく)# 変更前
example.com → 203.0.113.50
# 変更後
example.com → 203.0.113.51
# 伝播: 1x TTL期間
MXレコードの変更
期待時間: 5~30分(TTLに基づく) リスク: 伝播中にメールが古いサーバーに配信される可能性 対策: 24~48時間、古いメールサーバーをアクティブなままにnameserver変更
期待時間: 24~48時間なぜこんなに長いのか?
- TLDレジストリがNSレコードをキャッシュ
- レジストリTTLは通常24~48時間
- レジストリキャッシュの制御はできない
ベストプラクティス: 切り替え前に、新しいnameserverで全レコードを設定
新しいサブドメインを追加
期待時間: 即座から1時間まで 注意点: 負のキャッシングサブドメインがクエリされ、存在しなかった場合:
→ NXDOMAINがキャッシュされます(SOA最小TTL)
→ 新しいサブドメインは、キャッシュが有効期限切れになるまで解決しません
対策: 新しいレコード追加前にSOA最小TTLを削減
伝播の問題をトラブルシューティング
変更が伝播していない
チェック1: 権威nameserverを確認dig @ns1.example.com example.com
# 新しい値を表示するはずです
チェック2: TTLを確認
dig example.com | grep -i ttl
チェック3: 負のキャッシュについてSOAをチェック
dig example.com SOA
# 最小TTLフィールドを確認
チェック4: ローカルキャッシュをクリア
ブラウザ、OS、アプリケーションキャッシュをクリア
部分的な伝播
症状: 一部のユーザーが新しいレコードを見て、他のユーザーが古いレコードを見る 原因: 異なるリゾルバーが異なる時刻にキャッシュした 解決策: 最大TTL期間待機してから、クライアントキャッシュをクリア伝播が停止している
症状: 数日後、一部のリゾルバーが古いレコードを提供し続ける 原因: ISPリゾルバーがTTLを無視しているか、設定が誤っている 解決策:1. 権威nameserverが正しいことを確認
2. 持続的な場合、ISPに連絡
3. ユーザーはパブリックDNS(8.8.8.8、1.1.1.1)に切り替え
DNS伝播 vs キャッシュTTL
| 概念 | 定義 | 期間 |
|---|---|---|
| TTL | レコードがキャッシュ可能な期間 | ドメイン所有者が設定 |
| 伝播 | すべてのキャッシュが有効期限切れになるまでの時間 | 約2x TTL |
| nameserver TTL | NSレコードがキャッシュされている期間 | 通常24~48時間(レジストリ) |
| 負のキャッシュ | NXDOMAINがキャッシュされる期間 | SOA最小TTL |
ベストプラクティス
1. 変更前にTTLを削減: DNS更新の24~48時間前にTTLを低下
2. 適切なTTLを使用: パフォーマンス(高TTL) vs 柔軟性(低TTL)のバランス
3. グローバルに監視: 複数の地域からDNSをチェック
4. 古いサービスを実行し続ける: 伝播完了まで前のサーバーをメインテナンス
5. 変更を文書化: トラブルシューティングのため何が変わったかを記録
6. 徹底的にテスト: 切り替え前に新しいDNSレコードが動作することを確認
7. ユーザーに通知: 中断の可能性について警告
8. マネージドDNSを使用: anycastネットワークを持つプロバイダーは伝播時間を最小化
9. 監視を自動化: DNS変更と伝播ステータスについてアラートを設定
10. ロールバック計画: 問題が発生した場合の変更方法を理解
伝播チェックリスト
☐ 変更の24~48時間前にTTLを削減
☐ 古いTTLが有効期限切れになるまで待機
☐ DNS変更を実施
☐ 権威nameserverで確認
☐ 複数のパブリックリゾルバーをチェック
☐ 複数の地域からテスト
☐ 2x TTL期間の監視
☐ エラーレポートが報告されていないことを確認
☐ 望む場合はより高いTTLに復元
☐ 変更完了を文書化
DNS伝播はDNSキャッシュの自然な結果です。TTL動作を理解し、変更を適切に計画することで、スムーズで予測可能な更新と最小限の中断を確保できます。