- PR -

OpenDSObjectとKERBEROS認証の関係

1
投稿者投稿内容
ABWR
会議室デビュー日: 2005/04/20
投稿数: 1
投稿日時: 2005-04-20 17:07
ADSIのOpenDSObjectの振る舞いについてお尋ねします。

以下のスクリプトを実行すると、会社によってOpenDSObjectのレスポンスに大きな差がでます。(このスプリクトはO'REILLYの「詳説ActiveDirectory」のサンプルコードを参考に作りました)

-----------------------------------------------------------
strDomain = "DC=AAAA,DC=BBBB,DC=CCCC,DC=co,DC=jp"
strUser = "USER"
strPass = "PASSWORD"

strPath = "LDAP://" & strDomain
strUsername = "CN=" & strUser & "," & strDomain

Set adsLDAP = GetObject("LDAP:")
Set adsMyObject = adsLDAP.OpenDSObject(strDomain, strUsername, strPass, 1)
-----------------------------------------------------------

例えば、私の会社では2-3秒もかかりませんでしたが、ある会社では35秒以上かかりました。
そこで、どこに問題があるのかWin2000サーバーのネットワークモニターでパケットを監視してみると、以下のような謎のパケットが流れています。

-----------------------------------------------------------
Std Qry for _kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs.AAAA. of type Srv Loc on class INET addr. XX.XX.XX.XX XX.XX.XX.XX IP
Std Qry for _kerberos._tcp.dc._msdcs.AAAA. of type Srv Loc on class INET addr. XX.XX.XX.XX XX.XX.XX.XX IP
-----------------------------------------------------------

どうやら、_kerberos._tcp.dc._msdcs.AAAA. のようなSRVがDNSに存在しないため、その際の振る舞いの異なりがレスポンスの差となったようです。

私の会社は、外のドメインを会社から引けるため最終的には以下のメッセージが、即座に帰ってきます。
-----------------------------------------------------------
Std Qry Resp. Auth. NS is AAA. of type SOA on class INET addr. : Name does not exist XX.XX.XX.XX XX.XX.XX.XX IP
-----------------------------------------------------------

レスポンスの遅い会社は、外のドメインが引けない環境なのに"."の設定をせず、しかもルートヒント等を設定していたため、以下のメッセージがあたかもタイムアウト(?)したような遅いタイミングで帰ってきます。
-----------------------------------------------------------
Std Qry Resp. : Server failure XX.XX.XX.XX XX.XX.XX.XX IP
-----------------------------------------------------------

今はレスポンスの遅い会社に、ルートヒントの削除をお願いして運用しているのですが、そもそもなぜ _kerberos._tcp.dc._msdcs.AAAA. のようなDNSクエリが生成されるのか謎です。

そこで、もう少し調べてみたのですが、以下のようにスクリプトを変更したら、上記のDNSクエリが生成されず、ルートヒントの設定が残っていてもレスポンスの改善が図れました。

-----------------------------------------------------------
strDomain = "DC=AAAA,DC=BBBB,DC=CCCC,DC=co,DC=jp"
strUser = "USER"
strPass = "PASSWORD"

strPath = "LDAP://" & strDomain
'strUsername = "CN=" & strUser & "," & strDomain
strUsername = strUser

Set adsLDAP = GetObject("LDAP:")
Set adsMyObject = adsLDAP.OpenDSObject(strDomain, strUsername, strPass, 1)
-----------------------------------------------------------

要は、OpenDSObjectの第2引数をO'REILLYに書かれているような "CN=ユーザID,DC=AAAA,DC=BBBB,DC=CCCC,DC=co,DC=jp"から"ユーザID"に変えただけです。
ちなみに、"DOMAIN¥ユーザID"や"ユーザID@AAAA.BBBB.CCCC.co.jp"も上記のDNSクエリを生成しません。

これはどのような理由からでしょう?
ADSIやActiveDirectoryやDNSを色々調べたのですが、どうにも良くわかりません。

以上、よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)