【図解/AD】初心者向けDNSのSRVレコードの仕組みと使い方~優先順位と重さ,フォーマット~

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 の図解については以下をご参照下さい。

【図解】初心者にも分かるKerberos認証とspnegoの仕組み ~SSOのシーケンス,統合windows認証について~
【図解】初心者にも分かるKerberos認証とspnegoの仕組み ~SSOのシーケンス,統合windows認証について~
Kerberos とは Kerberos (読み方:ケルベロス) とはシングル...

DNS のレコードとは

DNS の一番有名な使われ方は単にドメイン名 (FQDN や URL) を IP アドレスに変換することです。このようなドメイン名から IP アドレスを調べるためのレコードは『A レコード』と呼ばれています。(IPv4 アドレスは A レコード、IPv6 アドレスは AAAA レコード)

DNS でもう 1 つ有名な使われ方は、SMTP クライアントが宛先メールアドレスの @ 以降のドメイン名から、送信すべき SMTP メールサーバのホスト名を検索することです (実際にはさらにそのホスト名の A レコードを検索して IP アドレスも調べる) 。このようなレコードは『MXレコード』と呼ばれています。

この MX レコードを汎用的にしたものが『SRV レコード』です。MX レコードでは @ 以降のドメイン名を保有している SMTP メールサービスを行うサーバを探索できますが、SRV レコードではドメイン名に対する任意のサービスの場所を探索できます。

SRV レコードは後から追加になった DNS レコードです。RFC 2782 で定義されています。レコードの QNAME (クエリ名) のフォーマットは以下になります。

QNAME = _Service._Proto.Name

_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 台あることを示しています。

nslookup で SRV レコードを調べてみる

Kerberos の SRV レコードを確認する場合は以下のように打ちます。

nslookup -type=srv _kerberos._tcp.example.com

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 レコードレスポンス]