質問: イントラネット内で使用するWebサーバーの名前解決にunboundというDNSキャッシュサーバー(ローカルDNSサーバー)を立てました。 WebサーバーへのアクセスはWindowsパソコンから行いたいので、ネットワークの設定で優先DNSをローカルDNSサーバーに設定しています。 ローカルDNSサーバーはunboundの設定で名前解決できない場合は別のDNSサーバーにフォワードする設定にしているので通常のインターネットアクセスもローカルの名前解決も問題なくできています。 ただし、このローカルDNSサーバーは24時間稼働している訳ではないのでローカルDNSサーバーが使えない場合でもインターネットへのアクセスができるようにしておく必要があります。 Windowsのネットワーク設定では代替DNSサーバーを指定できるので、ここに別のDNSサーバー(ルーターになります)を設定してみました。この方法ではうまくローカルサーバーへの名前解決をしてくれる時としてくれない時があり安定しません。 ローカルWebサーバーのアドレスをhost1.localとして、ブラウザからhost1.localでアクセスできない状況でもコマンドプロンプトからnslookupを使って確認するとhost1.localのIPアドレスは表示されます。またping host1.localとした場合は返ってきたりこなかったりです。 現状で確実にローカルのWebサーバーにアクセスできるのは優先DNSサーバーのみをローカルDNSサーバーに設定した場合です。 **■■質問したいこと■■** 前置きが長くなってしまいましたが、ローカルDNSサーバーが稼働していても停止していても最低限インターネットへのアクセスを確保するにはどのように設定すればいいでしょうか?もちろん稼働しているときは確実にローカルのWebサーバーへアクセスしたいです。 よろしくお願いします。
回答: Windowsで名前解決をするときは 1.優先DNSサーバーに問い合わせる 2.優先DNSサーバーが反応しない時には優先DNSサーバーと代替DNSサーバーの両方に同時に再リクエスト 3.リクエストした全てが応答しない場合は再度全てに同時再リクエスト(3回まで) という流れになるそうです。 実際にはDNS以外にhostsファイル等での解決もありますがDNSだけに着目した概要としてはこんな感じです。 問題は「反応しない時」の話しです。 問い合わせたリクエストに「知ってるよ」とか「知らないよ」と何かしらの応答があればそこで確定しリトライされません。 サーバーがダウンしていたりネットワークが混雑していたりして「返事をもらえない時」にリトライとなります。 優先DNSサーバーがダウンしていたりネットワークが混雑していてタイムアウトになったりすると 「優先DNSサーバーと代替DNSサーバーの両方に同じリクエストが発行」されますので 優先DNSサーバーが生きているのに代替DNSサーバーが反応してしまうのなら何かしら優先DNSサーバーからの返答が受け取れないもしくは異常に遅れるという何か他の要因があるのかもしれません。 もしくは、名前解決が毎回直接DNSサーバーにリクエスト発行される訳ではないので、優先DNSサーバーがダウンしている時に問い合わせをして代替サーバーが知らないと答えた結果がWindowsのDNSキャッシュに残っていてその「知らない」という情報が参照されているとか...? >またping host1.localとした場合は返ってきたりこなかったりです。 返ってこない時に「IPアドレス」は正しい宛先が表示されていますか? 返ってこないというのは「宛先ホストに到達できません」と「見つかりません。ホスト名を確認してもう一度実行してください」のどちらなのでしょうか?