RFC1034 の翻訳DNS サーバーに少なくとも 2 つの IP アドレスを割り当てる必要があります。ただし、エニーキャスト アドレスを使用すれば、単一の IP アドレスで冗長性を実現できます。BGP エニーキャストは、数百、数千のサーバーにも十分に拡張できるようです。
もしそうなら、なぜ DNS サーバーに複数の IP アドレスが必要なのでしょうか? エニーキャストがすでに導入されている場合、実際に冗長性が強化される (可用性が向上する) のでしょうか、それとも単なる神話なのでしょうか?
どのような問題やエラーに直面することが予想されるか単一の IP アドレスのみを使用する場合はどうなりますか?
つまり、セカンダリ DNS アドレスを完全に省略するか、1.2.3.4
一部の設定では少なくとも 2 つのアドレスが必要な場合に、2 番目のアドレスに偽の IP (例 ) を使用することを意味します。
答え1
単一のエニーキャスト IP アドレスでは、異なる IP プレフィックスの 2 つのユニキャスト IP アドレスと同じ冗長性は得られません。
多くの場合、冗長性に関する最も困難な問題は、何かが完全に機能しなくなったときではなく、ヘルス チェックに合格する程度に動作が不適切であっても、実際には機能しないときです。
DNS サーバーがダウンしても、パケットが引き続きその DNS サーバーにルーティングされるというエニーキャスト DNS 設定を見たことがあります。プレフィックスのアドバタイズを担当していたものは、DNS サーバーがダウンしたことを単に認識していない可能性があります。
問題の DNS サーバーが権威 DNS サーバーではなく、再帰リゾルバである場合は、さらに複雑になります。
このような再帰リゾルバには、クライアントからのクエリを受信するためのエニーキャスト アドレスと、権威 DNS サーバーにクエリするためのユニキャスト アドレスの両方が必要です。ただし、ユニキャスト アドレスがダウンした場合、クエリがルーティングされ続けるほど正常であるように見える可能性があります。
エニーキャストは、スケーラビリティとレイテンシの削減に最適なツールです。ただし、冗長性のために単独で使用すべきではありません。
ただし、複数の冗長エニーキャスト プールは可用性の面で優れたソリューションです。よく知られている例としては、8.8.8.8 と 8.8.4.4 があります。どちらもエニーキャスト アドレスですが、同じ物理 DNS サーバーにルーティングされるべきではありません (Google が適切に作業を行ったと仮定した場合)。
物理 DNS サーバーが 10 台ある場合は、各プールに 5 台のサーバーがある 2 つのプール、または各プールに 2 台のサーバーがある 5 つのプールとして構成できます。1 台の物理 DNS サーバーが同時に複数のプールに存在することは避けてください。
では、IP をいくつ割り当てればよいでしょうか。IP は、互いに独立してエニーキャストとして構成できる必要があります。つまり、通常は各プールに IPv4 アドレス空間の /24 全体、または IPv6 アドレス空間の /48 全体を割り当てる必要があります。これにより、使用できるプールの数が制限される可能性があります。
さらに、権威サーバーの場合、すべての NS レコードと A および AAAA グルーを含む DNS 応答は、1 つの 512 バイト パケットに収まる必要があります。ルート サーバーの場合、これは 13 個のアドレスになります。ただし、これにはグルーと IPv6 は含まれていないため、到達する数は少なくなります。
各プールは、可能な限り地理的に分散させる必要があります。ヨーロッパに 5 台のサーバー、北米に 5 台のサーバー、および 2 つのエニーキャスト IP がある場合、各大陸にまたがる 1 つのプールを作成するわけではありません。ヨーロッパから 2 台を 1 つのプールに、北米から 3 台を 1 つのプールに配置し、残りの 5 台を別のプールに配置します。
2 つ以上のエニーキャスト プールがある場合は、物理サーバーを一時的に複数のプールに含めることができます。ただし、物理サーバーが同時にすべてのプールに含まれることは許可しないでください。
エニーキャストとユニキャストを組み合わせることは可能ですが、注意が必要です。2 つのプールに IP がある場合は、組み合わせないでください。ただし、使用するエニーキャスト IP が 1 つしかない場合は、ユニキャスト IP も含めることが合理的です。問題は、ユニキャスト IP を含めると、レイテンシと負荷分散がそれほど良くならないことです。
物理サーバーがユニキャストとエニーキャストの両方で利用可能になっている場合、ユーザーがプライマリとセカンダリとして同じサーバーにアクセスし、そのサーバーがダウンした場合にアクセスできなくなるリスクがあります。これは、エニーキャスト プールにないサーバーのユニキャスト アドレスのみを使用するか、ユーザーに常に 2 つのユニキャスト アドレスを提供することで回避できます。
より多くのユニキャスト アドレスを混在させるほど、エニーキャスト アドレスに送信されるクエリが少なくなり、レイテンシとスケーラビリティの点でエニーキャストから得られるメリットが少なくなります。
答え2
ベスト プラクティスは、異なるプレフィックスから少なくとも 2 つのアドレスを使用し、2 つの異なる TLD で名前を付けることです。必要に応じて、これらのアドレスの両方をエニーキャストにすることができます。IP アドレスが 1 つしかないと、単一障害点になります。そのアドレスへのルーティングが機能しない場合 (構成エラー、エニーキャスト インスタンスが正しく機能していない、プレフィックスがハイジャックされているなど)、ドメイン全体にアクセスできなくなります。
すべてのエニーキャスト アドレスは、BGP でルーティング可能となるために、少なくとも/24
IPv4 または/48
IPv6 プレフィックスを必要とします。通常、多くの場所では、より小さい (長い) プレフィックスはグローバル ルーティング テーブルで受け入れられません。
一度もないこれまでDNS サーバーとして偽の IP アドレスを入力します。リゾルバーに重大な遅延が発生します。
答え3
RFC 1034 では、2 つの DNS サーバーが必要であるとのみ規定されています。これは必須要件ではなく、推奨事項であるため、必要に応じて適用してください。いずれにしても、HA が必要な場合は、エニーキャストを使用して 2 つの DNS サーバーに同じ IP を割り当てることができます。1 つの DNS サーバーに障害が発生した場合、エンド ユーザーが気付くのは、ネットワークが再収束するときに一時的に接続が失われることだけです。
まとめると、エニーキャストを使用すれば RFC 1034 に準拠するのに十分です。