- - PR -
OpenDSObjectとKERBEROS認証の関係
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