(RDS)リモートデスクトップサービスで冗長化かつ負荷分散する方法で書いた手順で、接続ブローカーとDNSラウンドロビンによってリモートデスクトップサービス(ターミナルサービス)の負荷分散+冗長化をもたせました。
構成としては、接続ブローカーサーバ、RDSサーバ1号機(RDSsv1)、RDSサーバ2号機(RDSsv2)、DNSサーバ(ドメインコントローラ)という感じです。
WindowsXP SP3 の端末からテストをしてみたんですが、何故か認証が2回聞かれることがあります。
(XP側でテストしたRDPクライアントバージョは6.1.7600です)
Windows7からではすんなり1回の認証で通ります。
で、どのような場合に2回聞かれているかというと、接続開始時にまずDNSラウンドロビンロビンによって RDSsv1,RDSsv2 のどちらかにセッションをはります。
まずその時に、1回目の認証を聞いてきます。
そして、認証成功後、接続ブローカーによってどのサーバに入るか指示されるわけですが、最初の認証したのとは違うサーバ(RDSsv2)にリダイレクトされると2回目の認証を聞いていきます。
(そのままリダイレクトされずにRDSsv1を使うよう接続ブローカーによって指示されたときは、2回目の認証は聞いてきません。)
つまり、リダイレクト時に、リダイレクト先へ認証済みのチケットが送れてないということですね。
さて、色々調査したところ、原因がわかりました。
それはXPのRDPクライアントはデフォルトでは、ネットワークレベル認証(NLA)が有効になっていないということが原因でした。
(ちなみに、ネットワークレベル認証が対応しているのはRDPクライアント6.0~です。)
今まではリモートデスクトップのセッションを張ってから認証を行ってましたが、それだとセキュリティ的によろしくないので、セッションを張る前に認証するというのがこのNLAです。
RDPクライアントでネットワークレベル認証が有効になっているかどうかは、タイトルバーを右クリックしてバージョン情報を表示するとわかります。
XPではデフォルトだと下記のように有効になっていません。
NLA無効時にRDS(TS)サーバにつなぐとこうなります。
RDPクライアントでネットワークレベル認証を有効にするには下記レジストリに値を追加します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages
末尾の行に "tspkg" を追加。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SecurityProviders
末尾に ", credssp.dll"を追加します。
設定後再起動すると、下記のように有効になります。
NLA有効時にRDS(TS)サーバにつなぐとこうなります。
さて、実はこのネットワークレベル認証ですが、各RDSサーバの設定も関係します。
RDセッションホストの構成 → RDP-Tcp のプロパティでセキュリティに関する設定ができるわけですが、ここの "セキュリティ層" はデフォルトは "ネゴシエート" になっています。
しかし、一番低レベルの "RDPセキュリティ層" にすると、サーバ側でのネットワークレベル認証が無効になってしまいます。
そうなると、クライアントでNLAが有効なはずのWindows7からアクセスしても、サーバ側でNLAが無効になっているため、連続認証の現象が発生するようになります。
なので"セキュリティ層"の設定は "ネゴシエート" もしくは "SSL(TLS1.0)" にしておく必要があります。
ちなみに、下の方にある "ネットワークレベル認証でリモートデスクトップを実行しているコンピュータからのみ接続を許可する" にチェックすると、クライアント側がNLA有効になっていなくて接続すると下記のようなエラーになります。
RemoteAPP使用時のシングルサインオンにも、このネットワークレベル認証が関係しているようです。
この原因探るのに結構時間かかってしまいました。。。
参考:
ターミナル・サービスによるクライアントの仮想化(後編) - @IT RemoteAppの話ですが、下部の"シングル・サインオンを構成する"あたりにヒントがありました。
TechNet:リモート デスクトップ サービスの RDC クライアント シングル サインオンを有効にする