treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

(2/3)ちょっとした疑問:優先DNSと代替DNS設定

前回「(1/2)ちょっとした疑問:有線DNSと代替DNS設定」について、内部DNSサーバを優先DNSに設定し参照しつつ、代替DNSサーバとしてルータアドレス(プロバイダのDNSへフォーワーダする)を指定することについてご報告しました。

今日はこの続きです。

ちなみに、前回も記述しましたが、この話はDNSサーバのうち「キャッシュサーバによる名前解決」の話であり、「権威サーバ」の話ではありません。

結局どっちでもいい?

前回の優先DNSと代替DNSの組み合わせだと

  • イントラ内のDNSサーバ:内部ネットワークのホストとインターネット上のホスト名前解決
  • プロバイダのDNSサーバ:インターネット上のホスト名前解決のみ

内部ネットワークのホストを名前解決する機能が、代替DNSとなるルータアドレス(プロバイダのDNSへのフォワーダ)では提供されない、というポイントがありました。

どっちのDNSを参照してもインターネット上のホスト名前解決が提供されるので、Web・メールあたりは影響なさそうですが、内部ネットワークに設置されたサーバやPCといった名前解決はできなくなります。
この組み合わせだと「内部ネットワークのコンピュータ同士の名前解決を使っていない=内部ネットワークの他のコンピュータを参照しない」環境であれば差はない、ということになります。

しかし、DNSサーバが設置されているような内部ネットワークであれば、他のコンピュータを内部ネットワーク内で参照することもあるだろうことが予想されます。ファイルサーバとか。
PC単体に「内部ネットワークのホストを名前解決する代替方法」が用意されているのであれば、それでもOK、と考えることもできます。
具体的にはhostsファイルやlmhostsファイルによる名前解決+プロバイダのDNSを組み合わせる、という方法ですね。

f:id:treedown:20180701143108p:plain

ファイルは「C:\Windows\System32\drivers\etc」に保管されています。とりあえずなら、このファイルを使っておけ、という考え方もあり。
ただし、ここで優先順位を考慮しておこう必要があります。要するに優先順位の高いDNSリゾルバキャッシュによる名前解決に完全に失敗してからじゃないとhostsファイルやlmhostsファイルの参照が始まらないので、名前解決の都度、失敗待ちをしなきゃいけないことにはなります。

また、ファイルをクライアント(PC)一台一台に配らなきゃいけない、これは結構な作業負荷になることがあり、やっぱあるのならDNSサーバを使いたいと考えるのが自然です。

そういやActive Directoryだと

小規模なActive Directoryで上記のような構成を採ろうと考える場合もあるかもしれません。
小規模なActive Directoryではドメインコントローラが一台しか設置(予算がないから)できず、そもそもDNSサーバもドメインコントローラで実行される一台しか用意できない、と言うケースです。
で、いままではルータアドレスからフォワーダしたプロバイダのDNSを参照することでインターネット接続絡みのサービスは利用できていたわけだから、

「ドメインコントローラが障害の場合でも、せめてインターネット接続絡みのサービスは利用できるよう、代替DNSの値はルータアドレス(プロバイダのDNSを利用)にしておこうか?」

と考えることになります。

しかし、これが落とし穴、設定画面のラベルに優先DNSや代替DNSと表示されているからといって優先順位が「優先DNS⇒最優先、代替DNS⇒優先DNSが使えなかったら」と動作するってわけじゃあないのがポイントです。
名前解決リクエスト⇒応答の結果、を経て、WindowsのDNSクライアントが代替DNSの結果を優先し、代替DNSが優先的に利用される、という動作も起こり得ます。そうなるとActive Directoryで供給している認証やらグループポリシーやら、必要な機能が期待通り動作しない、と言うケースもある話です。

要するにActive DirectoryのドメインコントローラはDNS、Active Directory環境内ではドメインコントローラ以外のDNSは設定してはいけませんよ、って思っていた方がよいという話をされるのが一般的。

優先DNSが障害でなくても

ここまでで優先DNSに障害起きなきゃいいんでしょ?という感じを受けるかもしれません。障害が起きたときにだけ最低限使えればいい、と言うレベルでいいから保険をかけておきたいんだよなぁ、って思いがあるのは理解できます。
実際優先DNSに指定したIPアドレスに対して疎通が取れなくなった場合、DNSクライアントは代替DNSに名前解決のリクエストを送信することになります。ここの処理は人間が介在せず自動的に実行されます。
ただ、その判断はコンピュータが自動的に実行するため、優先DNSに障害が発生していなくても代替DNSへの参照が発生するケースがあるということは頭に入れておく必要があります。

Windowsに限って言えば、DNSサーバを複数参照する設定値が用意されているのは、名前解決するゾーン(名前解決する先)の種類を用意したり優先順位を用意したりするする目的で複数のDNSサーバアドレスを入力できるようにしているわけじゃない、という点がポイントになります。
DNS設定画面では優先DNS、代替DNSとラベルが表示されているわりには優先順位は保証されていません。
じゃあ、何のため?となると、「DNSサーバで名前解決をする」というアクションの冗長性確保でしかありません。

つまり優先DNSに設定されたIPアドレスを持つDNSサーバに対しての名前解決が問題なく実行可能な状況であっても、代替DNSが参照され代替DNSから応答された名前解決情報をDNSクライアントが参照することもある、ってことです。

■じゃあ、どんなケース?

ちょっと、次回までに考えておきます。