同じドメインでも応答が変わる3つの理由
ジオルーティング
地域ごとに別のエッジサーバー
キャッシュ
TTLもキャッシュも個別
スプリットホライズン
意図的に異なる回答
DNSの応答が場所によって変わる理由
同じドメインでも、場所の異なる人にはそれぞれ違うDNS応答が返ることがあります。どちらの応答も間違っているわけではありません。DNSプロバイダーやCDNは、地理的またはレイテンシーを考慮したルーティングを使い、ユーザーを地域ごとのインフラへ誘導できます。再帰リゾルバーが保持しているキャッシュの値が異なる場合もあります。また、企業ネットワークではスプリットホライズンDNSを使い、従業員には内部向けの応答を、公開インターネットには別の応答を返すことがあります。つまり、目にするアドレスは、ホスト名、レコードタイプ、リゾルバー、場所、時刻の組み合わせによる結果です。1回の検索では、起こりうるすべての見え方を代表できません。そのため、比較するときはその条件も一緒に記録しておく必要があります。
地理ベースとレイテンシーベースのDNS
地理を考慮するプロバイダーは、クエリごとに評価を行い、設定されたリージョン、ネットワーク計測、ポリシーに基づいて応答を選びます。近くのCDNエッジや、リージョンごとのアプリケーションエンドポイントが返されることもあります。プロバイダーから見えるのは、通常はクエリを送ってきた再帰リゾルバーです。そのリゾルバーは、エンドユーザーから遠く離れていることも、多数のユーザーに使われていることもあります。EDNS Client Subnetを使って、ネットワークに関する情報の一部を含める仕組みもありますが、対応状況やプライバシー上の扱いはさまざまです。その結果、ある場所からの検索が、その場所にいる特定の人が選んだISPや企業のリゾルバー経由で受け取る内容を、常に表しているとは限りません。
| 原因 | 応答が異なる理由 |
|---|---|
| 地理ベースのDNS | プロバイダーが、リゾルバーまたはネットワークのリージョンに基づいてレコードを選ぶ |
| CDN | クエリの場所に応じて、異なるエッジが通知されることがある |
| キャッシュ | リゾルバーがTTLに基づいて、それぞれ異なる時刻に更新する |
| スプリットホライズン | 内部と公開のクライアントが、異なるゾーンのビューを受け取る |
| フェイルオーバー | ヘルスチェックやポリシー上のイベントの後、プロバイダーが応答を切り替える |
キャッシュも、ばらつきを生むもう1つの要因です。あるリゾルバーは以前の応答をまだ保持していて、別のリゾルバーはすでに新しい応答を取得済み、ということが起こります。TTLを短くしても、古いTTLですでにキャッシュされた値の保持期間が、さかのぼって短縮されることはありません。ローカルのオペレーティングシステムやアプリケーションが、独自のキャッシュ動作を加える場合もあります。レコードを最近変更したのであれば、変更前のTTLと、変更を公開した時刻を記録しておきましょう。キャッシュが期限切れになるまで待ち、更新に失敗したと結論づける前に、権威ネームサーバーに問い合わせてゾーン自体を確認します。
食い違いを調べる方法
まったく同じホスト名とレコードタイプを、名前を明示したリゾルバー経由で比較し、各クエリをどこで、いつ実行したかを書き留めます。権威ネームサーバーに問い合わせて、ゾーンが現在公開している内容を確認します。再帰リゾルバーの応答だけが異なる場合は、キャッシュの経過時間、リゾルバーのポリシー、地理的な要因を疑います。権威サーバー同士で食い違う場合は、プロバイダーの同期状況と委任を調べます。内部と外部のユーザーで見える値が異なる場合は、スプリットホライズンDNSが意図的なものかどうかを確認します。最後に、サービスのエンドポイント自体もテストしてください。異なるDNSアドレスがどちらも正常なアプリケーションのコピーにつながっていることもあれば、同一の応答がどちらも、DNSとは無関係の理由で失敗していることもあります。
- リゾルバー、クエリの場所、ホスト名、レコードタイプ、応答、タイムスタンプを記録する。
- レコードを再度変更する前に、権威データを比較する。
- DNSの編集後は、TTLによるキャッシュとネガティブキャッシュを考慮する。
- 意図的に応答を変えているCDNやジオルーティングのルールがないか確認する。
- 名前解決とは切り離して、実際のサービスの正常性をテストする。
応答が異なることから言えないこと
公開されている応答が異なるからといって、それだけでDNSがハイジャックされた、ドメインが侵害された、オリジンサーバーが移動した、ということにはなりません。正常な設計上の動作である場合もあります。同様に、応答が一致していても、すべての訪問者が同じ経路を使っていることの証明にはなりません。キャッシュやアプリケーション層が異なる可能性があるためです。裏付けとなる証拠を探してください。プロバイダーの設定、公開されたメンテナンス通知、既知のCDNの範囲、アプリケーションのテレメトリーなどです。特に、そのアドレスが多数の顧客にサービスを提供する共有インフラである場合は、結果の説明を限定的なものにとどめましょう。
分散した応答の背後にある仕組みについては、CDNがDNSでトラフィックをルーティングする仕組み と DNSロードバランシング をご覧ください。ドメイン検索ツール は、公開DNSのスナップショットを手軽に確認できます。複数のビューを比較する場合は、別のリゾルバーから同じクエリを繰り返してください。結果にクエリの条件を添えて残すことで、一見した矛盾が、ルーティングポリシー、キャッシュ、構成についての証拠に変わります。
条件を省かずに応答を比較する
有用な比較表には、クエリの時刻、リゾルバーのアドレス、場所またはネットワーク、ホスト名、レコードタイプ、レスポンスコード、TTL、応答の値を含めます。結果が異なる場合は、そのリゾルバーが公開のものか、企業のものか、プロバイダー管理のものか、そしてドメインがCDNを使っているかどうかも加えてください。あとでクエリを繰り返し、その違いが安定したポリシーによるものか、一時的なキャッシュの分断によるものかを判断します。同じリゾルバーが時間によって異なる応答を返す場合は、ロードバランシングとヘルスベースのフェイルオーバーを確認します。2つのリゾルバーが一貫して異なる場合は、ジオロケーションやスプリットホライズンの設定を調べます。こうした条件を添えることで、「DNSの挙動が一貫していない」という漠然とした印象が、DNSプロバイダーが再現して説明できる具体的な観察結果になります。比較結果を報告するときは、ドメインのルーティングポリシーを確認していない限り、どちらかの応答がグローバルに正しいとは述べないようにします。それぞれの応答が権威サーバーから来たのか再帰リゾルバーのキャッシュから来たのかを説明し、それに付いているTTLも残してください。CDNが意図的にリージョンごとのエンドポイントを返しているなら、確認すべきは、すべてのリゾルバーが同一のアドレスを返すかどうかではなく、各エンドポイントがそれぞれのリージョンで正常かどうかです。この区別をしておけば、想定どおりのルーティング設計が、DNS障害として誤ってエスカレーションされることを防げます。
ドメインの公開DNSアドレスを調べたい場合は、Domain IP Lookupツールをお試しください。
関連記事
順に確認する4つの層
DNS
名前を解決
トランスポート
TCPが接続
TLS
証明書を検証
アプリケーション
HTTPが応答
「このサイトにアクセスできません」エラーの原因を切り分ける方法
この汎用的なブラウザーエラーは、互いに無関係な複数の障害を含んでいます。DNSは、最初に関与の有無を確認するのに最も手早い切り分け先です。
「伝播」の正体は、キャッシュの有効期限切れ
0分
変更を保存
0-5分
DNSホストが更新
TTLまで
古い回答がまだキャッシュ中
TTL後
全員に新しい回答が表示
どこにも何も送られず、各キャッシュがコピーの再利用をやめるだけ
DNSの変更が反映されないときの対処法
レコードを更新して待ったのに、まだおかしい。故障を疑う前に、次の項目を順番に確認してください。
検索にかかる時間の目安
DNSの名前解決が遅いときの対処法
サイトの表示が遅い原因が、実は遅いDNS検索であることがあります。見分け方と、よくある原因、切り分けの手順を解説します。