web-dev-qa-db-ja.com

ドメインで複数のAレコードを使用する-Webブラウザーは複数のAレコードを試しますか?

ドメインに複数のAレコードを追加すると、DNSサーバーによってラウンドロビン順に返されます。

例:

192.0.2.1 A example.com
192.0.2.2 A example.com
192.0.2.3 A example.com

しかし、最初のホスト(192.0.2.1)がダウン(到達不能)した場合、Webブラウザーはどのように反応しますか? 2番目のホスト(192.0.2.2)を試しますか、それともユーザーにエラーメッセージを返しますか?最も人気のあるブラウザーに違いはありますか?

独自のアプリケーションを実装すると、最初のアプリケーションがダウンした場合に2番目のアプリケーションが使用されるように実装できるため、可能です。これは、フォールトトレラントWebサイトを作成するのに非常に役立ちます。

92
Jonas

はい、過去5〜10年のほとんどのブラウザは、応答に失敗した場合、他のAレコードを試します。これは、「ブラウザの再試行」または「クライアントの再試行」と呼ばれることもあります。この機能を使用していないサイトに対してこの機能が有効にするさまざまなブラウザーのエクスプロイトのコンテキストでのみ、ほとんどのものを見つけることができます( DNS rebinding および DNS pinning 、- anti-dns pinning、anti-anti-dns pinning、anti-anti-anti-dns pinning など)。悪い評判のようなものですが、それが存在することを証明します。

ほとんどすべてのブラウザーは、実際にAレコードの完全なリストを受け取り、使用しているものが失敗した場合、他のブラウザーを実際にチェックします。各クライアントは、サーバーがダウンしているときに最初にサイトにアクセスしようとしたときに、サーバーが有効なアドレスに接続するまで30秒待機することが予想されます。その後、ブラウザはどのアドレスが機能しているかをキャッシュし、失敗しない限り将来のリクエストでそのアドレスを使用し続け、リストを再度検索する必要があります。したがって、最初の要求で30秒待機し、その後は問題ありません。

ただし、必ずしも使用したいものではありません。ブラウザの互換性、OSの互換性、プロキシの互換性、キャッシュ制御ヘッダーは、どのIPがダウンしているかを覚えているかどうかに奇妙な影響を与えます。リクエストごとに30秒待機すると、サイトのカスタムクライアントを作成するユーザーは、 getaddrinfo の代わりに gethostbyname を使用し、すべての種類のフェールオーバーを処理できなくなります潜在的な問題の。

また、複数のAレコードに依存して「マスター」サーバーと「スレーブ」サーバーを許可することはできません。ブラウザーがリストから選択するアドレスがわからないためです。すべてのユーザーは、実行中の訪問者を処理できる能力を備えている必要があります。ブラウザは、リストの3番目のサーバーが最も魅力的だと思うかもしれません。おそらく最も近いように見えます。

ただし、制限に耐え、ブラウザとの相互作用を予測できる比較的単純なHTTPシステムを使用できる場合は、機能します。

ああ、これは存在しないと言っている多くの人々にも対処する必要があります(15年前に真実だったからです)。ただし、証明する必要がある場合は、いくつかのAレコード、IPが無効、いくつかは良いIPを持つドメイン名へのtelnet接続を試すことができます(はい、古いtelnetでもgetaddrinfoを使用し、複数のAレコードを最近優雅に処理します) -最終的に成功するまで、試行しているIPのNiceリストを出力します。

86
Joff

Windows Vistaは RFC3484 (つまり、IPV6からIPV4へのバックポート)の愚かな部分を実装し、ランダムに1つを選択するのではなく、ほとんどのプレフィックスビットをユーザーのIPアドレスと共有するIPアドレスを優先することに注意してください。ほとんどのユーザーは192.168で始まるIPアドレスを持っているので、ほとんどのプレフィックスビットを共有するIPアドレスのいずれでも、ほとんどのVistaトラフィックを取得できます。マイクロソフトは、Windows 7以降のこの特定のイディオイを少し修正したため、以前ほど大きな問題ではなくなりました。

5
Mike Scott

これは、DNSロードバランシングの基本的な分散技術です。DNSラウンドロビン。これはブラウザとは関係ありません。リゾルバの実装とDNSアドレスのローカル/リモートキャッシュに依存します。変更は、DNSレイヤーでのキャッシュのためにサーバーに障害が発生した場合、Webサイトにアクセスできない可能性があることです。

WikiPediaの Round Robin DNS に関する基本的な説明については、こちらをご覧ください。

3
keatch

OSは、ブラウザではなく、使用するIPを決定します。 Windowsは返されたリスト(DNSから返されたリスト内)をラウンドロビンしますが、DNSがフラッシュされるかタイムアウトになるまで同じアドレスを使用し続けます。 * ix実装は、バンドルされたtcpスタック実装に部分的に依存しますが、通常はラウンドロビン方式も使用します。

0
iivel