Active Directory と DNS の関係
Active Directory では DNS サーバが必須です。というのも、AD 環境下では Kerberos Version5 が使われており、この規格ではクライアント PC は認証サーバの IP アドレスを知るために、DNS の SRV レコードを使うことになっているからです。
Kerberos Version 5 は RFC 4120 で規格化されており、Section 7.2.3.2 に DNS の SRV レコードを使う旨が記載されています。
Kerberos はシングルサインオン (SSO) を提供する認証機構です。KDC と呼ばれるサーバが認証と SSO 用の鍵を配布します。
例えば Active Directory 環境ではドメイン配下の PC からファイルサーバへのアクセスは認証無しでアクセス制御されます。
Kerberos の図解については以下をご参照下さい。
DNS のレコードとは
DNS の一番有名な使われ方は単にドメイン名 (FQDN や URL) を IP アドレスに変換することです。このようなドメイン名から IP アドレスを調べるためのレコードは『A レコード』と呼ばれています。(IPv4 アドレスは A レコード、IPv6 アドレスは AAAA レコード)
DNS でもう 1 つ有名な使われ方は、SMTP クライアントが宛先メールアドレスの @ 以降のドメイン名から、送信すべき SMTP メールサーバのホスト名を検索することです (実際にはさらにそのホスト名の A レコードを検索して IP アドレスも調べる) 。このようなレコードは『MXレコード』と呼ばれています。
この MX レコードを汎用的にしたものが『SRV レコード』です。MX レコードでは @ 以降のドメイン名を保有している SMTP メールサービスを行うサーバを探索できますが、SRV レコードではドメイン名に対する任意のサービスの場所を探索できます。
ADの冗長化を担うDNS SRVレコード
SRV レコードは後から追加になった DNS レコードです。RFC 2782 で定義されています。
レコードの QNAME (クエリ名) のフォーマットは以下になります。
_Proto は TCP や UDP 等を示します。.Name は該当のドメイン名です。
_Service はサービス名です。Active Directory ではドメインコントローラ構築時に、以下のサービスが SRV レコードとして自動登録されます。
- Global Catalog (GC)
- Kerberos (KDC)
- Kpasswd
- LDAP
なので例えば KDC サーバを探す場合のレコードの QNAME は _kerberos._tcp.example.com となります。
デフォルトで作成される SRV レコードを見てみると、以下のようになっています。
SRV レコードが各サービス毎に 2 つずつできています。これはドメインコントローラが 2 台あることを示しています。
このように、AD (正確にはドメインコントローラ) の冗長化は DNS の SRV レコードによって実現されます。
nslookup で SRV レコードを調べてみる
Kerberos の SRV レコードを確認する場合は以下のように打ちます。
C:\Users\Administrator>nslookup -type=srv _kerberos._tcp.example.com
サーバー: localhost
Address: 127.0.0.1
_kerberos._tcp.example.com SRV service location:
priority = 0
weight = 100
port = 88
svr hostname = ad2.example.com
_kerberos._tcp.example.com SRV service location:
priority = 0
weight = 100
port = 88
svr hostname = ad1.example.com
ad2.example.com internet address = 192.168.1.202
ad1.example.com internet address = 192.168.1.201
SRV レコードの仕組みと構造
nslookup の結果からも分かるように、SRV レコードには [サーバのホスト名] と [待ち受け TCP/UDP ポート番号] に加え、[priority] と [weight] という属性があります。
DNS マネージャの該当SRVレコードのプロパティを見ると以下のように priority は "優先順位"、weight は "重さ" として表記されています。
priority (優先順位) は複数ある SRV レコードのうちどれを優先的に使うかを示します。複数の SRV レコード間でこの値が同じ場合は Act-Act 構成となります。この値が異なる場合は、正常時は小さいものだけが使われる、Act-Standby 構成となります。
weight は DNS ラウンドロビン負荷分散時の重みです。この値の比率がラウンドロビンの比率になります。複数の _kerberos._tcp.example.com の SRV レコードで priority が同値であり、ad1 側の SRV レコードの weight が 100 で、ad2 側の SRV レコードの weight が 200 の場合、ad1 より ad2 のほうが 2 倍よく使われます。
SRV レコードのパケットキャプチャ
[Kerberos の SRV レコードクエリ]
[Kerberos の SRV レコードレスポンス]
コメント