1つのホスト名に複数のAレコード
1つ目の回答
93.184.216.34
2つ目の回答
93.184.216.35
3つ目の回答
93.184.216.36
リゾルバーはすべてのレコードを返し、通常は順序をローテーションする
1つのドメインに複数のIPアドレスがある理由
大規模なサイトを検索すると、3つ、4つ、あるいは8つものアドレスが返ってくることがよくあります。別の国から調べ直すと、リストがまったく変わることもあります。これを生む仕組みは4種類あり、それぞれ意味するところは大きく異なります。
1つのホスト名に複数のAレコード
1つ目の回答
93.184.216.34
2つ目の回答
93.184.216.35
3つ目の回答
93.184.216.36
リゾルバーはすべてのレコードを返し、通常は順序をローテーションする
1. ラウンドロビンDNS
最も単純な方法は、同じ名前に対して複数の A レコードを公開することです。リゾルバーはそれらを順序を入れ替えながら返すため、クライアントごとに、最初に試すサーバーが変わります。
example.com. 300 IN A 93.184.216.34
example.com. 300 IN A 93.184.216.35
example.com. 300 IN A 93.184.216.36インフラを追加せずに負荷を分散できます。ただし、制限は深刻です。DNSにはヘルスチェックがありません。 1台のサーバーが停止しても、人間がレコードを削除するまでそのアドレスは配られ続け、訪問者のおよそ3分の1が失敗します。
2. ジオルーティング(GeoDNS)
この方法では、権威ネームサーバーが、クエリがどこから来たのかを調べ、その場所に適した答えを返します。ヨーロッパにいる訪問者にはフランクフルトのアドレスが、アジアにいる訪問者にはシンガポールのアドレスが返ります。
同じドメインでも、同じ瞬間に、2人の人が正当に異なる答えを得るのは、このためです。どちらも古くなっているわけでも、間違っているわけでもありません。ネームサーバーが意図的に、異なる応答を返したのです。
重要なポイント
ジオルーティングでは、ドメインに唯一の正しい答えというものはありません。答えは、誰が、どこから問い合わせているかによって決まります。
3. エニーキャスト
エニーキャストは、4つの中で最も洗練された方法で、DNSよりも下の層で完全に機能します。同じアドレスが、多数の場所から同時に広告され、インターネットのルーティングが、各パケットを、ネットワーク上で最も近い場所に届けます。
| ジオルーティング | エニーキャスト | |
|---|---|---|
| 機能する層 | DNS層 | ルーティング層(BGP) |
| 返されるアドレス | リージョンごとに異なる | 常に同一 |
| フェイルオーバーの速さ | DNSのTTLを待つ | 数秒。ルーティングが再収束する |
| 検索で見えるか | 見える。応答が異なる | 見えない。1つの普通のアドレスに見える |
有名な例が 1.1.1.1 です。地球上のどこでも同じ4つの数字で、数百か所の別々のデータセンターが応答します。エニーキャストはDNS検索からは見えず、まさにそれが、非常に効果的な理由です。
4. デュアルスタック:AとAAAAの併用
最もよくあり、最も面白みのない理由です。IPv4とIPv6の両方を公開しているドメインは両方を返し、クライアントは、対応しているほうを選びます。
example.com. 3600 IN A 93.184.216.34
example.com. 3600 IN AAAA 2606:2800:220:1::248デュアルスタックのクライアントは、一般にIPv6を優先し、IPv4にフォールバックします。詳しくは AレコードとAAAAレコード をご覧ください。
クライアントがリストをどう扱うか
複数のアドレスが返ってくるのは、話の半分にすぎません。そのあとの動作はクライアントが決めており、最近の動作は以前よりも賢くなっています。
関連する仕組みが、RFC 8305で定義されたHappy Eyeballsです。IPv6とIPv4の両方のアドレスを与えられたブラウザーは、片方を試してタイムアウトを待ち、それからもう片方を試す、ということはしません。まずIPv6の接続を開始し、短い間隔(通常は250ミリ秒前後)待って、それでも接続できなければ、IPv4の試行を並行して開始します。先に完了したほうが採用され、負けたほうは破棄されます。
実用上の結果として、リストの中に壊れたアドレスがあっても、完全な失敗ではなく、速度の低下で済みます。これはセーフティネットであって、免罪符ではありません。応答のないアドレスは、フォールバックまでの遅延という形で、すべての訪問者にコストを課します。
DNSが適切なツールではない場面
ラウンドロビンDNSは、ロードバランサーの代わりとして持ち出されることがよくあります。できないことを、はっきり理解しておく価値があります。
| 機能 | ラウンドロビンDNS | 本物のロードバランサー |
|---|---|---|
| ヘルスチェック | なし。停止したサーバーも掲載されたまま | 障害のあるバックエンドを数秒で除外する |
| トラフィックの重み付け | なし。おおむね均等 | バックエンドごとの重み |
| セッションアフィニティ | なし | 対応 |
| フェイルオーバーの速さ | TTLの期限切れを待つ | 即時 |
| コスト | 無料 | 運用または支払いが必要なサービス |
正直にまとめると、ラウンドロビンDNSは、負荷の分散は十分にこなせますが、障害への対応は苦手です。サーバーが停止したときに、訪問者の一部が一緒に巻き込まれては困るなら、ヘルスチェックが必要です。つまり、ロードバランサー、エニーキャストのプロバイダー、あるいはヘルスチェックを実行し、障害のあるレコードを自動的に取り下げるマネージドDNSサービスが必要になります。
それぞれの見分け方
| 観察される状況 | 最も可能性の高い原因 |
|---|---|
| 複数のIPv4アドレスが、毎回同じ | ラウンドロビンDNS |
| 国によって、異なるアドレスが返る | ジオルーティング |
| アドレスは1つで、どこからでも高速 | エニーキャスト |
| ドット区切りとコロン区切りのアドレスが混在 | デュアルスタック。分散ではありません |
| アドレスの逆引きがCDNのホスト名になる | CDNのエッジノード |
dig +short example.com @1.1.1.1
dig +short example.com @8.8.8.8ドメインを検索するときに、これが意味すること
1回の答えに、どれだけの重みを置くかが変わります。
- 複数のアドレスは、健全な状態です。 通常は設定ミスではなく、冗長性を示しています。
- あなたの答えが、普遍的とは限りません。 ジオルーティングやCDNでは、別の場所にいる人には別のものが見えており、どちらも正しいのです。
- ハードコードしないでください。 アドレスはローテーションし、置き換えられ、再割り当てされます。名前は、必ず接続時に解決してください。
- 順序に意味はありません。 ローテーションは意図的であることが多く、最初のアドレスがプライマリとは限りません。
検索ツール は、最初の1つだけではなく、受け取ったすべての A と AAAA レコードを一覧表示します。そのため、公開されているセット全体を一度に確認でき、一括モードを使えば、複数のドメインを並べて比較するのも簡単です。
ドメインの公開DNSアドレスを調べたい場合は、Domain IP Lookupツールをお試しください。
よくある質問
関連記事
検索結果にオリジンではなくCDNが表示される理由
訪問者
ドメインを検索
CDNエッジ
104.21.x.x
DNSが返すのはこれ
オリジンサーバー
実際のIPは非公開
CDNがオリジンIPを隠す理由と、その意図
ドメインを検索したらCloudflareのアドレスが返ってきましたか。それは、システムが正しく動いている証拠です。その背後に何があり、なぜ見通せないのかを解説します。
ほぼすべてのゾーンで出会うレコード
DNS Aレコードとは?AAAAが必要になる場面
ドメインを実際にサーバーへ向けるレコードです。その構造、対となるAAAAレコード、サイトが最も壊れやすい4つの間違いを解説します。
再帰的なDNS検索を1ホップずつ見る
ブラウザー
example.comを要求
リゾルバー
ISP / 1.1.1.1
ルート + TLD
.comの管理元は?
権威サーバー
正式な回答
この連鎖の各ホップはそれ自体がDNS検索で、結果はその後キャッシュされます
DNSの仕組み:ドメイン名からIPアドレスまで
インターネットの電話帳を、端から端まで追跡します。ドメインを入力してから最初のパケットがサーバーに届くまでの数ミリ秒に、何が起きているのかを解説します。