Active DirectoryとDNSについて その1
今回はActive DirectoryとDNSについての話をしてみようと思います。Windowsネットワークを構築する上ではある程度の規模以上ではActive Directoryの構築、理解は事実上必須となり、Active Directoryを構築する上ではDNSの利用が必須になります。そしてDNS周りの設計が一番技術的に難易度が高く理解が難しいところです。ひとつずつ解説してみたいと思います。 Active DirectoryにはなぜDNSが必要なのか Active DirectoryにはDNSが必須です。DNSがないときちんと動きません。これはなぜかというと、端的には「DNSをつかってドメインコントローラーを探すから」ということになります。ただ、「DNSを使ってドメインコントローラーを探す」と言われてもピンと来ないかもしれません。イメージを持ってもらうために実際のDNSレコードを覗いてみましょう。 以下はad.localというシングルフォレストシングルドメイン環境に、dc01.test.local, dc02.test.localという2台のDCが存在している状況です。バージョンはWindows Server 2022ですが、Windows Server 2003以降であれば基本的に同じ構造になっているはずです。 _msdcs.ad.localというゾーンにdc01, dc02のGUIDがCNAMEで登録されています。 展開していくと、サイト名にひもづくようなレコードがありSRVレコードにdc01, dc02の値が見えます。 違う場所にも同じようなレコードがあります。 以下同様にまだまだたくさんあります。 pdcのところにはdc01だけしか無かったりします。これはPDCエミュレーターというFSMOの役割を持っているのは(この場合はdc01という)単一のサーバーだけだからです。 _msdcs.test.localゾーンではないtest.localゾーンにも同じようなレコードがあることが確認できます。 本筋からずれてしまうので、ここで個々のレコードの意味を説明することはしませんが、見てもらったようにDNSの中に一定のルールに従ってSRVレコードが作成されていることがわかります。クライアントはこれらのレコードを参照しながらActiveDirectory環境で動作します。そしてドメインコントローラー同士もDNSのレコードを参照してお互いに通信したりします。DNSがないとドメインに参加もできないし、ドメインにログオンもできないほどDNSはActiveDirectory内で大切なサービスです。 インターネットのDNSとActiveDirectoryのDNSの関係について ところでDNSと言えばまず思いつくのはActiveDirectory用のDNS…よりも先にインターネットで使われているDNSが思いつくと思います。世界中にある無数のホストの名前解決を行ってくれている階層、分散管理のシステムです。 Domain Name System - Wikipedia この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」で。 Active DirectoryとDNSについて その2 | Windowsインフラ管理者への道 (ebisuda.net)