ターミナルサービス:ライセンスサーバーをどうするか

管理用リモートデスクトップでは必要ないが、従来アプリケーションサーバーモードと呼んでいたターミナルサーバーを使う場合は、ライセンスを管理するライセンスサーバーが必要となる。
これをどう設置すべきか。

http://www.microsoft.com/japan/windowsserver2003/techinfo/overview/termservlic.mspx」に次の文面がある。

1 つのライセンス サーバーは、複数のターミナル サーバーをサポートできます。1 つのドメイン、またはサイト全体に、1 つまたは複数のライセンス サーバーが存在できます。

ライセンスサーバードメイン内にも複数立てられるということだ。

また、次のような表記が8ページにある。

ターミナル サーバー ライセンス サービスは、ターミナル サーバーとは別のエンティティです。ライセンス サーバーは、小規模な展開ではターミナル サーバー上に共存させることも可能ですが、大規模な展開ではほとんどの場合別のサーバーに展開されます。

ここで注目すべきは、ターミナルサーバー上に共存させることも可能、という部分。一台のサーバーで、ライセンスの管理を行うライセンスサーバーと、ターミナルサーバーを稼動させることができるはずだ。

また、同ページには、Windows 2000Windows Server 2003 のターミナルサーバー両方が混在する場合、ライセンスサーバーは、Windows Server 2003 にないとダメよ、ということも回りくどい言い方で書いてある。

ターミナルサービス:ライセンスサーバーを稼動させる

すでに、ライセンスサーバーを稼動させていたが、ターミナルサーバーと同じマシン内だったのでうまく動かない、と思っていた。
しかし、同じマシンで動かすこともできるようだ。

実はすでにライセンスサーバー自体のインストールや、アクティブ化はできている。
しかし、サーバで「ターミナルサービスライセンス」を選んでも、対象となるサーバが見つからない、というメッセージが表示されていた。

そこで、「http://www.microsoft.com/japan/windowsserver2003/techinfo/overview/termservlic.mspx」を読んでいると12ページに次の記述があった。

ライセンス サービスの発見

ターミナル サーバーは、ライセンス サーバーの場所を見つけるために、発見プロセスを使用します。このプロセスは、ターミナル サーバー サービスが起動されたときに開始されます。この発見プロセスは、現在ターミナル サーバーが置かれている環境に応じて変化します。
また、WMI スクリプトを使用して、ターミナル サーバーで 1 つまたは複数の優先するライセンス サーバーを指定することによって、この発見プロセスを置き換えることも可能です。
優先するライセンス サーバーの設定、優先するライセンス サーバーの削除、または優先するライセンス サーバーのクエリに使用できる 3 つのスクリプトについては、このドキュメントの「管理」の項を参照してください。

ふむふむ。どうも、この発見プロセスがうまくいってないために、接続できないのだな。WMI スクリプト云々の部分はとりあえず、おいといて続きを読む。

Active Directory ベースのドメインの場合、ターミナル サーバーはまず、LicenseServers レジストリ キーに指定されている任意のライセンス サーバーへの接続を試みます。失敗した場合は、LDAP (Lightweight Directory Access Protocol) クエリを実行して Active Directory 内の次に示すオブジェクトを探すことによって、任意のエンタープライズ ライセンス サーバーの検出を試みます。

うーん、レジストリキーに指定した覚えないから、うまくいかないのだろう。エンタープライズライセンスサーバーではないから、そのまま失敗しちゃってるわけだ。

すると、次に「重要」と書いた欄が唐突に出現する。

Windows Server 2003 では、非ドメイン コントローラがライセンス サーバーになることは可能ですが、ドメイン ライセンス サーバーは自動的に発見されないことに注意する必要があります。

たしかに、今回のサーバはドメインコントローラじゃない。すると自動的に発見されないんだ。やっぱり…。

ドメイン ライセンス サーバーとして設定された非ドメイン コントローラのライセンス サーバーとの通信が必要なすべてのターミナル サーバーに、優先するライセンス サーバーを設定する必要があります。

ふむふむ、つまり、今回対象となっている Windows Server 2003 のマシンに「優先するライセンスサーバー」を設定すればよいわけだ。今回は、共用するからサーバー自分自身ということになるけれど。どうやったらできるのか。

ということで続きを読むが、非ドメインコントローラーをライセンスサーバーにするための具体的な方法は説明されない。ぶっちゃけて言えば、前述の通り「レジストリキー」に指定があればいいわけだ。それはどうやってやるのかと言えば、そうか、その前に書いてあった WMIスクリプトでできるのかもしれない。もう一回「WMIスクリプト」の部分を読み返す。

また、WMI スクリプトを使用して、ターミナル サーバーで 1 つまたは複数の優先するライセンス サーバーを指定することによって、この発見プロセスを置き換えることも可能です。
優先するライセンス サーバーの設定、優先するライセンス サーバーの削除、または優先するライセンス サーバーのクエリに使用できる 3 つのスクリプトについては、このドキュメントの「管理」の項を参照してください。

そこで「管理」の項を見る。「優先するライセンス サーバーの WMI スクリプト」という項があった。

AddLicenseServer.vbs
'***************************************************************************
'
' 指定されライセンス サーバーをターミナル サーバーのレジストリに追加する WMI VBscript
'
'***************************************************************************
if Wscript.arguments.count<1 then
(以下略)

これを実行すればいいわけだ。

なぜ、この部分だけえらくローテクなコマンドラインを使わなくちゃならんのか疑問だが、私にとってはコマンドラインの方が使いやすい。該当部分をワード文書からコピーして、サーバでエディタを開いて貼り付ける。それを AddLicenseServer.vbs というファイル名で Cドライブのルート C:\ に保存する。

コマンドラインを起動して「cd c:\」でルートに移動。サーバー名を引数にしてコマンドラインで実行する。

AddLicenseServer.vbs サーバ名

これで、レジストリには登録されたようだ。

サーバーの画面で「管理ツール」から「ターミナルサービスライセンス」を選ぶと、以前は「ライセンスサーバーが見つかりません」といったメッセージが表示されていたのだが、今回はライセンスサーバーがすんなりと表示された。うまく行っているようだ。

とりあえず、ライセンスサーバーについては、これでひと段落したと考えよう。

ターミナルサービス:ターミナルサーバのモード?

ライセンスサーバーは利用できるようになったようだが、やっぱりクライアントからは接続できない。どうも、Per Device(接続デバイス数ライセンス)のモードと、Per User(接続ユーザー数ライセンス)モードにずれがあるような気がする。

http://www.microsoft.com/japan/windowsserver2003/techinfo/overview/termservlic.mspx」の15ページに「ターミナル サーバーのライセンス モード」という項があり、こんな記述がある。

既定では、Windows 2000 を実行しているターミナル サーバーが Windows Server 2003 にアップグレードされると、Per Device モードに設定されます。ただし、Windows 2000 を実行しているターミナル サーバーが インターネット コネクタ モードにある場合は、Per User モードに設定されます。

なんだかわからない。上で述べているのは大きな選択肢の中の一部だと思うが、その他の場合にどうなるかはここには書いていない。どうも、初期値は「Per Device」モードのようだ。

どんなライセンスを購入したか、詳しいことを知らなかったので「ターミナルサーバーライセンス」の画面で確認すると、「製品」欄に三つの項目がある。

うち「Per User CAL Token」は合計が「3」利用可能も「3」発行済みが「0」。
「一時ライセンス…」は合計が「-」利用可能も「-」発行済みが「6」*1
「既存の Windows 2000 Server…」は合計「無制限」利用可能「無制限」発行済み「0」。
これを見る限り、購入したのは「Per User CAL Token」だ。しかし、初期値では「Per Device」モードになっている。これが、つながらない原因ではないか。

そこで、これを変更する場所を探した。「管理ツール」の中の「ターミナルサービス構成」にそれらしい項目があった。「サーバー設定」の欄に「ライセンス」という項目があり「接続デバイス数」となっている。

そこで「ライセンス」のプロパティを確認すると「接続デバイス数」と「接続ユーザー数」を切り替えられるようになっていた。早速切り替えて、ターミナルサービスライセンスのサービスを再起動する。

そこで、手元のマシンからこのサーバーに「リモートデスクトップ接続」を使ってアクセスしてみた。今まではエラーメッセージで進めなかったが…。成功した。問題なくつながった。

*1:評価のために6台のマシンから接続していたが最初に接続してから120日経つと、そのマシンからの接続が強制的にできなくなってしまう。その履歴だ。

ターミナルサービス:ライセンス発行されない

どうにかつながるようになったのはよいが、おかしなことに気がついた。
「ターミナルサービスライセンス」で確認すると、Per User CAL Token の「発行済み」が「0」のままだ。接続してたら減っていくものだと思っていたので戸惑う。Per User CAL Token をうまく利用できていないのではないか。

そこで、4台のマシンから別々のユーザーでサーバにアクセスしてログインしてみた。問題なく接続できる。「発行済み」は 0 のままだ。やはりどこかで間違えているような気がする。困った。