今回はDNSサーバーを扱う上で、知っておいて頂きたいことを紹介します。あなたはDNSサーバーアドレス設定の2番目以降、「代替DNSサーバー」の意味を正しく理解されているでしょうか?誤った認識だと、トラブルに見舞われることがあります。NGな構成例とともに、解説していきます。
NG構成例
ここでNGなのは、クライアントのDNSサーバー参照設定です。まず、インターネットに接続したいので、「https://www.google.com」などを名前解決するために、インターネット接続用ルーターのDNSサーバーを参照しています。そこまでは問題ありません。
さらに、内部アプリケーションサーバー「server1.example.internal」に接続したいのですが、内部用のアドレスなので、インターネット接続用ルーターでは名前解決できません。そのため、代替DNSサーバー(セカンダリDNSサーバー)として、内部用DNSサーバーを参照しています。このDNSサーバーは、*.example.internal の名前解決しかできません(フォワーダー設定なし)。
なお、このクライアントのOSは、Windows 10 1703より前のバージョンです。
NG構成例ではどうなる?
この構成でも、大体は期待通り動作します。インターネットにも接続できるし、内部アプリケーションサーバーにも接続できます。
しかし時々、内部アプリケーションサーバーに接続できないことがあります。突然接続できなくなりますが、インターネットには接続できる。原因を調べているうちに、15分くらいで自然に復旧します。
接続できない理由の考察
なぜ時々接続できなくなるのでしょうか?この理由を考えてみました。ただし、パケットキャプチャなどで解析したわけではなく、推測だということを予めご了承下さい。
この時、クライアントでは次のことが起きていると考えています。
- クライアントが「server1.example.internal」をDNSサーバーに問い合わせる。
- 優先DNSサーバーから「存在しない」という応答が返る。
- クライアントが「存在しない」という否定応答をキャッシュする。
- 否定応答キャッシュの生存時間の間、何度「server1.example.internal」にアクセスしても、IPアドレスが解決できないため、接続できない。
否定応答のキャッシュの生存時間は、Windows 10 1703よりも前のバージョンでは、規定で15分とのことです(それ以降は5秒)。そう考えると、15分で自然復旧することにも頷けます。そもそも、DNSサーバーアドレスの2番目以降は「代替」ですから、異なるゾーンのDNSサーバーを指定すべきではないでしょう。DNSクライアントの仕組み上も、優先DNSサーバーから否定応答が返ったからといって、代替DNSに再度問い合わせるような仕組みでは無いと思います。
ですが、ではなぜ、大体のケースでは動作していたのでしょうか。申し訳ないのですが、ここがよく分かっていません。何らかの動作によって、代替サーバーの応答が先に来ているのではないかと考えいます。例えば、優先DNSサーバーがルートネームサーバまで問い合わせていて、時間がかかっている間に代替DNSサーバーに問い合わせて解決成功しているとか。
どうするべきか?
内部用DNSサーバーの設定を変えるべきです。フォワーダーとして、インターネット接続用ルーターを登録することで、自分が解決できないアドレスを、別のDNSサーバーに問い合わせるようにします。こうすると、内部用DNSサーバーだけで、*.example.internalも、インターネットアドレスも、両方解決できるようになります。
そして、クライアントからは、内部用DNSサーバーのみを参照するようにします。
最近のWindowsは大丈夫?
Windows 10 1703以降は、否定応答キャッシュの生存時間が規定で5秒とのことです。上記の考察が正しいとしたら、接続できない問題は5秒で自然復旧することになります。だとすれば問題として認識されにくいかもしれません。とはいえ、5秒であっても、処理タイミングによっては悪影響があることには変わりありません。やはり、上のNG構成は避けるべきでしょう。
結論
1つのクライアントのDNSサーバー参照設定で、解決可能なゾーンが異なるDNSサーバーを混在させてはいけません。
おわりに
今回の記事は以上です。不備やご意見等ありましたら、下のコメント欄やtwitterからお願いします。
Windows Server の知識をさらに深めるには、書籍もおすすめです。Windows Server は実は機能が豊富で、Webに情報がないケースも多いです。無駄に探し回らないために、良書を手元に置いておくと効率的です。おすすめの本は、以下記事にまとめています。
最後まで読んでいただきありがとうございました。
フィードバック
あなたが抱えている疑問や悩みは解決できたでしょうか?当ブログではそれを最重視しています。今後もあなたの役に立つ情報を提供するために、ぜひ教えて下さい。
コメント