こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

2つあるDNSサーバの選択について

画像イメージを添付して質問させていただきます。

a.co.jpのDNSサーバとして、dns1.a.co.jpとdns2.a.co.jpの二つのDNSサーバをJPRSに登録した場合、
b.co.jpからweb.a.co.jpにアクセスする際には、b.co.jpの内部DNSサーバが、a.co.jpのDNSサーバに
の場所を確認するために、ルートドメインからco.jpのDNSサーバに参照していくかと思います。

co.jpのDNSサーバにはdns1.a.co.jpとdns2.a.co.jpの二つのDNSサーバをb.co.jpのDNSサーバに
返すと思いますが、そこでb.co.jpはどちらのDNSサーバを選択し、web.a.co.jpのアドレスを
名前解決するのでしょうか?優先順位等あるのでしょうか?

投稿日時 - 2011-06-30 17:11:39

QNo.6845331

困ってます

質問者が選んだベストアンサー

 あるNSからの応答が無かった場合に、DNSキャッシュサーバがどうするかは、DNSの原規格[RFC1035] の記述はかなり曖昧です。基本的には別のNSを使うことになってますが、エラーをクライアントに返してもよいことになっています。確実に言えるのはそれだけで、あとはDNSキャッシュサーバのアルゴリズム次第ということになります。

 とはいえ、最初に選んだ1つのNSから応答が無いからといってクライアントに即座にエラーを返すキャッシュサーバは私の知る限り無く、すべてのNSに何度かクエリを投げ、どれからも応答が得られないことが分かって初めてクライアントにエラーを返すものが多いようです。

> 応答速度が早いdns1.a.co.jp優先したとして、
> 次のタイミングでdns1.a.co.jpが故障により通信不可となった場合、
> b.co.jpは即座にdns2.a.co.jpから名前解決しようとするのでしょうか?
> その時にb.co.jpのPCにはweb.a.co.jpのDNSキャッシュはないものとします。

 dns1が「故障により通信不可になった」ことを、DNSキャッシュサーバは即座に知ることはできません。BIND9は、dns1に問い合わせを投げて、一定時間(数秒、場合によって差がある)以内に応答がなければ、dns2に問い合せます。

> web.a.co.jpはb.co.jpのDNSサーバにもキャッシュされており、
> そもそもDNSに聞きにいかないのでしょうか?

 web.a.co.jp がキャッシュされていればDNSに聞きにいきません。つまり、(b.co.jpの)クライアントが web.a.co.jp を名前解決するために(b.co.jpの)DNSキャッシュサーバに問い合わせを投げ、さらにDNSキャッシュサーバが運悪く故障したdns1のほうに聞きにいったがタイムアウトしてdns2に聞いてようやく応答を得たために名前解決に数秒かかった、ということが発生しても、それは初回だけです。キャッシュが消える(通常web.a.co.jpのTTLが経過する)までは、DNSキャッシュサーバが保持しているキャッシュを使って応答するため、クライアントがweb.a.co.jp の名前解決をする度に数秒待たされるわけではありません。(これはBIND9に限らずすべてのDNSキャッシュサーバで言えます)

> あるいは都度都度、優先としているdns1から応答があるかどうか確認し、
> 応答がない場合、dns2に聞きにいくのでしょうか?

 キャッシュが消える都度、DNSキャッシュサーバはdns1またはdns2に問い合わせを行いますが、BIND9の場合、応答が返ってこなかったNSは優先度を下げることをします。つまり、dns1から応答がないためdns2に聞き直したということが起こると、次回はdns2に優先的に問い合わせるようにします。dns1に問い合わせを永遠にしなくなるわけではなく、時々dns1に問い合わせを投げてみて復活したかどうかを確認するようです。

投稿日時 - 2011-07-03 02:19:14

お礼

ご回答ありがとうございます。

DNSの選択等、アプリケーション側の動作に依存することが判り、大変助かりました。
きめ細かなご回答をいただき、本当にありがとうございます。


質問させていただきました本当の目的は、
DNS及び安価なアウトバウンドルータの構成で、
回線の可用性が確保できるかといったことです。

まだDNSの動作が曖昧な部分がございますが、
上記回答により、目的が実現できるのでないかと思っております。

宜しければ下記質問に対してもご回答いただけないでしょうか。
何卒よろしくお願いいたします。

>BGP4、負荷分散装置を利用しないマルチホーミング
 http://oshiete.goo.ne.jp/qa/6853135.html

投稿日時 - 2011-07-04 10:18:51

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

まず、DNSのプロトコルとしては、あるゾーンの複数NSレコードに優先順位はありません。どちらを先に選ぶかは(b.co.jpの) DNSキャッシュサーバのアルゴリズム次第です。

DNSキャッシュサーバとしてよく使われるBIND9では、基本的に応答が速いほうを優先選択し、先に問い合わせをします(応答得られなければ、もう一方にも問い合せます)。最初の1,2回はどちらが速いか分からないため、ランダム選択になりますが、何回かクエリを投げているうちにそれぞれの応答時間が分かり、速いほうを優先するようになります。たまに遅いほうにも問い合わせを投げて応答時間を再確認したりします。

BINDの版により細かい違いはありますが、概ねこのような感じです。

投稿日時 - 2011-07-01 02:45:44

お礼

ご回答ありがとうございます。

>まず、DNSのプロトコルとしては、あるゾーンの複数NSレコードに優先順位はありません。
>どちらを先に選ぶかは(b.co.jpの) DNSキャッシュサーバのアルゴリズム次第です。

その一言が知りたかったです!


下記は続けての質問で申し訳ないのですが、
ご回答いただければと思います。


b.co.jpのDNSサーバがa.co.jpのDNSサーバの
応答速度が早いdns1.a.co.jp優先したとして、
次のタイミングでdns1.a.co.jpが故障により通信不可となった場合、
b.co.jpは即座にdns2.a.co.jpから名前解決しようとするのでしょうか?
その時にb.co.jpのPCにはweb.a.co.jpのDNSキャッシュはないものとします。

web.a.co.jpはb.co.jpのDNSサーバにもキャッシュされており、
そもそもDNSに聞きにいかないのでしょうか?

あるいは都度都度、優先としているdns1から応答があるかどうか確認し、
応答がない場合、dns2に聞きにいくのでしょうか?


よろしくお願いいたします。

投稿日時 - 2011-07-01 09:25:13

ANo.1

>優先順位等あるのでしょうか?

クライアント側にプライマリドメインとして指定してある方が優先される。

投稿日時 - 2011-06-30 17:50:26

お礼

クライアント側というのは図で言いますと、b.co.jpの内部DNSサーバということでしょうか?
その場合どのようにしてDNS1とDNS2からプライマリドメインを選択するのでしょうか?

またはクライアント側というのはa.co.jpのそれぞれのDNSサーバになるのでしょうか?
その場合、それぞれのDNSサーバ1と2にはプライマリ、セカンダリの設定があるのでしょうか?
またそれがJPRSに登録される形となり、b.co.jpの内部DNSにも認識されるのでしょうか?

投稿日時 - 2011-06-30 17:58:22

あなたにオススメの質問