DNSレコードがインターネットに伝播しないのはなぜですか?


22

ネットワーク上でドメインのネームサーバーを実行します。bind / namedを使用します。ドメインexample.comを呼び出しましょう。最近気づいたことの1つは、http://network-tools.comのようなWebサイトにアクセスし、ネームサーバーで定義されたURLでクエリを実行すると、即座に変更が表示されることです。

たとえば、URL funny.example.comの DNSサーバーにエントリを追加し、http://network-tools.comでそのURLを検索すると、すぐに適切な外部静的IPがリストされます。

これは、example.comに関連するDNS要求が毎回DNSサーバーに直接送られてくることを示しています。

私の疑いは、私たちのDNSサーバーが非常に短期間停止した週の早い時期に確認されました。そして、その期間中にhttp://network-tools.comを使用してexample.comまたはそのサブドメインのいずれかを照会すると、結果はゼロになります。DNSサーバーがダウンしており、到達できなかったためです。

だからこれは私の質問に私をもたらします。DNSサーバーへの変更は、他のDNSサーバーへとインターネットに伝播されるべきだと思いました。そうすれば、DNSが一時的にダウンしても、インターネット上の他のサーバーは、example.comが指すIPアドレスをまだ認識しています。

このDNSについて誤解していますか?サードパーティが制御するDNSサーバーは、ネット上の他のサーバーにDNS情報を伝達することを許可されていませんか?

なぜ変更がうまくいかないのか、どこから調査を始めるべきですか?ファイアウォールでは、ポート53のトラフィックがDNSサーバーに適切に到達していることがわかります。

更新

  1. DNS設定を即座に公開することは不可能だと皆さんが言っていることは知っていますが、私が知っているのはこれだけです。 com、すぐに変更が表示されます。

  2. DNSサーバーをオフにしてから、http://network-tools.comを使用してURLをチェックしようとすると、サイトはURLを見つけることができません。しかし、DNSサーバーをオンラインに戻すと、突然http://network-tools.comのすべてが再びURLを見つけることができます...これは、サーバーがDNS設定をキャッシュしていないことを示しています。私が間違っている?また、現在のTTL設定は900(15分)に設定されており、DNSサーバーは1年以上稼働しています。したがって、インターネット上にあるDNSサーバーとは異なり、まだキャッシュする機会がありません。TTLが現在非常に低いため、サーバーが設定をキャッシュしていないのはなぜですか?それが理由であれば、それはちょっと理にかなっています。


7
jokerville.comは実際に登録されたドメイン名であるため、それが実際にあなたのドメインでない限り、example.com代わりに使用してください-それはその目的のために公式に予約されています。
mattdm

9
network-tools.comがすぐに変更を確認する理由は、それがネットワークツールであり、結果を意図的にキャッシュしないためです。これは、通常のDNSクライアントではなく、ネームサーバーを調べるためのツールであるため、さまざまなルールに従います。
マイケルコーネ

回答:


42

はい、DNSの仕組みを誤解しています。ここでは強調を使用しますが、意図されたものではないので気を悪くしないでください。

DNSレコードは伝播されません。それらはキャッシュされます。

そうは言っても、ここでは何が起こるかを簡単に説明します。

  1. 新しいDNSレコード(A、CNAMEなど)を作成します

  2. リモートユーザー(より具体的には、ユーザーによって起動されたプロセス\アプリケーション)は、そのDNSレコード(たとえば、funny.example.comで実行されているWebサイトにアクセスしようとしているWebブラウザー)を介してアクセスされるサービスにアクセスしようとします

  3. ユーザーのDNSクライアントがDNSクエリをDNSサーバーに送信すると、DNSサーバーはネームサーバーを検索し(通常は一連の再帰的なDNSクエリを使用して)、funny.example.comに関する情報を要求します

  4. ネームサーバーが回答を返します

  5. 次に、ユーザーのDNSサーバーはこの情報をユーザー(より具体的にはユーザーのDNSクライアントリゾルバー)に送信し、プロセスはその情報をプロセス\アプリケーションに返します。この情報には、TTL(Time To Live)と呼ばれるものが付属しており、DNSクライアントリゾルバーに、この情報がDNSキャッシュ(メモリ)に保持される期間と、情報が現在および正確であると見なされる期間を伝えます

  6. ユーザーのDNSクライアントリゾルバーは、TTLが期限切れになるとこの情報をフラッシュします。問題のDNSレコードに対する新しい要求には、新しいDNSルックアップが必要であり、上記のプロセスが繰り返されます。

その長短は次のとおりです。

DNSレコードは伝達されません。他のDNSサーバーには、DNSレコードまたはゾーンのコピーがありません。DNSクライアントまたはDNSサーバーは、(DNSレコードとゾーンのDNSクエリに基づいて)DNSレコードまたはゾーンに関する情報をDNSキャッシュにキャッシュできます。この情報は一時的にキャッシュされ、TTLの期限が切れるとDNSキャッシュから削除されます。

ネームサーバーがダウンしている場合、キャッシュにDNSレコードがあるDNSクライアントのみが、TTLが期限切れになるまでDNSレコードを解決できます。また、TTLが期限切れになると(新しいDNSロックアップが必要になります)、それらのDNSクライアントはDNSレコードを解決できなくなります。


良い説明と私は(DNSとは異なり)伝播があるプロトコルの例を追加することがあります:BGP。
ボルツマイヤー

11

実際のドメイン名を教えていただければ大いに助かります。実際の設定を参照して質問に答え、障害を指摘することができます。

DNSの問題を迅速に診断するために、http://dns.squish.net/を信頼する傾向があります。これは、変更を行った後の問題の特定の場所を示します。基本的に、上流からの委任が正しく、2〜3のネームサーバーがすべて同じ答えを返し、誰かが新しいレコードを見ない場合、ローカルネットワークが変更を確認するまで待つ必要があります。そのチェッカーが、サーバーの1つが他のサーバーと同じ応答を与えていないことを示している場合、その問題を修正する必要があります。

DNSの変更を即座に公開する方法はありません-まあ、すぐに公開することはできますが、他の世界は各レコードのTTL設定に従って遅れます。例えば、86400秒のTTLレコードを設定した場合(ある日)あなたが変更を加えると、他の人は最大1日まで古いレコードを見ることになります。なぜなら、ローカルキャッシュはレコードのコピーが期限切れになるまであなたに尋ねないからです。

主要なDNSを変更する前に、TTLを600(10分)に減らして、インターネット上のキャッシュが非常に長い間古いレコードを保持しないようにすることをお勧めします。ただし、一部のキャッシュはこれを無視するか、1日、さらには1週間と見なします。

とりとめのない質問に対するとりとめのない答えですが、何か役に立つものがあればいいのですが。


1
+1。明確にするために、既にTTLの有効期限が切れていないキャッシュ内の情報を既に持っているDNSクライアントのみが変更の影響を受けます。キャッシュにデータがない新しいリクエストは、すぐに解決されます。
joeqwerty

fyi:デッドリンク-squish.net/dnscheck
アーロンエサウ

8

はい、「DNSの変更がインターネットを介して伝播するには24〜48時間かかる」という古い格言は、「過去86400秒以内にこのレコードを照会したDNSサーバーにDNSの変更がキャッシュされる可能性があります」

サーバーがオフラインになったときにDNSの冗長性を確保したい場合は、バックアップDNSサービス(dyndns.comなど)を調べるか、独自のセカンダリNSを作成する必要があります。


5

インターネット上のすべてのDNSサーバーは「サードパーティ制御」です(ルートDNSサーバーはインターネットに対して何らかの形で「専有」であると考えることができますが、独自のプライベートルートを設定できる技術的な理由はありません)。

DNSサーバーは、提供する各応答に推奨される「存続可能時間」(TTL)を提供します。リモートリゾルバ(クライアント、クライアントリゾルバライブラリなどの再帰的な解決を実行する他のDNSサーバー)は、キャッシュから破棄する前に、そのTTLまでの回答をキャッシュすることになっています。

既存のレコードに加えている変更が実際のクエリに反映されていない場合は、TTL値が十分に高いため、既存の回答がリゾルバから期限切れになるのを待つことができない可能性がありますネット周辺のキャッシュ。

サーバー障害からの背景:DNSの「伝播」と呼ばれるのはなぜですか?


2

インターネット上の誰か(またはコンピューター)が、いわば、あなたのマシンの1つに接続したいとき、彼らはローカルネームサーバーに、興味のあるホスト名と一致するIPアドレスを要求します。

だから誰かに「ねえ、私のクールなウェブサイトhttp://www.example.comを見て」と言うと、相手のコンピューターはローカルネームサーバーに「ねえ、www.example.comのIPアドレスは何ですか?」と尋ねます。

ローカルネームサーバーが以前にその質問に対する答えを検索したことがないと仮定すると、ルートネームサーバーに「.com」の検索を処理するサーバーを見つけるように要求します。その答えが得られると、それらのサーバーに「example.com」の検索を処理するサーバーを尋ねます。その答えが得られると、ifはそれらのサーバーに「www.example.com」のIPアドレスを要求します。

example.comのサーバーがwww.example.comのIPアドレスで応答すると、要求元のネームサーバーに、この質問に対する回答を覚えておく期間についてのヒントも提供します。このヒントは「TTL」または「生存時間」と呼ばれ、秒単位で測定されます。サーバーがTTLに注意を払うという保証はありません。一部のネームサーバーは、ルックアップへの回答を決して記憶しないように構成され、毎秒数回尋ねられても常にプロセスを繰り返します。他のネームサーバーは、おそらくネットワークトラフィックを最小限に抑えるために、データを短時間だけ保持するように提案した場合でも、回答を長時間保持するように構成できます。TTLは単なる提案であり、要件や保証ではありません。

あなたの質問に対する文字通りの答え-あなたのDNSレコードがインターネットに広まらないのは-彼らがそうするべきではないので、彼らがそうしていないということです。

また、DNS情報を調査またはデバッグするように設計されたサイトを使用して独自のDNS情報を表示している場合、TTLの提案に関係なく、サイトがデータを長期間キャッシュしないか、まったくキャッシュしない可能性があります。このサイトの目標は、おそらく5秒前、50秒前、500秒前ではなく、DNSシステムが「今すぐ」と言っていることに関する情報を提供することです。これが、変更がすぐに反映される理由であり、ネームサーバーを切断するとすぐにサービスが機能しなくなる理由です。

あなたの根底にある質問は、「DNSサーバーが再起動したり、ハードディスクが停止した場合でも、インターネット上の他の人が私のウェブページを見ることができるように設定するにはどうすればよいか」

その質問への答えは、ドメインに複数のネームサーバーを設定し、異なるマシンで実行することです-理想的には、異なる物理コンピューターだけでなく、おそらく異なる都市や州、国または大陸でも異なるネットワーク接続で実行することです。これらのネームサーバーのほとんどは「スレーブ」として設定されます。つまり、情報を「マスター」ネームサーバーに探し、データを要求する人にその情報を繰り返します。

したがって、ドメイン名レジストラを使用するWHOISデータでは、ドメインに4つのネームサーバーを構成できます。

ns1.example.com ns2.example.com ns1.otherguy.com ns2.otherguy.com

ns1.example.comは現在のDNSサーバーです。ns2.example.comは、会社/組織内の別のマシンである可能性があります-理想的には、ns1.example.comと同じサブネット上および同じサーバーラック(または同じ人の机の下)にないことです。

ns1.example.comは「マスター」サーバーと見なされます。DNSを変更する場合は、そのマシンで変更を行います。

ns2.example.comは、「スレーブ」サーバーとして設定され、ns1.example.comで設定したデータをコピーするだけです。しかし、外部の世界は、マスター/スレーブの区別であるns2.exampleを気にしません。 .comは、ns1.example.comのように「公式」と見なされます。

ns1.otherguy.comとns2.otherguy.comは、別の場所にセットアップされたマシンです。別の組織の友人/同僚と、ネームサーバーを相互に実行するように手配したり、dyndns.comをセットアップしたりできます。またはeverydns.netまたはその他の無料または商用のDNSプロバイダー。ただし、それを実行すると、これらのマシンはスレーブとして設定され、ns1.example.com(「マスター」)からexample.comのDNS情報を取得し、そのDNS情報をマシン上の任意のマシンに提供します。それを求めるインターネット。

ドメインレジストラーがドメインの新しいNSレコードを公開すると(ほぼ瞬時に)、インターネット上の誰かがどのドメインネームサーバーが "example.com"を処理するかを尋ねると、4つの回答が得られます。

ns1.example.com、ns2.example.com、ns1.otherguy.com、ns2.otherguy.com

他の人のネームサーバーの設定方法に応じて、これら4つをリストとして扱い、「www.example.com」に到達する方法を一度に1つずつ尋ねるか、または4人全員に同じ質問を同時に、最初に回答したマシンから回答を取得します。いずれにせよ、ハードディスクが死んだか、リブートするなどしてns1.example.comがダウンした場合、代わりに他の3台のマシンが質問に答えることができ、ウェブサイトは引き続き表示されます。

この問題を解決する最も簡単な方法は、ドメインのDNSを処理するDNSサービスプロバイダーにサインアップすることです。この価格は、月額無料から数千ドル(おそらく数万または数十万)に及ぶ希望するサービスのレベル。年間30ドル程度で、かなり信頼できるサービスを利用できます。無料のサービスはひどくはないため、かなりの前払い率を持っていますが、ウェブサイトにお金を稼ぐことに依存している場合は、1年間のDNSで30ドルを考え出す必要があります。

次に、DNSサービスプロバイダーの指示に従って、ドメイン名レジストラーでNSレコードを変更します。これで設定は完了です。


0

他のDNSサーバーが行うキャッシュは、記録に割り当てられたTTLに依存します。TTLが非常に低いか高い場合があります。DNS構成に関する詳細を教えてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.