たごもりすメモ

コードとかその他の話とか。

ActiveDirectoryサーバへの接続のタイムアウトについて調べた

ApacheからLDAP経由*1Windows ActiveDirectoryサーバに接続して認証をやっているのだが、よくわからないタイミングで status 500 になったりして挙動が怪しい。LogLevel debugを設定して見たりしてもいまいちよくわからないが、どうやら確立済みのLDAP接続を使用してクエリを投げたタイミングでエラーになっているようだ。そういう場合に認証拒否とかの挙動ではなく、Internal Server Errorになるというのはどうなんだという気もするが。
あれこれぐぐってみたところ 表示し、Ntdsutil.exe を使用して、Active Directory の LDAP ポリシーを設定する方法 こんなページを見付けた。MaxConnIdleTime というパラメータがそれっぽい。デフォルト15分ということなので、本当に15分で成功と失敗が分かれているのか こんなスクリプト を書いて確認してみた。

結果

ど………どういうことなんだってばよ!!!???

dhcp107:~ tagomoris$ ruby19 ldap_idle_test.rb | sort
14 min, 00 secs : wait and seach: true
14 min, 01 secs : wait and seach: true
14 min, 02 secs : wait and seach: true
14 min, 03 secs : wait and seach: true
14 min, 04 secs : wait and seach: true
14 min, 05 secs : wait and seach: true
14 min, 06 secs : wait and seach: true
14 min, 07 secs : wait and seach: true
14 min, 08 secs : wait and seach: true
14 min, 09 secs : wait and seach: true
14 min, 10 secs : wait and seach: true
14 min, 11 secs : wait and seach: true
14 min, 12 secs : wait and seach: true
14 min, 13 secs : wait and seach: true
14 min, 14 secs : wait and seach: true
14 min, 15 secs : wait and seach: true
14 min, 16 secs : wait and seach: true
14 min, 17 secs : wait and seach: true
14 min, 18 secs : wait and seach: true
14 min, 19 secs : wait and seach: true
14 min, 20 secs : wait and seach: true
14 min, 21 secs : wait and seach: true
14 min, 22 secs : wait and seach: true
14 min, 23 secs : wait and seach: true
14 min, 24 secs : wait and seach: true
14 min, 25 secs : wait and seach: true
14 min, 26 secs : wait and seach: true
14 min, 27 secs : wait and seach: true
14 min, 28 secs : wait and seach: true
14 min, 29 secs : wait and seach: true
14 min, 30 secs : wait and seach: true
14 min, 31 secs : wait and seach: true
14 min, 32 secs : wait and seach: true
14 min, 33 secs : wait and seach: true
14 min, 34 secs : wait and seach: true
14 min, 35 secs : wait and seach: false
14 min, 36 secs : wait and seach: true
14 min, 37 secs : wait and seach: true
14 min, 38 secs : wait and seach: true
14 min, 39 secs : wait and seach: false
14 min, 40 secs : wait and seach: true
14 min, 41 secs : wait and seach: true
14 min, 42 secs : wait and seach: true
14 min, 43 secs : wait and seach: true
14 min, 44 secs : wait and seach: true
14 min, 45 secs : wait and seach: true
14 min, 46 secs : wait and seach: true
14 min, 47 secs : wait and seach: true
14 min, 48 secs : wait and seach: false
14 min, 49 secs : wait and seach: false
14 min, 50 secs : wait and seach: false
14 min, 51 secs : wait and seach: true
14 min, 52 secs : wait and seach: true
14 min, 53 secs : wait and seach: true
14 min, 54 secs : wait and seach: false
14 min, 55 secs : wait and seach: true
14 min, 56 secs : wait and seach: false
14 min, 57 secs : wait and seach: true
14 min, 58 secs : wait and seach: true
14 min, 59 secs : wait and seach: true
15 min, 00 secs : wait and seach: true
15 min, 01 secs : wait and seach: true
15 min, 02 secs : wait and seach: false
15 min, 03 secs : wait and seach: false
15 min, 04 secs : wait and seach: false
15 min, 05 secs : wait and seach: true
15 min, 06 secs : wait and seach: true
15 min, 07 secs : wait and seach: false
15 min, 08 secs : wait and seach: true
15 min, 09 secs : wait and seach: false
15 min, 10 secs : wait and seach: false
15 min, 11 secs : wait and seach: false
15 min, 12 secs : wait and seach: false
15 min, 13 secs : wait and seach: false
15 min, 14 secs : wait and seach: true
15 min, 15 secs : wait and seach: false
15 min, 16 secs : wait and seach: false
15 min, 17 secs : wait and seach: false
15 min, 18 secs : wait and seach: false
15 min, 19 secs : wait and seach: false
15 min, 20 secs : wait and seach: false
15 min, 21 secs : wait and seach: false
15 min, 22 secs : wait and seach: false
15 min, 23 secs : wait and seach: false
15 min, 24 secs : wait and seach: false
15 min, 25 secs : wait and seach: false
15 min, 26 secs : wait and seach: false
15 min, 27 secs : wait and seach: false
15 min, 28 secs : wait and seach: false
15 min, 29 secs : wait and seach: false
15 min, 30 secs : wait and seach: false
15 min, 31 secs : wait and seach: false
15 min, 32 secs : wait and seach: false
15 min, 33 secs : wait and seach: false
15 min, 34 secs : wait and seach: false
15 min, 35 secs : wait and seach: false
15 min, 36 secs : wait and seach: false
15 min, 37 secs : wait and seach: false
15 min, 38 secs : wait and seach: false
15 min, 39 secs : wait and seach: false
15 min, 40 secs : wait and seach: false
15 min, 41 secs : wait and seach: false
15 min, 42 secs : wait and seach: false
15 min, 43 secs : wait and seach: false
15 min, 44 secs : wait and seach: false
15 min, 45 secs : wait and seach: false
15 min, 46 secs : wait and seach: false
15 min, 47 secs : wait and seach: false
15 min, 48 secs : wait and seach: false
15 min, 49 secs : wait and seach: false
15 min, 50 secs : wait and seach: false
15 min, 51 secs : wait and seach: false
15 min, 52 secs : wait and seach: false
15 min, 53 secs : wait and seach: false
15 min, 54 secs : wait and seach: false
15 min, 55 secs : wait and seach: false
15 min, 56 secs : wait and seach: false
15 min, 57 secs : wait and seach: false
15 min, 58 secs : wait and seach: false
15 min, 59 secs : wait and seach: false
16 min, 00 secs : wait and seach: false
dhcp107:~ tagomoris$

15分前後で結果が違うのはなんとなくわかるが、いくらなんでもファジーすぎないかこれ。Windows Serverってこういうもんなの。

本当にMaxConnIdleTimeだった (4/1追記)

該当サーバの管理者にMaxConnIdleTimeを延ばしてもらったら、上記スクリプトで16min00secsまで全ての結果がtrueになった。どうやら本当に15分でのタイムアウト処理の結果が上記リストだったらしい。なんで15分ジャストで変わらないのかが極めて謎。なんなんだそれ。

*1:mod_ldap, mod_authnz_ldapからLinuxLDAPサーバ(slapd?)経由でADに接続