image_thumb.png
9件のコメント

Active DirectoryとDNSについて その1

今回はActive DirectoryとDNSについての話をしてみようと思います。Windowsネットワークを構築する上ではある程度の規模以上ではActive Directoryの構築、理解は事実上必須となり、Active Directoryを構築する上ではDNSの利用が必須になります。そしてDNS周りの設計が一番技術的に難易度が高く理解が難しいところです。ひとつずつ解説してみたいと思います。

Active DirectoryにはなぜDNSが必要なのか

Active DirectoryにはDNSが必須です。DNSがないときちんと動きません。これはなぜかというと、端的には「DNSをつかってドメインコントローラーを探すから」ということになります。ただ、「DNSを使ってドメインコントローラーを探す」と言われてもピンと来ないかもしれません。イメージを持ってもらうために実際のDNSレコードを覗いてみましょう。

以下はtest.localというシングルフォレストシングルドメイン環境に、dc1.test.local, dc2.test.localという2台のDCが存在している状況です。バージョンはWindows Server 2012ですが、Windows Server 2003以降であれば基本的に同じ構造になっているはずです。

image

_msdcs.test.localというゾーンにdc1, dc2のGUIDがCNAMEで登録されています。

image

展開していくと、サイト名にひもづくようなレコードがありSRVレコードにdc1, dc2の値が見えます。

image

違う場所にも同じようなレコードがあります。

以下同様にまだまだたくさんあります。

image

image

image

pdcのところにはdc1だけしか無かったりします。これはPDCエミュレーターというFSMOの役割を持っているのは(この場合はdc1という)単一のサーバーだけだからです。

image

_msdcs.test.localゾーンではないtest.localゾーンにも同じようなレコードがあることが確認できます。

本筋からずれてしまうので、ここで個々のレコードの意味を説明することはしませんが、見てもらったようにDNSの中に一定のルールに従ってSRVレコードが作成されていることがわかります。クライアントはこれらのレコードを参照しながらActiveDirectory環境で動作します。そしてドメインコントローラー同士もDNSのレコードを参照してお互いに通信したりします。DNSがないとドメインに参加もできないし、ドメインにログオンもできないほどDNSはActiveDirectory内で大切なサービスです。

インターネットのDNSとActiveDirectoryのDNSの関係について

ところでDNSと言えばまず思いつくのはActiveDirectory用のDNS…よりも先にインターネットで使われているDNSが思いつくと思います。世界中にある無数のホストの名前解決を行ってくれている階層、分散管理のシステムです。

このDNSとActiveDirectoryで使われるDNSとは同じものなのか、違うものなのか?このあたりは中々複雑な状況があります。

  • ActiveDirectoryが登場する前からインターネットは存在し、そのなかでDNSは使われていました。
  • ActiveDirectoryは名前解決の仕組みとしてインターネットという大規模システムで使われてもうまく動作しているDNSという仕組みを採用しました。
  • マイクロソフト実装のDNS(以降MSDNSと書きます)をインターネット上のDNSとして構成することも(やれば)できます。
  • インターネット上のDNSとして多く使われているBINDをActiveDirectory用のDNSとして構成することも(やれば)できます。

ここまではまぁよいかと思います。MSも独自のDNS実装を作ったけれども、BINDであろうとMSDNSであろうとDNSはDNSなのでどのような用途にも構成すれば使えますよ、ということです。

難しくなってしまうのは以下のあたりの要素があるからです。

  • インターネット上のドメイン名と同じドメイン名(たとえばgoogle.comドメイン)をActiveDirectoryのドメイン名にすることができてしまいます。(ただし通常これはやらない方がいいです。)
  • インターネット上のDNSをそのままActiveDirectoryのドメイン名とし、インターネット上にすべて公開することができてしまいます。(ただし、これは絶対にやらない方がいいです。)
  • ActiveDirectoryのDNSはインターネットの世界とは完全に切り離して構成することが可能です。(これは推奨される構成です。)
  • ActiveDirectoryのDNSはインターネットの世界とは切り離して構成しつつ、それでもインターネット上のホストの名前解決をActiveDirectoryに参加しているクライアントにさせたい場合には、ActiveDirectoryのDNSがインターネット上のホストの名前解決を可能となるように構成可能です。(これはしばしば行われる構成です。)

さらに混乱に拍車をかけるのは、ActiveDirectory以外にそもそも社内に独自のDNSの空間があって、そこに対してActiveDirectoryを追加するようなケースです。

  • 既存DNSの名前解決をActiveDirectoryのDNSにもさせたい。
  • 既存DNSの名前解決をActiveDirectoryのDNSにはさせたくない。
  • 既存DNSの名前解決をActiveDirectoryのDNSにもさせつつ、インターネット上のホストの名前解決もできるようにしたい。
  • 既存DNSの名前解決をActiveDirectoryのDNSにはさせたくないが、インターネット上のホストの名前解決はできるようにしたい。
  • 既存DNSに問い合わせた場合にもActiveDirectory上のホストの名前解決はさせたい。
  • 既存DNSに問い合わせた場合にはActiveDirectory上のホストの名前解決はさせたくない。

まだまだバリエーションは増やそうと思えば増やせますね。

さらにここで社内の独自のDNSの名前空間がインターネット上のドメイン名と重複しているような場合…さらに混乱できる構成となってしまいます…。私も新人で、「DNSってインターネットの世界で名前解決に使うやつでしょ?」という認識だったころにこのあたりの話を聞いて大混乱したのをよく覚えています。ただ、実際のところ取りうる組み合わせは多数ありますが、実際にお勧めできる設計のパターンとしてはそんなに多くないのでそれらをこれから具体的に説明してみたいと思います。

長くなってしまったので、続きは「Active DirectoryとDNSについて その2」で。

子供3人。家族優先。都内SIer勤務。Windows系中心のインフラよりの何でも屋。脱原発。 Microsoft MVP for Cloud and Datacenter Management.

9件のコメント

  1. 「Active DirectoryとDNSについて その2」期待。
    ドメイン参加していないクライアントからの、名前解決が出来なく勉強中です。

  2. 大変参考になりました。
    外部向けdnsを含めた、adとexchangeサーバーの構成について書いていただけるととても参考にたります!

  3. このような記事がないかなあと探していました。その2へ飛べない、、、
    たまたま昨日購入した本を書かれた方でびっくりしました。

コメントを残す

メールアドレスが公開されることはありません。